Cosmetic: fix spelling; patch from David Mitchell
[mono.git] / mcs / gmcs / ChangeLog
1 2007-01-20  Marek Safar  <marek.safar@gmail.com>
2
3         * cs-parser.jay: Better parameter error handling.
4
5 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
6             Raja R Harinath  <rharinath@novell.com>
7
8         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
9         Note the order in which accessors are declared in the source.
10
11 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
12
13         * generic.cs (TypeParameter.FindMembers): Use the generic
14         constraints, not the constraints to check for methods (first fix
15         of 80518).
16
17 2006-12-30  Marek Safar  <marek.safar@gmail.com>
18
19         * cs-parser.jay: Better syntax errors handling.
20
21 2006-11-21  Marek Safar  <marek.safar@gmail.com>
22
23         * cs-parser.jay: Tiny change to work with mcs tokenizer.
24
25         * cs-tokenizer.cs: Remove after unification with mcs.
26
27 2006-10-28  Marek Safar  <marek.safar@gmail.com>
28
29         A fix for bug #78998
30         * generic.cs (ConstructedType.AsAccessible): Check accessibility of type
31         arguments as well.
32
33 2006-10-26  Marek Safar  <marek.safar@gmail.com>
34
35         A fix for bug #76591
36         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous methods.
37
38 2006-10-25  Brian Crowell  <brian@fluggo.com>
39
40         Fix #79703
41         * generic.cs (CheckConstraints): Allow generic parameters with
42         inheritance constraints to satisfy reference type constraints.
43
44 2006-10-09  Martin Baulig  <martin@ximian.com>
45
46         * generic.cs
47         (NullCoalescingOperator.DoResolve): Fix #78964; added gtest-294.cs.
48
49 2006-09-25  Martin Baulig  <martin@ximian.com>
50
51         * class.cs: Remove after unification with mcs source.
52
53 2006-09-24  Raja R Harinath  <harinath@gmail.com>
54
55         * convert.cs: Remove after unification with mcs source.
56
57 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
58
59         * class.cs (MemberBase.VerifyClsCompliance): When method has type
60         parameters verify them as well.
61
62         * generic.cs (Constraints.VerifyClsCompliance): Verify CLS-Compliance of
63         the type parameter constraints.
64         (Generics.VerifyClsCompliance): Ditto.
65
66 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
67
68         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
69         for anonymous block with out argument.
70
71 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
72
73         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
74         not used private events only.
75
76 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
77
78         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
79
80         * cs-parser.jay: Parse correctly cast of default (T).
81
82         * generic.cs (DefaultValueExpression.DoResolve): Check for void type.
83         Store original type via EmptyConstantCast.
84
85 2006-09-22  Martin Baulig  <martin@ximian.com>
86
87         * delegate.cs: Removed; this file is now shared with mcs.
88
89         * attribute.cs: Removed; this file is now shared with mcs.
90
91 2006-09-22  Martin Baulig  <martin@ximian.com>
92
93         * ecore.cs: Removed; this file is now shared with mcs.
94
95 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
96
97         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
98
99         * ecore.cs (NullCast): Derives from NullConstant.
100
101         * generic.cs (DefaultValueExpression): Fixed to cope with the constant
102         results.
103
104 2006-09-21  Martin Baulig  <martin@ximian.com>
105
106         * decl.cs: Removed; this file is now shared with mcs.
107
108 2006-09-21  Raja R Harinath  <rharinath@novell.com>
109
110         * rootcontext.cs: Remove after unification with mcs source.
111
112         * report.cs: Remove after unification with mcs source.
113         * generic.cs (AddTypeParameter, LookupTypeParameter): Move to
114         mcs/typemanager.cs.
115         (InitGenerics, CleanUpGenerics): Remove.
116
117         * support.cs: Remove after unification with mcs source.
118
119 2006-09-20  Raja R Harinath  <rharinath@novell.com>
120
121         * codegen.cs: Remove after unification with mcs source.
122
123 2006-09-19  Martin Baulig  <martin@ximian.com>
124
125         * expression.cs: Removed; this file is now shared with mcs.
126
127 2006-09-19  Martin Baulig  <martin@ximian.com>
128
129         * generic.cs
130         (TypeManager.IsEqual): Moved into ../mcs/typemanager.cs.
131         (TypeManager.DropGenericTypeArguments): Likewise.
132         (TypeManager.DropGenericMethodArguments): Likewise.
133         (TypeManager.GetTypeArguments): Likewise.
134         (TypeManager.HasGenericArguments): Likewise.
135
136 2006-09-19  Martin Baulig  <martin@ximian.com>
137
138         * ecore.cs (PropertyExpr.InstanceResolve): Fix the CS1540 check.
139
140 2006-09-19  Martin Baulig  <martin@ximian.com>
141
142         * typemanager.cs: Removed; this file is now shared with mcs.
143
144 2006-09-16  Raja R Harinath  <rharinath@novell.com>
145
146         * Makefile (LOCAL_MCS_FLAGS): Use instead of PROFILE_MCS_FLAGS.
147         * AssemblyInfo.cs, driver.cs: Remove after unification with mcs source.
148
149 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
150
151         A fix for #79401
152         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
153         only if parent type is class.
154         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
155         update.
156
157 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
158
159         * cs-parser.jay,
160         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
161         keywords are used.
162         * typemanager.cs(CSharpName): Converts NullType to null.
163
164 2006-09-15  Martin Baulig  <martin@ximian.com>
165
166         * pending.cs: Removed; this file is now shared with mcs.
167
168 2006-09-15  Martin Baulig  <martin@ximian.com>
169
170         * statement.cs: Removed; this file is now shared with mcs.
171
172 2006-09-15  Martin Baulig  <martin@ximian.com>
173
174         * rootcontext.cs (RootContext.BrokenCircularDeps): Removed.
175
176         * driver.cs: Removed the `--broken-cycles' argument.
177
178 2006-09-15  Martin Baulig  <martin@ximian.com>
179
180         * namespace.cs: Removed; this file is now shared with mcs.
181
182 2006-09-15  Martin Baulig  <martin@ximian.com>
183
184         * decl.cs (MemberName): Minor code cleanups.
185
186 2006-09-15  Martin Baulig  <martin@ximian.com>
187
188         * parameter.cs: Removed; this file is now shared with mcs.
189
190 2006-09-15  Martin Baulig  <martin@ximian.com>
191
192         * enum.cs: Removed; this file is now shared with mcs.
193
194 2006-09-15  Martin Baulig  <martin@ximian.com>
195
196         * Makefile: Define `GMCS_SOURCE'.
197
198         * flowanalysis.cs: Removed; this file is now shared with mcs.
199
200 2006-09-15  Martin Baulig  <martin@ximian.com>
201
202         Removed modifiers.cs, literal.cs, location.cs, roottypes.cs,
203         assign.cs, const.cs, cfold.cs, constant.cs, symbolwriter.cs and
204         doc.cs - they are now shared with mcs.
205
206         * gmcs.exe.sources: Include these files from ../mcs/.
207
208 2006-09-15  Martin Baulig  <martin@ximian.com>
209
210         * old-code.cs, gen-il.cs, gen-treedump.cs: Removed old stuff.
211         * g1.cs, sample-hello.cs, sample-stack.il: Likewise.
212
213 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
214
215         * assign.cs, ecore.cs, expression.cs: Share error message text.
216         * class.cs (FieldMember.Define): Check for variable of static type.
217         * decl.cs (check_type_parameter): Report correct type name.
218         * driver.cs (LoadAssembly): Uses error output for errors.
219         * generic.cs (Constraints.Resolve): Add check for constraint accessibility
220         (TypeArguments.Resolve): Static class cannot be used as an argument.
221         * statement.cs (ResolveMeta): Constants cannot be generic types.
222
223 2006-09-12  Martin Baulig  <martin@ximian.com>
224
225         * generic.cs (TypeManager.IsIList): Moved into convert.cs.
226
227         * convert.cs (Convert.Array_To_IList): Moved here and correctly
228         implement it; fixes #79345.
229
230 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
231
232         * decl.cs (DeclSpace.SetParameterInfo): Check for nonexistent type
233         parameter.
234         * expression.cs (TypeOf.GetAttributableValue): Check for open generic
235         types.
236         * generic.cs: Improved error messages.
237         * typemanager.cs (RemoveGenericArity): Made public.
238
239 2006-09-08  Martin Baulig  <martin@ximian.com>
240
241         * typemanager.cs (TypeManager.interlocked_type): New public field.
242         (TypeManager.int_interlocked_compare-exchange): New public field.
243         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
244         enumerator types here and call InitGenericCoreTypes().
245         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
246         after calling InitEnumUnderlyingTypes().
247
248         * rootcontext.cs
249         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
250         `classes_second_stage'. 
251
252 2006-09-07  Marek Safar  <marek.safar@seznam.cz>
253  
254         * class.cs, generic.cs (GenericMethod.Define): Check for type parameter
255         collisions.
256         * statement.cs (Block.Variables): Made public.
257
258 2006-09-07  Martin Baulig  <martin@ximian.com>
259
260         * driver.cs
261         (MainDriver): Revert r62663 from Marek; see #70506 for details.
262
263 2006-09-01  Martin Baulig  <martin@ximian.com>
264
265         * generic.cs
266         (TypeManager.IsIList): Also handle base classes and interfaces. 
267
268 2006-09-01  Raja R Harinath  <rharinath@novell.com>
269
270         Fix #79238
271         * expression.cs (Invocation.MoreSpecific): Check for reference
272         types earlier.
273
274 2006-08-29  Miguel de Icaza  <miguel@novell.com>
275
276         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
277
278 2006-08-17  Miguel de Icaza  <miguel@novell.com>
279
280         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
281         #52019 and #79064, the use of the \uXXXX sequence in source code
282         to represent unicode characters.
283
284 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
285  
286         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
287         support.
288         * class.cs, ecore.cs, statement.cs: Merged to one error message.
289
290 2006-08-14  Raja R Harinath  <rharinath@novell.com>
291
292         Fix #79067
293         * cs-tokenizer.cs (parse_less_than): Allow '*' to appear in a type
294         parameter too.  This only avoids a parse error -- the semantic
295         error is caught elsewhere.
296
297 2006-08-13  Miguel de Icaza  <miguel@novell.com>
298
299         * assign.cs: Catch attempts to assign to a method groups in += and
300         report as 1656
301
302 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
303
304         A fix for #79056
305         * cs-parser.jay: Don't destroy current array type by typeof of array's.
306
307 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
308
309         * cs-parser.jay: Check whether a constraint clause has already been
310         specified for type parameter.
311         * generic.cs (Constraints): Exposed location.
312
313 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
314
315         * class.cs (Method.Define): Issue a warning when generic method looks like
316         an entry point.
317         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
318         as well.
319         * report.cs: New warning number.
320
321 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
322  
323         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
324         looking for ctor.
325         * decl.cs (MemberCache.FindMembers): When container is interface we need to
326         search all base interfaces as a member can be ambiguous.
327         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
328         Constructor member type filter. 
329         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
330         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
331         reporting for returned memberinfos.
332         * report.cs: Updated.
333         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
334         version to work on all runtimes.
335         (TypeManager.RealMemberLookup): Removed members filtering.
336
337 2006-08-08  Raja R Harinath  <rharinath@novell.com>
338
339         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
340         (PropertyExpr.EmitAssign): Likewise.
341         * expression.cs (Indirection.EmitAssign): Likewise.
342         (LocalVariableReference.EmitAssign): Likewise.
343         (ParameterReference.EmitAssign): Likewise.
344         (Invocation.EmitArguments): Likewise.
345         (ArrayAccess.EmitAssign): Likewise.
346         (IndexerAccess.EmitAssign): Likewise.
347         (This.EmitAssign): Likewise.
348         (ConditionalLogicalOperator.Emit): Likewise.
349
350         Fix #79026
351         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
352         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
353         leave it in after returning it.
354         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
355
356 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
357
358         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
359         message.
360
361 2006-08-05  Marek Safar  <marek.safar@seznam.cz>
362
363         * class.cs (TypeContainer.AddPartial): Add check for partial declarations
364         with different type names.
365         (TypeContainer.UpdateTypeParameterConstraints): Updated an error message.
366
367 2006-08-03  Raja R Harinath  <rharinath@novell.com>
368
369         Fix cs0146-3.cs and cs0146-4.cs.
370         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
371         enclosing types don't depend on the current type.
372
373 2006-08-02  Raja R Harinath  <rharinath@novell.com>
374
375         Fix #77963
376         * class.cs (TypeContainer.DoDefineMembers): Use
377         FindBaseMemberWithSameName on Parent, since we're interested in
378         whether we hide inherited members or not.
379         (FindBaseMemberWithSameName): Make slightly more robust.
380
381         Fix #77396
382         * codegen.cs (IResolveContext.GenericDeclContainer): New.
383         (EmitContext): Implement new interface requirement.
384         * namespace.cs (UsingEntry, LocalAliasEntry): Likewise.
385         * decl.cs (MemberCore): Likewise.
386         (DeclSpace.GenericDeclContainer): Rename from DeclContainer.
387         * ecore.cs (SimpleName.ResolveAsTypeTerminal): Use
388         ec.GenericDeclContainer to check for generic parameters.
389         (SimpleName.DoSimpleNameResolve): Likewise.
390         * generic.cs (TypeParameter.DeclContainer): Remove override.
391
392         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
393         declspaces for doppelgangers too.
394         (UsingEntry): Implement IResolveContext.
395         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
396         'this' as the resolve context.
397         (LocalAliasEntry): Likewise.
398
399         Implement parts of #77403
400         * roottypes.cs (RootDeclSpace): New.  Used to represent the
401         toplevel declaration space.  Each namespace declaration introduces
402         a "partial" root declaretion space.
403         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
404         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
405         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
406         from 'current_namespace.SlaveDeclSpace'.
407         (namespace_declaration): Likewise.
408         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
409         check.  It can't happen now.
410         * decl.cs (DeclSpace.LookupType): Likewise.
411         * driver.cs (MainDriver): Sanity check.
412
413 2006-08-01  Raja R Harinath  <rharinath@novell.com>
414
415         * decl.cs (DeclSpace.FindNestedType): Remove.
416         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
417         LookupTypeContainer to get the container of the nested type.
418         * class.cs (TypeContainer.FindNestedType): Make non-override.
419
420 2006-07-31  Raja R Harinath  <rharinath@novell.com>
421
422         * decl.cs (DeclSpace.PartialContainer): Move field from ...
423         * class.cs (TypeContainer.PartialContainer): ... here.
424         (TypeContainer.AddBasesForPart): New helper.
425         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
426         instead.
427         * cs-parser.jay (current_class): Convert to DeclSpace.
428         (struct_declaration, interface_declaration, class_declaration):
429         Use AddBasesForPart instead of .Bases directly.
430         * const.cs, iterators.cs: Update to changes.
431
432 2006-07-28  Raja R Harinath  <rharinath@novell.com>
433
434         * class.cs (TypeContainer.AddMemberType): Rename from
435         AddToTypeContainer.
436         (TypeContainer.AddMember): Rename from AddToMemberContainer.
437         (AddTypeContainer): New.  Combine AddClassOrStruct and
438         AddInterface.
439         (AddPartial): Update.  Add 'is_partial' argument.
440         * roottypes.cs: Update to changes.
441         * cs-parser.jay (push_current_class): New helper for handling
442         current_container and current_class.
443         (struct_declaration, interface_declaration, class_declaration):
444         Use it.
445
446 2006-07-26  Raja R Harinath  <rharinath@novell.com>
447
448         * roottypes.cs: Rename from tree.cs.
449
450         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
451         * tree.cs (Tree, ITreeDump): Remove types.
452         * rootcontext.cs (tree, Tree): Remove fields.
453         (root, ToplevelTypes): New.
454         * *.cs: Update to rename.
455
456         * tree.cs (Tree.RecordDecl): Remove.
457         (RootTypes.AddToTypeContainer): Record the toplevel type in its
458         namespace here.
459         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
460
461 2006-07-23  Raja R Harinath  <harinath@gmail.com>
462
463         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
464         DoFlowAnalysis and OmitStructFlowAnalysis here.
465         (ec.With): Rename from WithUnsafe and generalize.
466         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
467         (ec.WithFlowAnalyis): New.
468         * ecore.cs, expression.cs, statement.cs: Update.
469
470 2006-07-22  Raja R Harinath  <harinath@gmail.com>
471
472         * statement.cs (Block.ResolveMeta): Simplify slightly.
473
474         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
475         multiple boolean fields.  Convert InUnsafe, constant_check_state,
476         check_state to flags.
477         (CheckState, ConstantCheckState): Update.
478         (InUnsafe): New read-only property.
479         (FlagsHandle): Rename from CheckStateHandle and convert to handle
480         arbitrary flags.
481         (WithUnsafe): New helper similar to WithCheckState.
482         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
483         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
484
485 2006-07-21  Raja R Harinath  <rharinath@novell.com>
486
487         Make comparisons use the same IL irrespective of whether they're
488         in a 'checked' or 'unchecked' context: one of the issues in #78899
489         * codegen.cs (EmitContext.CheckState): Make read-only property.
490         (EmitContext.ConstantCheckState): Likewise.
491         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
492         helper that implement a save/restore stack for CheckState
493         values.  This is the only way to change check-state.
494         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
495         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
496         (CheckedExpr.EmitBranchable): New forwarding method.
497         (UnCheckedExpr): Likewise.
498         * statement.cs (Block.ResolveMeta): Use WithCheckState.
499         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
500         (Checked.Resolve, checked.DoEmit): Likewise.
501
502 2006-07-21  Martin Baulig  <martin@ximian.com>
503
504         * generic.cs (TypeManager.InferType): When inferring an array
505         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
506
507 2006-07-21  Martin Baulig  <martin@ximian.com>
508
509         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
510         and allow IList`1 and all its base interfaces.
511
512         * convert.cs (Convert.ImplicitReferenceConversion): Allow
513         converting from an array-type of T to IList<T>.
514
515 2006-07-21  Martin Baulig  <martin@ximian.com>
516
517         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
518
519 2006-07-20  Miguel de Icaza  <miguel@novell.com>
520
521         * anonymous.cs: Cache the resolved anonymous delegate, and return
522         this so that the ResolveTopBlock is only triggered once, not
523         twice.
524
525         Currently we trigger ResolvetopBlock twice due to a first pass of
526         argument check compatibility, and a second pass that does the
527         actual resolution.   
528
529 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
530
531         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
532         modifiers.
533         * rootcontext.cs (Reset): Add helper_classes.
534
535 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
536
537         A fix for #78860
538         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
539         correctly.
540
541 2006-07-13  Miguel de Icaza  <miguel@novell.com>
542
543         * statement.cs (Lock): Handle expressions of type
544         TypeManager.null_type specially.  Fixes #78770
545
546 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
547
548         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
549         to an event.
550
551 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
552
553         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
554         for accessors as well.
555         * ecore.cs (EventExpr): Add AccessorTable.
556
557 2006-07-03  Martin Baulig  <martin@ximian.com>
558
559         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
560         instances of value types.
561
562         * convert.cs (Convert.ExplicitConversion): Correctly handle
563         object->nullable conversions.   
564
565 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
566
567         A fix for #78738
568         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
569         for CS0122 where appropriate.
570         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
571         level attributes.
572         (Filter): Assembly can be null in the case of top level attributes.
573
574 2006-06-28  Raja R Harinath  <rharinath@novell.com>
575
576         Fix #78716
577         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
578         no arguments, return 'false': nothing can be inferred.
579
580 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
581
582         A fix for #78690
583
584         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
585         is done at global level.
586
587 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
588
589         A fix for #77002, Implemented TypeForwarder support.
590
591         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
592         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
593         attribute handling.
594         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
595         * typemanager.cs (): Add type_forwarder_attr_type.
596
597 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
598
599         * report.cs: Add CS0469 warning.
600
601 2006-06-22  Martin Baulig  <martin@ximian.com>
602
603         * class.cs
604         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
605         for interfaces; fixes #78686, which is a modification of #78380
606         with interfaces instead of classes.
607
608 2006-06-21  Martin Baulig  <martin@ximian.com>
609
610         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
611         the `try'-block, so we also report CS0016 etc. there.
612
613 2006-06-21  Martin Baulig  <martin@ximian.com>
614
615         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
616         handle SetAssigned() and SetMemberIsUsed() for generic types;
617         fixes #77545.
618
619 2006-06-21  Martin Baulig  <martin@ximian.com>
620
621         * delegate.cs
622         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
623
624 2006-06-21  Martin Baulig  <martin@ximian.com>
625
626         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
627         also report CS1686 for parameters.
628
629 2006-06-21  Martin Baulig  <martin@ximian.com>
630
631         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
632         instead of an error if the value is not implicitly convertible to
633         the switch types; fixes #77964.
634
635 2006-06-21  Raja R Harinath  <rharinath@novell.com>
636
637         Fix #78673
638         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
639         FieldBuilder is null.
640
641         Fix #78662
642         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
643         'left' and 'right' before error-checking.
644
645 2006-06-19  Martin Baulig  <martin@ximian.com>
646
647         * convert.cs
648         (Convert.ImplicitConversionStandard): Cleanup and correctly
649         implement nullable conversions.
650         (Convert.ImplicitStandardConversionExists): Likewise.
651         (Convert.ExplicitConversion): Likewise.
652
653 2006-06-19  Martin Baulig  <martin@ximian.com>
654
655         * generic.cs
656         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
657         methods; make the ctors protected.
658
659 2006-06-19  Martin Baulig  <martin@ximian.com>
660
661         Fixed #78380; added gtest-273.cs.
662
663         * ecore.cs
664         (Expression.ResolveAsBaseTerminal): Move the constraint checking
665         into ResolveAsTypeTerminal().
666
667         * generic.cs
668         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
669         TypeManager.FindMembers() to check for the default ctor.
670
671 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
672
673         * generic.cs: Fixed NullableInfo accessibility.
674
675 2006-06-16  Martin Baulig  <martin@ximian.com>
676
677         * generic.cs
678         (Constraints.InflatedConstraints.inflate): Correctly inflate
679         generic types; fixes #78400.
680
681 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
682
683         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
684         Fixed bug #78601.
685         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
686         (FieldExpr.DoResolve): likewise.
687         (PropertyExpr.InstanceResolve): likewise.
688         (EventExpr.InstanceResolve): likewise. 
689
690 2006-06-15  Martin Baulig  <martin@ximian.com>
691
692         * statement.cs
693         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
694         argument; always allow a `null' label if true.
695         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
696         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
697         we have a `null' label and mark the new `null_target' label;
698         default to the `default' label.
699         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
700
701 2006-06-15  Martin Baulig  <martin@ximian.com>
702
703         * class.cs (Operator.Define): Allow an implicit/explicit operator
704         to convert to/from a nullable value of the enclosing type.
705
706         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
707         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
708
709         * convert.cs
710         (Convert.ImplicitStandardConversionExists): Add support for lifted
711         implicit/explicit conversions.
712         (Convert.ImplicitConversionStandard): Likewise.
713
714 2006-06-13  Martin Baulig  <martin@ximian.com>
715
716         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
717         type arguments and create a ConstructedType if necessary.  Fixes #78400.
718
719 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
720
721         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
722         attribute applicable tests for attribute argument.
723
724 2006-06-02  Raja R Harinath  <rharinath@novell.com>
725
726         Fix #78079
727         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
728         (Binary.OverloadResolve_PredefinedIntegral): New.
729         (Binary.OverloadResolve_PredefinedFloating): New.
730         (Binary.OverloadResolve_PredefinedString): New.
731         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
732         Follow the standard more closely, and treat numeric promotions in
733         terms of overload resolution.
734         (Binary.CheckShiftArguments): Simplify.
735
736 2006-06-01  Raja R Harinath  <rharinath@novell.com>
737
738         * flowanalysis.cs (MyBitVector): Simplify representation.
739         (MyBitVector.Clone): Avoid allocating BitArray.
740         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
741         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
742         (*): Update.  Change all references to MyBitVector.And and
743         MyBitVector.Or to &= and |=.
744
745 2006-05-31  Raja R Harinath  <rharinath@novell.com>
746
747         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
748         Use bne.un instead of ceq+brfalse.
749
750         Fix cs0208-[23].cs
751         * typemanager.cs (IsUnmanagedType): Disallow generic types and
752         generic parameters.
753
754 2006-05-29  Raja R Harinath  <rharinath@novell.com>
755
756         Fix cs0231-[34].cs.
757         * cs-parser.jay (formal_parameter_list): Extend the pattern below
758         to param arguments too.
759
760 2006-05-26  Miguel de Icaza  <miguel@novell.com>
761
762         * cs-parser.jay: Catch another parsing form for arglist being
763         followed by other arguments.  Fixes #78313.
764
765 2006-05-25  Raja R Harinath  <rharinath@novell.com>
766
767         Fix #78324
768         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
769         also when one of the operands is a null literal.
770         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
771         to improve clarity, and generate slightly better code.
772
773 2006-05-24  Raja R Harinath  <rharinath@novell.com>
774
775         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
776         checking of out parameters to ...
777         (FlowBranchingToplevel.Merge): ... here.
778         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
779         set, propagate the origin upward, and only complain if there was
780         no other error.
781         (FlowBranchingException.AddContinueOrigin): Likewise.
782         (FlowBranchingException.AddReturnOrigin): Likewise.
783         (FlowBranchingException.AddGotoOrigin): Likewise.       
784
785 2006-05-23  Raja R Harinath  <rharinath@novell.com>
786
787         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
788         unreachable, skip it.
789         (FlowBranchingException.Merge): Always propagate jumps, even if
790         the finally block renders subsequent code unreachable.
791
792 2006-05-18  Raja R Harinath  <rharinath@novell.com>
793
794         Fix #77601
795         * statement.cs (Goto.Resolve): Move responsibility for resolving
796         'goto' to FlowBranching.AddGotoOrigin.
797         (Goto.SetResolvedTarget): New.  Callback to set the
798         LabeledStatement that's the target of the goto.
799         (Goto.DoEmit): Use Leave instead of Br when crossing an
800         unwind-protect boundary.
801         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
802         LookupLabel and adjust to new semantics.
803         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
804         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
805         Goto.SetResolvedTarget to update target.
806         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
807         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
808         AddBreakOrigin & co.  Delay propagation until ...
809         (FlowBranchingException.Merge): ... this.
810
811         * statement.cs (Block.Resolve): Always depend on flow-branching to
812         determine unreachability.  Kill workaround that originally emitted
813         only one statement after an "unreachable" label (see infloop in
814         test-515.cs).
815
816         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
817         This is still "wrong", but anything better would probably need a
818         multi-pass algorithm.
819         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
820         usage vector.  Force current usage vector to be reachable, to
821         optimistically signify backward jumps.
822         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
823         detected.
824         (FlowBranchingLabeled.Merge): New.  If no backward jump was
825         detected, return the original salted-away usage vector instead,
826         updated with appropriate changes.  Print unreachable warning if
827         necessary.
828         * statement.cs (Block.Resolve): Don't print unreachable warning on
829         a labeled statement.
830
831 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
832
833         * driver.cs: Pass filename without path to AssemblyBuilder's
834         AddResourceFile. Fixes bug #78407.
835
836 2006-05-17  Raja R Harinath  <rharinath@novell.com>
837
838         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
839         * flowanalysis.cs (FlowBranchingLabeled): ... here.
840         (FlowBranching.MergeChild): Overwrite
841         reachability information from Labeled branchings too.
842
843 2006-05-16  Raja R Harinath  <rharinath@novell.com>
844
845         * statement.cs (Goto.Resolve): Merge jump origins here ...
846         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
847
848         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
849         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
850         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
851         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
852         here, ...
853         * statement.cs (Goto.Resolve): ... not here.
854         (Goto.Emit): Remove CS1632 check.
855
856 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
857
858         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
859         error message.
860
861 2006-05-11  Raja R Harinath  <rharinath@novell.com>
862
863         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
864         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
865         (FlowBranchingException.Label): Likewise.
866
867         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
868         given value.
869         (MyBitVector.Or): Use it to avoid losing information (Count).
870         (FlowBranching.MergeOrigins): Likewise.
871
872         * flowanalysis.cs (UsageVector.IsDirty): Remove.
873         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
874         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
875         (UsageVector.ToString): Simplify.
876         (UsageVector.MergeSiblings): Move here from ...
877         (FlowBranching.Merge): ... here.
878         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
879         not a MyBitVector.
880
881 2006-05-10  Raja R Harinath  <rharinath@novell.com>
882
883         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
884         null bitvector is treated as all-true.
885
886         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
887         (MyBitVector): Rationalize invariants.  'vector != null' implies
888         that we have our own copy of the bitvector.  Otherwise,
889         'InheritsFrom == null' implies all inherited bits are true.
890
891 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
892
893         * statement.cs (LocalInfo): Add IsConstant.
894         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
895         local variable for constants.
896
897 2006-05-09  Raja R Harinath  <rharinath@novell.com>
898
899         * flowanalysis.cs (MyBitVector.Empty): New.
900         (MyBitVector): Don't allow InheritedFrom to be null.
901         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
902         (UsageVector, FlowBranching): Update to changes.
903
904         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
905         recursion.  The 'Parent == null' condition isn't sufficient for
906         anonymous methods.
907         (FlowBranching.AddBreakOrigin): Likewise.
908         (FlowBranching.AddContinueOrigin): Likewise.
909         (FlowBranching.AddReturnOrigin): Likewise.
910         (FlowBranching.StealFinallyClauses): Likewise.
911         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
912         (FlowBranching.CheckOutParameters): Likewise.
913         (FlowBranchingToplevel): Terminate all the above recursions here.
914         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
915         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
916
917         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
918         toplevel block.
919         (FlowBranchingToplevel): New.  Empty for now.
920         (FlowBranching.MergeTopBlock): Update.
921         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
922         branching for the anonymous delegate.
923         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
924
925         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
926         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
927         information at the start of the merge.  Reorganize.
928
929 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
930
931         * class.cs (MethodData.Define): Method cannot implement interface accessor.
932
933 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
934
935         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
936         to newly introduced ctor.
937
938         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
939         message to one place.
940         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
941         global namespace.
942
943 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
944
945         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
946
947         * ecore.cs (Expression.ResolveAsConstant): Updated.
948
949         * statement.cs (ResolveMeta): Updated.
950
951 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
952
953         * cs-parser.jay: __arglist cannot be used in initializer.
954
955 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
956
957         A fix for #77879
958         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
959         private types.
960
961 2006-05-05  Raja R Harinath  <rharinath@novell.com>
962
963         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
964         (LabeledStatement): Add 'name' parameter.
965         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
966         (Block.AddLabel): Update to changes.
967         * cs-parser.jay (labeled_statement): Likewise.
968
969         * flowanalysis.cs (BranchingType.Labeled): New.
970         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
971         (FlowBranchingLabeled): New.  Does nothing for now, but will
972         eventually handle 'goto' flows.
973         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
974         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
975         that's terminated ...
976         (Block.Resolve): ... here.
977
978         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
979         (UsageVector.MergeFinallyOrigins): Likewise.
980         (FlowBranching.InTryOrCatch): Likewise.
981         (FlowBranching.AddFinallyVector): Likewise.
982         (FlowBranchingException): Update to changes.
983
984         Fix #78290
985         * statement.cs (Return.Resolve): Move error checking to ...
986         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
987         (FlowBranchingException): Handle return origins like break and
988         continue origins.
989         (FlowBranching.UsageVector.CheckOutParameters): Remove.
990
991 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
992
993         A fix for #76122
994         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
995         filter.
996
997 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
998
999         A fix for #77543
1000         * class.cs (MethodData.Define): Do public accessor check only when method
1001         implements an interface.
1002
1003 2006-05-04  Raja R Harinath  <rharinath@novell.com>
1004
1005         Remove special handling of 'break'
1006         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
1007         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
1008         (UsageVector.Break): Remove.
1009         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
1010         reachability.
1011         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
1012
1013         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
1014         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
1015
1016 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1017
1018         A fix for #75726
1019         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
1020         be the interface member.
1021
1022 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1023
1024         A fix for #60069
1025         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
1026         for emitting small (int) values.
1027
1028 2006-05-03  Raja R Harinath  <rharinath@novell.com>
1029
1030         Fix #59427
1031         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
1032         control-flow passes through the 'finally' after merging-in all the
1033         control-flows from 'try' and the 'catch' clauses.
1034
1035         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
1036         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
1037         always true at the only non-recursive entry point.
1038         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
1039         FlowBranchingBreakable.
1040         (FlowBranchingLoop): Remove.
1041         * statement.cs (Return.DoResolve): Update to changes.
1042
1043         Fix #76471, #76665
1044         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
1045         (FlowBranching.CreateBranching): Handle it: create a
1046         FlowBranchingContinuable.
1047         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
1048         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
1049         except that it handles the 'continue' command.
1050         (FlowBranching.UsageVector.MergeOrigins): Rename from
1051         MergeBreakOrigins.
1052         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
1053         except that it overrides AddContinueOrigin.
1054         (FlowBranchingException): Override AddContinueOrigin, similar to
1055         AddBreakOrigin.
1056         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
1057         Create a new branching around the embedded statement.
1058         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
1059         control flow after the embedded statement.
1060         (Continue.Resolve): Move all error checking to AddContinueOrigin.
1061
1062         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
1063         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
1064         FlowBranchingBreakable.
1065         (FlowBranchingSwitch): Remove.
1066
1067         Fix test-503.cs
1068         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
1069         error reporting to ...
1070         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
1071         Rename from 'AddBreakVector'.  Add new location argument.  Return
1072         a bool indicating whether the 'break' crosses an unwind-protect.
1073         (FlowBranchingException.AddBreakOrigin): Add.
1074         (FlowBranchingException.Merge): Propagate 'break's to surrounding
1075         flowbranching after updating with the effects of the 'finally'
1076         clause.
1077         (FlowBranchingBreakable): New common base class for
1078         FlowBranchingLoop and FlowBranchingSwitch.
1079
1080         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
1081         embedded statement.
1082         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
1083
1084 2006-05-02  Raja R Harinath  <rharinath@novell.com>
1085
1086         * statement.cs (Do.Resolve): If the loop is infinite, set the
1087         barrier.
1088         (While.Resolve, For.Resolve): Set a barrier after the embedded
1089         statement.  There's no direct control flow that goes from the end
1090         of the embedded statement to the end of the loop.
1091         * flowanalysis.cs (FlowBranching.Infinite): Remove.
1092         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
1093         above ensure that the reachability is correctly computed.
1094
1095         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
1096         (UsageVector.MergeBreakOrigins): If the current path is
1097         unreachable, treat it as if all parameters/locals are initialized.
1098         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
1099         infinite loops before merging-in break origins.
1100
1101         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
1102         (Reachability.Reachable): Split part into ...
1103         (Reachability.Unreachable): ... this.  Simplify.
1104         (Reachability.IsUnreachable): Use 'Unreachable' instead.
1105
1106         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
1107         (Reachability.SetThrowsSometimes): Likewise.
1108         (FlowBranchingBlock.MergeTopBlock): Don't compare against
1109         TriState.Always, use corresponding property.
1110         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
1111         (Block.Resolve): Likewise.  Remove some redundant checks.
1112
1113 2006-05-02  Raja R Harinath  <harinath@gmail.com>
1114
1115         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
1116         (Reachability.Meet): Don't bother checking AlwaysThrows --
1117         barrier is always set.
1118         (FlowBranchingBlock.Merge): Likewise.
1119
1120 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
1121
1122         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
1123         defined, so it's references should also compile only for NET_2_0
1124         (as occurs in mcs version)
1125
1126 2006-05-01  Raja R Harinath  <harinath@gmail.com>
1127
1128         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
1129         checks for unreachable.
1130
1131 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
1132
1133         A fix for #77980
1134         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
1135
1136         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
1137         whether field is really assigned.
1138
1139 2006-04-30  Raja R Harinath  <harinath@gmail.com>
1140
1141         * flowanalysis.cs (Reachability): Make 4-argument constructor
1142         private.
1143         (Reachability.Meet): Rename from 'And'.  Remove static variant.
1144         (Reachability.Always): Rename from the highly misleading
1145         'Reachability.Never'.
1146         (FlowBranching.Merge): Update to changes.  Mark an impossible
1147         situation with a 'throw'.
1148         (*): Update to changes.
1149
1150 2006-04-29  Raja R Harinath  <harinath@gmail.com>
1151
1152         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
1153         Remove 'Undefined'.
1154         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
1155         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
1156         (*): Update to changes.
1157         * statement.cs: Update to changes.
1158
1159 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
1160
1161         A fix for #78049
1162         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
1163
1164 2006-04-28  Raja R Harinath  <harinath@gmail.com>
1165
1166         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
1167         dummy UsageVector.
1168
1169         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
1170         argument to two arguments: an usage-vector and a bool.  Move call
1171         to FlowBranching.Merge () ...
1172         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
1173
1174         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
1175         handling of loop and switch reachability to ...
1176         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
1177
1178 2006-04-27  Raja R Harinath  <harinath@gmail.com>
1179
1180         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
1181         handling to FlowBranchingLoop.InLoop.
1182         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
1183
1184 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
1185
1186         A fix for #78115
1187         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
1188         anonymous method is allowed from AnonymousContainer here.
1189
1190         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
1191
1192 2006-04-24  Raja R Harinath  <rharinath@novell.com>
1193
1194         Fix #78156
1195         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
1196
1197 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
1198
1199         A fix for #49011.
1200         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
1201         (DoubleConstant.Reduce): Ditto.
1202
1203 2006-04-23  Raja R Harinath  <rharinath@novell.com>
1204
1205         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
1206         Remove 'lvalue_right_side' argument.  Move parts to ...
1207         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
1208         (LocalVariable.DoResolveLValue): ... these.
1209
1210 2006-04-21  Raja R Harinath  <rharinath@novell.com>
1211
1212         Fix cs1655.cs
1213         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
1214         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
1215         (LocalVariableReference.DoResolveBase): Use it to implement new
1216         CS1655 check.
1217         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
1218         (Argument.Resolve): Simplify.  Move CS1510 check ...
1219         * ecore.cs (Expression.ResolveLValue): ... here.
1220         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
1221         (PropertyExpr.DoResolveLValue): Likewise.
1222         (FieldExpr.Report_AssignToReadonly): Likewise.
1223         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
1224         LValueMemberAccess or LValueMemberOutAccess on instance depending
1225         on it.
1226         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
1227         DoResolve as appropriate.
1228
1229 2006-04-20  Raja R Harinath  <rharinath@novell.com>
1230
1231         Fix #75800
1232         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
1233         implicit conversions on 'out' and 'ref' arguments.
1234
1235         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
1236         improve clarity.  Remove dead code.
1237
1238         Fix #66031
1239         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
1240         (Catch.Resolve): Resolve VarBlock if it exists.
1241
1242 2006-04-19  Miguel de Icaza  <miguel@novell.com>
1243
1244         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
1245         twice, this was some residual code, the enumerator was emitted
1246         properly in the two branche of if later.
1247
1248         Fixes #78031
1249         
1250         Thanks to Martin for finding the source of the problem
1251         
1252 2006-04-19  Raja R Harinath  <rharinath@novell.com>
1253
1254         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
1255         cast is never an lvalue.
1256         (Cast.DoResolve, Cast.ResolveRest): Combine.
1257         (Argument.Emit): Simplify slightly.  Move 'Expr is
1258         IMemoryLocation' check ...
1259         (Argument.Resolve): ... here.
1260         (Argument.Error_LValueRequired): Remove.  Inline into only user.
1261
1262         Simplifications.  Fix cs0191-2.cs
1263         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
1264         CS1649 and CS1651 to ...
1265         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
1266         the actual selection of the error code and message to a lookup
1267         table.  Add a dummy return value to simplify callsites.
1268         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
1269         readonly fields of other instances of the same type.  Move CS0197
1270         warning from ...
1271         * expression.cs (Argument.Resolve): ... here.  Simplify code.
1272         Ensure that ec.InRefOutArgumentResolving is only set during LValue
1273         resolution of an out or ref argument.  The code simplification
1274         above uses this invariant.
1275
1276 2006-04-18  Raja R Harinath  <rharinath@novell.com>
1277
1278         Possibly fix #77752.  Fix cs1690-[4-7].cs.
1279         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
1280         CheckMarshallByRefAccess.  Drop parameter.
1281         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
1282         warning.
1283         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
1284         InstanceExpression.
1285         * report.cs (AllWarnings): Add CS1690.
1286         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
1287         for ref access too.
1288         (LocalVariableReference.DoResolveBase): Update.
1289
1290 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1291
1292         * class.cs (MethodOrOperator): Moved common parts from method class.
1293         detect obsolete attributes.
1294         (Method.Define): Simplified as it reuses code from base.
1295         (Constructor.ValidAttributeTargets): Fixed issue found during
1296         refactoring.
1297         (Destructor.ValidAttributeTargets): Fixed issue found during
1298         refactoring.
1299         (Operator): Finished refactoring set off by #78020. Operator class is now
1300         ordinary method class.
1301
1302         * anonymous.cs: Updated.
1303
1304 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1305
1306         * class.cs (Constructor.Emit): Don't emit the attributes twice.
1307
1308 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1309
1310         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
1311         detect obsolete attributes.
1312         (Method.CreateEmitContext): Moved to MethodOrOperator.
1313
1314 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1315
1316         A fix for #78048.
1317         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
1318         customized exception to make crash detection easier.
1319         (MethodOrOperator): Started to work on new base class for methods and
1320         operators.
1321         (Method): Derives from MethodOrOperator.
1322         (Constructor.Emit): Emits its own attributes.
1323         (AbstractPropertyEventMethod.Emit): Ditto.
1324         (Operator): Derives from MethodOrOperator, will refactor fully in extra
1325         patch.
1326         (Operator.Emit): It's temporary more tricky than should be.
1327         
1328         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
1329
1330         * report.cs (InternalErrorException): Add ctor with inner exception.
1331
1332 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
1333
1334         A fix for #76744.
1335         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
1336         only not visible.
1337
1338 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
1339
1340         A fix for #77916.
1341         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
1342         array.
1343
1344 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1345
1346         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
1347         attribute is present and Guid not.
1348         (Interface.ApplyAttributeBuilder): Ditto.
1349
1350         * attribute.cs: Add error message.
1351
1352 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1353
1354         A fix for #78020.
1355
1356         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
1357         sources (it's composite) so hold them in extra array as they are used in
1358         Emit phase only. It worked in the previous versions by mistake.
1359         (Attribute.Emit): Emit attribute for more owners when exist.
1360
1361         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
1362         it has now different behaviour.
1363
1364 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
1365
1366         * constant.cs (Constant.IsDefaultInitializer): New method.
1367
1368         * class.cs: Updated.
1369
1370         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
1371         re-initialize default values. It saves KBs almost for every assembly.
1372         Thanks Zoltan for the idea.
1373         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
1374         (ArrayCreation.DoResolve): Resolve only once.
1375         (ArrayCreation.Emit): Emit static initializer only when it is faster.
1376         (ArrayCreation.GetAttributableValue): Cope with optimized values.
1377
1378 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
1379
1380         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
1381         From #77961.
1382
1383 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1384
1385         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
1386         in an embedded statement too.
1387
1388 2006-04-01  Raja R Harinath  <rharinath@novell.com>
1389
1390         Fix #77929
1391         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
1392         testing.
1393
1394         Fix #77958
1395         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
1396
1397         Fix #77962
1398         * report.cs (SymbolRelatedToPreviousError): Drop generic type
1399         arguments before checking whether a type is reflected or not.
1400
1401         Fix #77954
1402         * expression.cs (Invocation.IsApplicable): Ensure a generic method
1403         definition doesn't take part in overload resolution.
1404         (Invocation.IsParamsMethodApplicable): Likewise.
1405         (Invocation.OverloadResolve): When replacing a reflected override
1406         method with its base definition, ensure that type arguments are
1407         applied.
1408
1409 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1410
1411         A fix for #77966.
1412
1413         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
1414         was not specified.
1415
1416         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
1417
1418 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
1419
1420         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
1421         phase.
1422
1423         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
1424         LocalTemporary change.
1425
1426         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
1427         TypeContainer.
1428         (ClassOrStruct.DefineFieldInitializers): Implemented static field
1429         initializers optimization.
1430         (ClassOrStruct.TypeAttr): Moved from modifiers.
1431         (Constructor.CheckBase): Don't crash when static ctor has parameters.
1432         (FieldBase.ResolveInitializer): Resolves initializer.
1433         (FieldBase.HasDefaultInitializer): New property.
1434
1435         * cs-parser.jay: Removed message.
1436
1437         * expression.cs (CompilerGeneratedThis): New specialization.
1438
1439         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
1440
1441 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
1442
1443         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
1444
1445 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1446
1447         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
1448         be now EnumConstants only.
1449
1450 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1451
1452         * attribute.cs, driver.cs: Reset more caches.
1453
1454 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1455
1456         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
1457
1458 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1459
1460         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
1461         for easier reuse. Updated all overrides.
1462         (IntegralConstant): New base class for all integral constants.
1463         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1464         of the constant range, report custom error.
1465         (UIntConstant.Reduce): Fixed uint conversion.
1466
1467         * ecore.cs, literal.cs: Reduce updates.
1468
1469 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1470
1471         A fix for #75813.
1472
1473         * class.cs (Constructor.Define): Removed extra if for default ctors.
1474         A patch from Atsushi Enomoto.
1475
1476 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1477
1478         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1479         GetAttributableValue.
1480
1481         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1482         when required.
1483
1484         * convert.cs (ImplicitConversionRequired): Error message moved to
1485         DoubleLiteral.
1486
1487         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1488         automatic implicit conversion of an output value.
1489         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1490
1491         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1492         conversion.
1493         (TypeOf.GetAttributableValue): Add extra handling for object type.
1494
1495         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1496         special error message.
1497
1498 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1499
1500         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1501         InternalCall.
1502         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1503         compatible with MS runtime.
1504
1505 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1506
1507         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1508         attribute arguments here.
1509
1510         * class.cs (Indexer.Define): The check was moved to attribute class.
1511
1512 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1513
1514         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1515
1516 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1517
1518         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1519
1520         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1521         the blocks too.
1522
1523 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1524
1525         * doc-bootstrap.cs : fix build.
1526
1527 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1528
1529         * expression.cs (StringConcat.Append): Issue a warning when empty string
1530         is going to append.
1531
1532 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1533
1534         * assign.cs (CompoundAssign.ResolveSource): Removed.
1535
1536         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1537         clean up.
1538
1539         * class.cs (TypeContainer.FindMethods): Removed.
1540         (TypeContainer.CheckMemberUsage): Made static.
1541
1542         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1543
1544         * constant.cs (CheckRange): Removed unused type argument.
1545         (CheckUnsigned): Removed unused type argument.
1546
1547         * cs-parser.jay: Updated after MemberAccess clean up.
1548         Uses Length for empty string test.
1549
1550         * cs-tokenizer.cs: Uses Length for empty string test.
1551         (IsCastToken): Made static.
1552         (is_hex): Made static.
1553         (real_type_suffix): Made static.
1554
1555         * decl.cs (SetupCache): Made static.
1556         (OnGenerateDocComment): Removed unused ds argument.
1557
1558         * delegate.cs (VerifyDelegate): Removed unused argument.
1559
1560         * doc.cs: Uses Length for empty string test.
1561
1562         * driver.cs: Uses Length for empty string test.
1563
1564         * enum.cs (IsValidEnumType): Made static
1565
1566         * expression.cs (EnumLiftUp): Removed unused argument.
1567         (ResolveMethodGroup): Ditto.
1568         (BetterConversion): Ditto.
1569         (GetVarargsTypes): Ditto.
1570         (UpdateIndices): Ditto.
1571         (ValidateInitializers): Ditto.
1572         (MemberAccess.ctor): Ditto.
1573         (GetIndexersForType): Ditto.
1574
1575         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1576
1577         * iterators.cs: Updated after MemberAccess clean up.
1578
1579         * location.cs: Uses Length for empty string test.
1580
1581         * namespace.cs: Uses Length for empty string test.
1582
1583          * report.cs (CheckWarningCode): Made static.
1584
1585         * statement.cs (LabeledStatement): Removed unused argument.
1586
1587         * typemanager.cs (FilterNone): Removed.
1588
1589 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1590
1591         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
1592         obsolete.
1593
1594         * class.cs: Updated.
1595
1596 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1597
1598         * cs-parser.jay.cs: __arglist is not allowed for delegates.
1599
1600 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1601
1602         A fix for #77816.
1603
1604         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
1605         host container.
1606         (AnonymousMethod.ImplicitStandardConversionExists): New method.
1607         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
1608         Add more error reporting; Fixed issue with params.
1609
1610         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
1611
1612         * cs-parser.jay: AnonymousMethod requires host container.
1613
1614         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
1615
1616 2006-03-18  Raja R Harinath  <harinath@gmail.com>
1617
1618         * class.cs: Change 'TypeContainer ds' constructor argument to
1619         'DeclSpace parent'.  Some classes were missed below due to
1620         different naming convention.
1621
1622         * class.cs (MemberCore.Parent): Delete.  This makes the
1623         ParentContainer changes below enforceable by the compiler.
1624
1625         Treat pointers to enclosing declaration space as 'DeclSpace', not
1626         'TypeContainer'.
1627         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
1628         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
1629
1630         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
1631         of TypeContainer.
1632         (Block.AddThisVariable): Likewise.
1633         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
1634         (AbstractPropertyEventMethod.Emit): Likewise.
1635         (AbstractPropertyEventMethod.EmitMethod): Likewise.
1636         (GetMethod.Define, SetMethod.Define): Likewise.
1637         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
1638         (DelegateMethod.EmitMethod): Likewise.
1639
1640         Fix regression test-partial-13.cs.
1641         Rationalize use of PartialContainer.  Ensure that the partial
1642         class semantics can be tied to type-correctness, i.e., any
1643         violation will cause a compile error.
1644         * class.cs, const.cs: Access all fields that belong to class
1645         TypeContainer via ParentContainer.  Arguments of EmitContexts and
1646         Resolve()-like functions still use 'Parent'.
1647
1648         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
1649         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
1650         (PropertyMethod.CheckModifiers): Remove unused argument.
1651         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
1652         DeclSpace.
1653
1654 2006-03-28  Raja R Harinath  <rharinath@novell.com>
1655
1656         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
1657
1658 2006-03-17  Raja R Harinath  <harinath@gmail.com>
1659
1660         Make semantics of PartialContainer simpler.
1661         * decl.cs (DeclSpace.IsPartial): Remove.
1662         * class.cs (TypeContainer.IsPartial): Likewise.
1663         (TypeContainer..ctor): Set PartialContainer to point to self.
1664         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
1665         (TypeContainer.FindNestedType): Likewise.
1666         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
1667
1668 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
1669
1670         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
1671
1672 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1673
1674         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
1675         classes.
1676
1677 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1678
1679         * class.cs (Operator.Define): An error for base conversion was not
1680         reported correctly.
1681
1682 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
1683
1684         A fix for #77593, #77574.
1685
1686         * class.cs (MethodCore.CheckBase): Another if for operator.
1687
1688 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1689
1690         A fix for #77822.
1691
1692         * expression.cs (VerifyArgumentsCompat): Reverted to double error
1693         reporting, it's more tricky than I thought.
1694
1695 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
1696
1697         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
1698         were not resolved
1699
1700         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
1701         (DelegateCreation.ImplicitStandardConversionExists): New method for just
1702         conversion test.
1703         
1704         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
1705         not needed.
1706
1707 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
1708
1709         A fix for #77353.
1710
1711         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
1712         (Event.Define): ditto
1713         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
1714
1715         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
1716         Removed redundant code and set NewSlot for Invoke method too.
1717
1718         * parameter.cs (Parameters.ctor): Add custom, type ctor.
1719         (Parameters.MergeGenerated): New method. Use this method when you merge
1720         compiler generated argument with user arguments.
1721
1722 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
1723
1724         * attribute.cs (ResolveAsTypeTerminal): Removed.
1725
1726         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
1727         specialization for predefined types; 30% speed up.
1728         Finally placed obsolete check to right place.
1729         (Expression.ResolveType): Removed.
1730
1731         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
1732         Updated after ResolveType was removed.
1733
1734         * expression.cs (Cast.ctor): Check void cast.
1735         (Binary.ResolveAsTypeTerminal): Is never type.
1736         (Conditional.ResolveAsTypeTerminal): Is never type.
1737
1738         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
1739
1740 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1741
1742         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
1743
1744 2006-03-23  Martin Baulig  <martin@ximian.com>
1745
1746         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
1747         type check if either of the types is an open generic type.
1748
1749 2006-03-23  Martin Baulig  <martin@ximian.com>
1750
1751         * convert.cs
1752         (Convert.ExplicitTypeParameterConversion): New method; implement
1753         explicit type parameter conversions.
1754
1755 2006-03-23  Martin Baulig  <martin@ximian.com>
1756
1757         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
1758         blindly allow all conversions if we do not have any constraints.
1759
1760 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
1761
1762         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
1763         these two separated members to simplify the code.
1764         (Attribute.Resolve): Refactored to use new fields and methods.
1765         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
1766         implemented obsolete attribute checking.
1767         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
1768         implemented obsolete checking again. It look line never ending quest ;-)
1769         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
1770
1771         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
1772
1773         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
1774
1775         *class.cs (Property.Define): Add RegisterProperty call.
1776
1777         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
1778         argument groups (only 2).
1779
1780         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
1781         encoding expression to arguments.
1782         (Expression.ExprClassToResolveFlags): Just turned to property.
1783
1784         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
1785         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
1786         optimized as well as implemented support for zero-length attributes.
1787
1788         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
1789         Add caching of PropertyInfo's.
1790
1791 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1792
1793         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
1794         error multiple times.
1795
1796 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1797
1798         New partial class implementation.
1799         A fix for #77027, #77029, #77403
1800
1801         * attribute.cs (Attributable): Made attributes protected.
1802
1803         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
1804         the replacements of ClassPart and PartialContainer.
1805         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
1806         (TypeContainer.AddInterface): Ditto.
1807         (TypeContainer.AddPartial): The main method for partial classes. It checks
1808         for errors and merges ModFlags and attributes. At the end class is added to
1809         partial_parts list.
1810         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
1811         required here.
1812         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
1813         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
1814         from the rest of partial classes.
1815         (TypeContainer.GetClassBases): Simplified.
1816         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
1817         DefineType.
1818         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
1819         (TypeContainer.HasExplicitLayout): Uses Flags now.
1820         (PartialContainer): Removed.
1821         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
1822         (StaticClass): Was merged with Class.
1823         (Class.GetClassBases): class and static class bases are verified here.
1824         (Class.TypeAttr): Added static attributes when class is static.
1825         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
1826         (MemberBase): In some cases we need to call parent container for partial
1827         class. It should be eliminated but it's not easy now.
1828
1829         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
1830
1831         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
1832         partial classed to accumulate class comments.
1833         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
1834
1835         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
1836
1837         * driver.cs (MainDriver): Tree.GetDecl was removed.
1838
1839         * modifiers.cs (Modifiers): Add partial modifier.
1840
1841         * tree.cs (Tree.decl): Removed.
1842         (RootTypes): Started to use this class more often for root types
1843         specializations.
1844
1845 2006-03-23  Raja R Harinath  <rharinath@novell.com>
1846
1847         * generic.cs (TypeParameter.UpdateConstraints): Update
1848         'constraints' if null.
1849
1850 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1851
1852         A fix for #77615
1853
1854         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
1855         external interface does not have an attribute.
1856
1857 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1858
1859         Another prerequisites for new partial classs implementation.
1860         
1861         * attribute.cs (Attribute.Equal): Implemented.
1862         (Attribute.Emit): Changed as attributes can be applied more than twice.
1863         (Attributes.Emit): Check for duplicate attributes here.
1864
1865         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
1866         as a parameter, clean-up.
1867
1868 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1869
1870         A fix for #77485
1871
1872         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
1873         contains obsolete attribute check which can in some cases look for base
1874         type of current class which is not initialized yet.
1875         (TypeContainer.BaseType): Replacement of ptype.
1876
1877         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
1878
1879 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1880
1881         First of prerequisites for new partial classs implemention.
1882         
1883         * attribute.cs (Attributable): Extended by ResolveContext;
1884         Attributes finally have correct context for resolving in all cases.
1885         (AttachTo): Attribute owner is assigned here.
1886
1887         * codegen.cs (IResolveContext): Introduce new interface to hold
1888         all information needed in resolving phase.
1889         (EmitContext): Implements IResolveContext; more clean-up needed here.
1890         
1891         * decl.cs (MemberCore): Implemented IResolveContext.
1892
1893         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
1894         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
1895         parameter.cs, statement.cs, tree.cs, typemanager.cs:
1896         Refactored to use new IResolveContext instead of EmitContext; cleanup
1897
1898 2006-03-22  Raja R Harinath  <rharinath@novell.com>
1899
1900         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
1901         mcs to keep code differences small.
1902         * attribute.cs (Attribute.GetParameterDefaultValue): New.
1903         * typemanager.cs (parameter_default_value_attribute_type): New.
1904         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
1905         CS1908 check.
1906
1907 2006-03-22  Martin Baulig  <martin@ximian.com>
1908
1909         * generic.cs
1910         (Nullable.NullableLiteral): Derive from `NullLiteral'.
1911
1912         * convert.cs
1913         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
1914         instead of the normal `NullLiteral'.
1915
1916 2006-03-21  Martin Baulig  <martin@ximian.com>
1917
1918         Fix #77583.
1919         * generic.cs (TypeManager.InferType): If `pt' is a generic
1920         parameter, don't check whether `pt == at'.
1921
1922 2006-03-20  Raja R Harinath  <rharinath@novell.com>
1923
1924         Fix #77852
1925         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
1926         (TypeParameter.Resolve): Update to change.
1927         (ConstraintChecker.CheckConstraints): Resolve type-argument
1928         constraints before use.
1929
1930 2006-03-16  Martin Baulig  <martin@ximian.com>
1931
1932         * generic.cs
1933         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
1934         and don't have any instance constructors, also lookup in the base class.
1935         (TypeManager.IsNullableValueType): New public method.
1936
1937         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
1938         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
1939         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
1940
1941         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
1942         instead of just TypeManager.IsNullableType() to determine whether
1943         a lifted operator exists.
1944         (UnaryMutator.DoResolve): Likewise.
1945         (Conditional.DoResolve): Likewise.
1946         (Binary.DoResolve): A lifted operator only exists if both operands
1947         are valuetypes and at least one of them is a nullable type.
1948
1949 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
1950
1951         * iterator.cs : yield break is allowed in try statement which has
1952           catch clauses. Fixed bug #77767.
1953
1954 2006-03-12  Martin Baulig  <martin@ximian.com>
1955
1956         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
1957         private IsSignatureEqual() to compare types; see the comment in
1958         that method; fixes #77674.
1959
1960 2006-03-10  Raja R Harinath  <rharinath@novell.com>
1961
1962         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
1963         (Expression.ResolveAsTypeTerminal): Likewise.
1964         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
1965         * expression.cs, generic.cs, iterators.cs: Likewise.
1966         * parameter.cs, statement.cs, typemanager.cs: Likewise.
1967
1968 2006-03-09  Martin Baulig  <martin@ximian.com>
1969
1970         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
1971         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
1972
1973 2006-03-09  Martin Baulig  <martin@ximian.com>
1974
1975         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
1976         `prepared' flag is set.
1977
1978         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
1979         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
1980         issues; see gtest-254.cs.
1981
1982 2006-03-07  Martin Baulig  <martin@ximian.com>
1983
1984         * generic.cs (TypeManager.InferType): Allow infering
1985         `IEnumerable<T>' with an array of T; see gtest-251.cs.
1986
1987 2006-03-06  Martin Baulig  <martin@ximian.com>
1988
1989         * generic.cs
1990         (TypeManager.InferType): Fix gtest-250.cs.
1991
1992         * typemanager.cs
1993         (TypeManager.IsSubclassOf): Also check the base class.
1994
1995         * expression.cs
1996         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
1997         fixes gtest-249.cs.
1998
1999 2006-03-01  Raja R Harinath  <rharinath@novell.com>
2000
2001         Fix #77679.
2002         * expression.cs (ParameterReference.DoResolveBase): Change return
2003         type to bool.
2004         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
2005         Update.
2006
2007         Fix #77628.
2008         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
2009
2010         Fix #77642.
2011         * typemanager.cs (GetFullNameSignature): Don't nullref on
2012         protected accessors.
2013
2014 2006-02-16  Martin Baulig  <martin@ximian.com>
2015
2016         * generic.cs
2017         (TypeManager.GetGenericFieldDefinition): New public method; use it
2018         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
2019
2020 2006-02-14  Martin Baulig  <martin@ximian.com>
2021
2022         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
2023
2024 2006-02-14  Martin Baulig  <martin@ximian.com>
2025
2026         * generic.cs
2027         (TypeManager.DropGenericMethodArguments): New public method; don't
2028         use GetGenericMethodDefinition() on something which is not a
2029         generic method.
2030
2031 2006-02-14  Martin Baulig  <martin@ximian.com>
2032
2033         * generic.cs
2034         (ConstraintChecker.CheckConstraints): If a type parameter has the
2035         `struct' constraint, the type must be a non-nullable valuetype.
2036
2037 2006-02-10  Martin Baulig  <martin@ximian.com>
2038
2039         * typemanager.cs
2040         (TypeManager.IsOverride): Make this work for instantiated methods
2041         in a generic class; fixes #77509.
2042         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
2043         rather than calling it directly; fixes #77488.  
2044
2045 2006-02-08  Martin Baulig  <martin@ximian.com>
2046
2047         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
2048         reporting into CheckConstraint() so we can use the correctly
2049         instantiated type.
2050
2051 2006-02-08  Martin Baulig  <martin@ximian.com>
2052
2053         * expression.cs (BaseAccess): Add support for generic methods.
2054
2055         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
2056         the new MethodGroupExpr.
2057
2058 2006-02-07  Martin Baulig  <martin@ximian.com>
2059
2060         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
2061         also reference types; fixes #77483.
2062
2063 2006-02-07  Martin Baulig  <martin@ximian.com>
2064
2065         * generic.cs
2066         (TypeManager.IsGenericMethod): We now return whether something is
2067         an instantiated generic method (and not a generic method def).
2068         (TypeManager.IsGenericMethodDefinition): New public method.
2069
2070         * typemanager.cs
2071         (TypeManager.CSharpSignature): Only include type arguments for
2072         "real" generic methods, not for any instantiated method.
2073         (TypeManager.GetMethodName): Likewise, but also allow generic
2074         method definitions here.
2075
2076 2006-02-06  Miguel de Icaza  <miguel@novell.com>
2077
2078         * codegen.cs (EmitScopeInitFromBlock): check here the
2079         capture_context, there is no need to make two calls to the
2080         EmitContext. 
2081
2082         * anonymous.cs: Add some debugging messages that might help me
2083         track other instances of this problem in the future (the
2084         regression of test 467).
2085
2086         * cs-parser.jay: track the variable block, as we need to initalize
2087         any captured variables declared in this block for the "catch"
2088         portion of the "Try" statement.
2089
2090         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
2091         scope initialization for captured variables. 
2092
2093         Also, move the emit for the variables after the block location has
2094         been marked.
2095
2096 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
2097
2098        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
2099         
2100 2006-02-06  Martin Baulig  <martin@ximian.com>
2101
2102         * class.cs (TypeContainer.DefineType): If we're a struct, pass
2103         `TypeManager.value_type' as parent type to
2104         ModuleBuilder.DefineType().  Fixes #77358.      
2105
2106 2006-02-02  Miguel de Icaza  <miguel@novell.com>
2107
2108         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
2109         commit yesterday, the initialization for the roots is necessary.
2110         What is not necessary is the scope activation.
2111
2112 2006-02-02  Raja R Harinath  <rharinath@novell.com>
2113
2114         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
2115         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
2116         CS0206 checks.
2117         (Argument.Resolve): Remove CS0206 checks.
2118
2119 2006-02-01  Miguel de Icaza  <miguel@novell.com>
2120
2121         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
2122         scopes for all the roots, the scopes will now be emitted when the
2123         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
2124
2125         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
2126         code.  This reduces a lot of existing cruft.
2127         
2128         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
2129         that the ScopeInfo is generated as we enter the scope, not at the
2130         time of use, which is what we used to do before.
2131
2132         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
2133         every time a Block is about to be emitted if we have a
2134         CaptureContext. 
2135
2136 2006-02-01  Raja R Harinath  <rharinath@novell.com>
2137
2138         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
2139         attribute for mscorlib too.
2140
2141         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
2142         (Reset): Update.
2143         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
2144
2145         * typemanager.cs (cons_param_array_attribute): Make private.
2146         (Reset): Set it to null.
2147         (InitCoreHelpers): Don't initialize it.
2148         (ConsParamArrayAttribute): New.  Initialize it as needed.
2149         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
2150
2151 2006-01-31  Miguel de Icaza  <miguel@novell.com>
2152
2153         * expression.cs: There might be errors reported during the
2154         selection of applicable methods.  If there are errors, do not
2155         continue execution as it will lead the compiler to crash.
2156
2157 2006-01-30  Miguel de Icaza  <miguel@novell.com>
2158
2159         * expression.cs: Member access is not allowed on anonymous
2160         methods.  Fixes #77402.
2161
2162 2006-01-30  Raja R Harinath  <rharinath@novell.com>
2163
2164         Fix #77401
2165         * cs-parser.jay (VariableDeclaration): Don't set
2166         current_array_type to null.
2167         (field_declaration, event_declaration, declaration_statement):
2168         Set it to null here.
2169
2170 2006-01-29  Raja R Harinath  <harinath@gmail.com>
2171
2172         Fix part of #77397
2173         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
2174
2175 2006-01-28  Raja R Harinath  <harinath@gmail.com>
2176
2177         * typemanager.cs (GenericParameterPosition): New.
2178         * doc.cs: Use it.
2179
2180 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
2181
2182         * doc.cs : To process "include" elements, first we should create
2183           another list than XmlNodeList, because it could result in node
2184           removal, which could result in that the XmlNodeList gives up
2185           yielding next node.
2186
2187 2006-01-25  Miguel de Icaza  <miguel@novell.com>
2188
2189         * expression.cs: Introduce an error report that we were not
2190         catching before.   Gonzalo ran into it.
2191
2192 2006-01-23  Miguel de Icaza  <miguel@novell.com>
2193
2194         A fix for bug: #76957
2195         
2196         * iterators.cs (MoveNextMethod.CreateMethodHost): call
2197         ComputeMethodHost before creating the method, this is a new
2198         requirement. 
2199
2200         * anonymous.cs (AnonymousContainer): Now we track all the scopes
2201         that this method references (RegisterScope).  The actual scope
2202         where the method is hosted is computed with the ComputeMethodHost
2203         before we create the method.
2204
2205         Moved the Deepest routine here.
2206
2207         (AnonymousContainer.ComputeMethodHost): New routine used to
2208         compute the proper ScopeInfo that will host the anonymous method.
2209
2210         (ScopeInfo): Deal with multiple roots.  The problem was that we
2211         did not have a unique root where all ScopeInfos could be hanged
2212         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
2213         of roots.  
2214
2215         Remove AdjustMethodScope which is now computed at the end.  Remove
2216         LinkScope which did a partial link, instead link all ScopeInfos
2217         before code generation from the new "LinkScopes" routine. 
2218
2219         Simplify all the Add* routines as they no longer need to maintain
2220         the tree, they just need to record that they are using variables
2221         from a ScopeInfo.
2222
2223         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
2224         routines to produce the forest of ScopeInfo trees.
2225
2226         * class.cs (TypeContainer.AppendMethod): This is just like
2227         AddMethod, but ensures that an interface implementation method
2228         (IEnumerable.XXX) is not inserted at the beginning of the queue of
2229         methods, but at the end.
2230
2231         We use this functionality to ensure that the generated MoveNext
2232         method in the iterator class is resolved/emitted before the
2233         enumerator methods created.   
2234
2235         This is required because the MoveNext method computes the right
2236         ScopeInfo for the method.  And the other methods will eventually
2237         need to resolve and fetch information computed from the anonymous
2238         method. 
2239
2240         
2241 2006-01-23  Raja R Harinath  <rharinath@novell.com>
2242
2243         Improve implementation of section 14.4.2.2 (Better function member).
2244         * expression.cs (Invocation.MoreSpecific): Compare all type
2245         arguments before deciding if one type is more specific than
2246         another.  Handle array types too.  Return the more specific type.
2247         (Invocation.BetterFunction): Add more tie-breaking rules from
2248         section 14.4.2.2.  Perform "more specific" check after
2249         other tie-breaking rules.  Compare all parameter types before
2250         choosing the "more specific" method.
2251
2252 2006-01-21  Raja R Harinath  <harinath@gmail.com>
2253             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
2254
2255         Fix rest of #76995.
2256         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
2257         the 'aliases' hash.
2258         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
2259         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
2260
2261 2006-01-18  Martin Baulig  <martin@ximian.com>
2262
2263         * class.cs (TypeContainer.AddToMemberContainer): Use
2264         `symbol.MemberName.MethodName' instead of just `symbol.Name';
2265         fixes #77124.
2266
2267 2006-01-18  Martin Baulig  <martin@ximian.com>
2268
2269         Fix #76417: a generic class may now have methods which may unify
2270         for some type parameter substitutions.
2271
2272         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
2273         for methods which may unify anymore.
2274
2275         * expression.cs (Invocation.MoreSpecific): New private static
2276         method; checks whether one method is more specific than another
2277         according to 14.4.2.2 of the spec.
2278         (Invocation.BetterFunction): Implement the tie-breaking rules from
2279         14.4.2.2 of the spec: if two methods unify for some type parameter
2280         substitution, we need to pick the more specific one.
2281
2282 2006-01-18  Raja R Harinath  <rharinath@novell.com>
2283
2284         Fix #76656, cs0231-2.cs.
2285         * cs-parser.jay (formal_parameter_list): Make error case catch
2286         more issues.
2287         (parenthesized_expression_0): Add CS1026 check.
2288         (invocation_expression): Remove unused { $$ = lexer.Location }.
2289
2290 2006-01-17  Raja R Harinath  <rharinath@novell.com>
2291
2292         Fix #76824.
2293         * cs-parser.jay (statement_expression): Don't list out the
2294         individual statement-expressions.  Convert syntax error into
2295         CS0201 check.
2296
2297 2006-01-16  Raja R Harinath  <rharinath@novell.com>
2298
2299         Fix #76874.
2300         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
2301         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
2302         CheckIntermediateModification.
2303         (FieldExpr.DoResolve): Add new two-argument version that
2304         allows us to resolve the InstanceExpression as an lvalue.
2305         The one-argument variant is now just a wrapper.
2306         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
2307         Resolve the lhs as an lvalue if the it has a value type.
2308         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
2309         from Assign.DoResolve.
2310         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
2311         resolved as an lvalue.
2312         (PropertyExpr.DoResolve): Update.
2313         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
2314         has a value type.  Move CS1612 check here from
2315         CheckIntermediateModification.
2316         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
2317         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
2318         'right_side' of a ResolveLValue on an 'out' argument.
2319         (EmptyExpression.LValueMemberAccess): New.  Used as the
2320         'right_side' of a propagated ResolveLValue on a value type.
2321         (LocalVariableReference.DoResolveBase): Recognize
2322         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
2323         Add CS1654 check.
2324         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
2325         EmptyExpression.Null.
2326
2327 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
2328
2329         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
2330           Type.IsGenericParameter(). Fixed bug #77183.
2331         * doc.cs : it is now identical to doc.cs in mcs.
2332
2333 2006-01-16  Martin Baulig  <martin@ximian.com>
2334
2335         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
2336
2337 2006-01-16  Martin Baulig  <martin@ximian.com>
2338
2339         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
2340         ctors; fixes #77250.
2341
2342 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2343
2344         This fixes the problem where we used ldfld instead of ldflda to
2345         load the "THIS" pointer on captured parameters, when THIS is a
2346         value type.  See bug #77205.
2347         
2348         * iterators.cs (CapturedThisReference.Emit): Pass false to
2349         EmitThis (we do not need the address).
2350
2351         * codegen.cs (EmitThis): it needs to know whether we need the
2352         address of `this' or not.  This is used by value types.  
2353
2354         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
2355         every other call passes false.
2356
2357 2006-01-12  Raja R Harinath  <rharinath@novell.com>
2358
2359         Fix #77221.
2360         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
2361         GetOverride.
2362         * expression.cs (Invocation.OverloadResolve): Update.
2363         (Invocation.DoResolve): Avoid double resolution of invocation.
2364
2365 2006-01-11  Raja R Harinath  <rharinath@novell.com>
2366
2367         Fix #77180.
2368         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
2369         unary negation of floating point types as 0-expr; negation cannot
2370         overflow in floating point types.
2371
2372         Fix #77204.
2373         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
2374         on operands of 'void' type.
2375
2376         Fix #77200.
2377         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
2378         and ExclusiveOr for boolean constants too.
2379
2380 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
2381
2382         * expression.cs: Fix Console.WriteLine ((this = x).foo);
2383
2384 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2385
2386         * cs-tokenizer.cs (Position): New class used to save and restore
2387         the position state in the tokenizer.  Before this patch the save
2388         and restore was not complete enough so the line and columns would
2389         start to drift and the debugger and stack traces will get the
2390         wrong data.
2391
2392 2006-01-10  Martin Baulig  <martin@ximian.com>
2393
2394         * generic.cs
2395         (TypeParameter.InflateConstraints): New public method.
2396
2397         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
2398         constraints; fixes #77042.
2399
2400 2006-01-10  Martin Baulig  <martin@ximian.com>
2401
2402         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
2403         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
2404         #77061. 
2405
2406 2006-01-09  Raja R Harinath  <rharinath@novell.com>
2407
2408         Fix #75636.
2409         * expression.cs (Invocation.OverloadResolve): Replace reflected
2410         override methods with their base virtual methods, rather than
2411         skipping over them.
2412         * typemanager.cs (TypeManager.GetOverride): New.
2413
2414 2005-12-21  Miguel de Icaza  <miguel@novell.com>
2415
2416         * driver.cs: Report the case of no source files and no -out:
2417         argument provided.
2418
2419 2005-12-20  Raja R Harinath  <rharinath@novell.com>
2420
2421         Fix #77035.
2422         * expression.cs (ComposedCast.GetSignatureForError): Define.
2423
2424 2006-01-05  Jb Evain  <jbevain@gmail.com>
2425
2426         * class.cs (Property.Define, Indexer.Define): do not tag the
2427         properties as SpecialName | RTSpecialName.
2428
2429 2006-01-04  Miguel de Icaza  <miguel@novell.com>
2430
2431         * class.cs (MethodCore.IsDuplicateImplementation): This method was
2432         doing a low-level comparission of parameter types.  It was lacking
2433         a check for __argslist. 
2434
2435 2005-12-30  Miguel de Icaza  <miguel@novell.com>
2436
2437         * expression.cs (ParameterReference.DoResolveBase): Allow
2438         reference parameters if they are local to this block. 
2439
2440         This allows the ref and out parameters of a delegate to be used in
2441         an anonymous method, for example:
2442
2443         delegate void set (out int x);
2444
2445         set s = delegate (out int x){
2446                 x = 0;
2447         };
2448
2449         This is used by functionality introduced late in the C# language.
2450         
2451         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
2452         method that take ref and out parameters. 
2453
2454         Fixes #77119 which was a late change in the spec.
2455
2456 2005-12-23  Miguel de Icaza  <miguel@novell.com>
2457
2458         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
2459         parent if its the same scope.  Fixes #77060.
2460
2461 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
2462
2463         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2464
2465 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2466
2467         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2468         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2469         that doesn't contain the full public key. This is a update of the
2470         friend assemblies in .Net 2.0 release.
2471         
2472 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2473
2474         Fix #76995
2475
2476         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2477         ListDictionary, to contain the ExternAliasEntry entries (in
2478         addition to the NamespaceEntry.aliases hashtable). This field is
2479         shared between the original entry and its doppelganger (bodyless 
2480         copy of it).
2481         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2482         extern_aliases field.
2483         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2484         lookup in extern_aliases.
2485
2486 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2487
2488         Fix #77006.
2489         * class.cs (TypeContainer.Mark_HasEquals): New.
2490         (TypeContainer.Mark_HasGetHashCode): New.
2491         (ClassPart): Override them.
2492         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2493
2494         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2495         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2496         DeclSpace.
2497
2498         Fix #77008.
2499         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2500         'parent' argument to the base constructor.
2501
2502         Remove all mention of TypeContainer from decl.cs.
2503         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2504         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2505         (DeclSpace.DeclSpace): Likewise.
2506         (DeclSpace.DefineMembers): Remove unused argument.
2507         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2508         debugging check -- we don't care if the debug code throws an
2509         InvalidCastException instead of an InternalErrorException.
2510         * class.cs (TypeContainer.DefineMembers): Update to changes.
2511         (TypeContainer.DoDefineMembers): Likewise.
2512         (TypeContainer.GetMethods): Likewise.
2513         (PropertyMember.Define): Likewise.
2514         (MemberBase.Parent): New property that forwards to
2515         MemberCore.Parent, but ensures that we get a TypeContainer.
2516         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2517         (RootContext.PopulateTypes): Likewise.  Remove special case code
2518         for !RootContext.StdLib: DefineMembers is idempotent.
2519
2520 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2521
2522         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2523
2524 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2525
2526         * doc.cs : The search for referenced namespace was insufficient to
2527           get global one as it used to do. Fixed bug #76965.
2528
2529 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2530
2531         * doc.cs : check name in cref in the last phase that whether it is
2532           namespace or not.
2533
2534 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2535
2536         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2537           Mono.C5.
2538
2539 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2540
2541         * doc.cs : so it turned out that we cannot skip override check for 
2542           interface members. Fixed bug #76954.
2543
2544 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2545
2546         * cs-tokenizer.cs : fixed bug #75984:
2547           - #warning and #error should not be handled when the source line
2548             is disabled.
2549           - #line is not checked strictly when the source line is disabled.
2550           - #define and #undef is on the other hand checked strictly at any
2551             state.
2552
2553 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2554
2555         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2556           CS1027 report.
2557
2558 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2559
2560         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2561
2562         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2563         nested types.
2564
2565 2005-12-14  Martin Baulig  <martin@ximian.com>
2566
2567         * typemanager.cs (TypeManager.GetFullName): Make this public;
2568         `Type.Fullname' now never returns null.
2569
2570         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2571         explicit interface implementations; we're now using the same
2572         naming convention than csc does.
2573
2574 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2575
2576         * convert.cs (ExplicitConversionCore): Check the return value from
2577         ExplicitConversionCore which can return null on failure.  Fixes #76914
2578
2579 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2580
2581         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2582         instead of IsGenericInstance.
2583         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2584         code that's now covered by the more general test.
2585         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2586
2587         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2588         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2589         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2590         * generic.cs, report.cs, typemanager.cs: Likewise.
2591
2592 2005-12-08  Martin Baulig  <martin@ximian.com>
2593
2594         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
2595
2596         * typemanager.cs (TypeManager.CSharpSignature): Include type
2597         arguments in the signature of a generic method.
2598
2599 2005-12-07  Martin Baulig  <martin@ximian.com>
2600
2601         Add support for custom attributes on type parameters.
2602
2603         * cs-parser.jay (type_arguments): Added `opt_attributes'.
2604
2605         * generic.cs (TypeParameterName): New public class; we use this
2606         instead of a `string' to store the name of a type parameter, so we
2607         can also have `Attributes'.
2608         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
2609         array instead of a `string[]' array.
2610         (TypeParameter.ctor): We now also take an `Attributes' argument.
2611         (TypeParameter.EmitAttributes): New public method; emit our
2612         `OptAttributes' here.
2613         (GenericMethod.EmitAttributes): New public method; emit the custom
2614         attributes on all our type parameters.
2615
2616         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
2617         our type parameters.
2618         (MethodData.Define): If we're a generic method, call
2619         EmitAttributes() on it.
2620
2621 2005-12-07  Martin Baulig  <martin@ximian.com>
2622
2623         * generic.cs
2624         (ConstraintChecker): New public abstract class; move the
2625         constraint checking here from `ConstructedType' and also do
2626         constraint checking for generic methods here.
2627
2628         * expression.cs (Invocation.OverloadResolve): Use
2629         ConstraintChecker.CheckConstraints() if we resolved to a generic
2630         method.  Fix #76806.
2631
2632 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2633
2634         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
2635
2636         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
2637         event initializers.
2638         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
2639         (FieldBase.Initializer): Initializer is now optional.
2640         (EventField.Define): Only event field can have initializer.
2641
2642         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
2643
2644         * const.cs (Const): Reuse initializer.
2645
2646         * cs-parser.jay: Updated after FieldBase changes.
2647         Added current_array_type to simplify array initializers.
2648
2649         * ecore.cs (NullCast.IsDefaultValue): Implemented.
2650
2651         * expression.cs, iterators.cs: Updated.
2652
2653         * namespace.cs (NamespaceEntry): Made UsingFound private.
2654
2655 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2656
2657         * parameterCollection.cs: Obsolete, removed.
2658         * parser.cs: Obsolete, removed.
2659
2660 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2661
2662         Fix #76849.
2663         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
2664
2665         * enum.cs (Enum.Define): Set obsolete context here.
2666
2667 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2668
2669         * doc.cs :
2670           - FindDocumentedMember() now expects 1) paramList as null
2671             when "we don't have to check the number of parameters" and
2672             2) Type.EmptyTypes when "there is no arguments".
2673           - Introduced FoundMember struct to hold the exact type which was
2674             used to find the documented member (the above change broke
2675             test-xml-044; it might be better just to use DeclaringType than
2676             what MS does, like this change does, but it depends on usage.)
2677
2678 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2679
2680         * doc.cs : documented member might be from DeclaringType for nested
2681           types. Fixed bug #76782.
2682
2683 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
2684
2685         * anonymous.cs: Have the param code handle leaving copies on the
2686         stack etc. Allows anonymous params to take part in the assignment
2687         code (++, +=, etc). Fixes bug #76550
2688
2689         * expression.cs: Handle the prepare_for_load/leave_copy by passing
2690         it down to the anon code.
2691
2692         * iterators.cs: Use dummy var here
2693
2694         * codegen.cs: Handle new vars
2695
2696 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2697
2698         Fix #76849.
2699         * class.cs (MethodData.Define): Set proper Obsolete context.
2700
2701         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
2702         obsolete context.
2703         (FieldExpr.DoResolve): Ditto.
2704
2705 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2706
2707         Fix #76849.
2708         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
2709         parent is not obsolete.
2710
2711 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
2712
2713         * doc.cs : (FindDocumentedMember) find parameterless members first
2714           and get CS0419 in the early stage. Fixed first case of bug #76727.
2715
2716 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
2717
2718         Fix #76859.
2719         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
2720         no error was reported.
2721
2722         *expression.cs (Binary.DoResolve): left can be null.
2723
2724 2005-12-06  Raja R Harinath  <rharinath@novell.com>
2725
2726         * class.cs (MethodCore.CheckGenericOverride): Delete unused
2727         abstract method and all overrides.
2728         * support.cs (ParameterData.GenericConstraints): Delete.
2729         (ReflectionParameters.type_params): Delete.
2730         (ReflectionParameters.ReflectionParameters): Make private.
2731         (ReflectionParameters.GetConstaints): New factory method.
2732         * generic.cs (TypeParameterDefineType): Use it.
2733         (TypeManager.GetTypeParameterConstraints): Likewise.
2734
2735 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
2736
2737         Fix #76783.
2738         * class.cs (MethodData.Emit): Parameters should be labeled first.
2739
2740 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
2741
2742         Fix #76761.
2743         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
2744
2745 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
2746
2747         * attribute.cs (AreParametersCompliant): Moved to Parameter.
2748
2749         * class.cs (MethodCore): Parameter clean up.
2750         (IMethodData): Added ParameterInfo.
2751         (MethodData): Parameter clean up.
2752         (Indexer.Define): Parameter clean up.
2753
2754         * anonymous.cs,
2755         * codegen.cs,
2756         * cs-parser.jay,
2757         * decl.cs,
2758         * doc.cs,
2759         * ecore.cs,
2760         * flowanalysis.cs,
2761         * iterators.cs,
2762         * pending.cs,
2763         * statement.cs,
2764         * typemanager.cs: Parameter clean up.
2765
2766         * delegate.cs (Define): Get rid of duplicated code.
2767
2768         * expression.cs (ParameterReference): Removed useless parameters
2769         and simplified.
2770         (Invocation): Ditto.
2771
2772         * parameter.cs (ParamsParameter): New class, params specialization.
2773         (ArglistParameter): Attemp to separate arglist.
2774         (Parameter): Refactored to be reusable and faster.
2775         (Parameter.Modifier): Made understandable.
2776         (Parameters): Changed to be used as a class for `this' assembly
2777         parameters. Refactored to use new specialized classes.
2778
2779         * support.cs (ParameterData): Added Types property.
2780         (InternalParameters): Deleted.
2781
2782 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2783
2784         * doc.cs : the previous patch does not actually fix the bug.
2785           PropertyInfo override check is now implemented and really fixed it.
2786         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
2787
2788 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2789
2790         * doc.cs : apply "override filter" also to properties.
2791           Fixed bug #76730.
2792
2793 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2794
2795         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
2796           no need to check overrides. For classes, omit those results from 
2797           interfaces since they must exist in the class. Fixed bug #76726.
2798
2799 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2800
2801         * typemanager.cs : (GetFullNameSignature) differentiate indexers
2802           with different parameters. Fixed the second problem in #76685.
2803
2804 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2805
2806         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
2807           get expected 'protected' access in CheckValidFamilyAccess()).
2808           Fixed bug #76692.
2809
2810 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2811
2812         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
2813           Fixed bug #76705.  CS1569 was incorrectly commented out.
2814
2815 2005-11-23  Martin Baulig  <martin@ximian.com>
2816
2817         * generic.cs (Constraints.Define): Removed.
2818         (TypeParameter.DefineConstraints): Removed.
2819         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
2820         on the GenericTypeParameterBuilder here.
2821
2822 2005-11-23  Martin Baulig  <martin@ximian.com>
2823
2824         * typemanager.cs (TypeManager.GetProperty): Make this public.
2825
2826         * generic.cs (Nullable.NullableInfo.ctor): Use
2827         TypeManager.GetProperty() rather than using reflection directly.
2828
2829 2005-11-17  Martin Baulig  <martin@ximian.com>
2830
2831         * expression.cs (Indexers.GetIndexersForType): Added support for
2832         generic parameters; fixes #76587.
2833
2834 2005-11-17  Martin Baulig  <martin@ximian.com>
2835
2836         * anonymous.cs
2837         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
2838         inherit the scope from our parent.  Fixes #76653.
2839
2840 2005-11-15  Martin Baulig  <martin@ximian.com>
2841
2842         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
2843         instead of `ScopeTypeBuilder' to refer to the "current" type.
2844         (AnonymousMethod.CreateScopeType): Correctly create the helper
2845         class if we're inside a generic type definition.
2846
2847 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2848
2849         * doc.cs : use Invocation.IsOverride() to do real override check.
2850         * expression.cs : made Invocation.IsOverride() internal.
2851
2852 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2853
2854         * doc.cs : use TypeManager.FindMembers() instead of (possible)
2855           TypeBuilder.FindMembers() and filter overriden base members out.
2856           Fixed bug #76990.
2857
2858 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2859
2860         * doc.cs : ref/out parameters are represented as '@' (instead of
2861           '&' in type FullName). Fixed bug #76630 (additionally crefs).
2862
2863 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2864
2865         * doc.cs : when there was no '.' in cref to methods in doc comment,
2866           then parameters were missing in the output. Fixed bug #76691.
2867
2868 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2869
2870         * driver.cs : don't output docs when there is an error.
2871           Fixed bug #76693.
2872
2873 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2874
2875         * doc.cs :
2876           Now it should detect indexers. Fixed primary concern in bug #76685.
2877           Fixed CS0419 message to not show the identical member signature in
2878           the message.
2879
2880 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2881
2882         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
2883           instead of Type.FindMembers() since it does not handle events.
2884           Fixed bug #71604.
2885
2886 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
2887
2888         * codegen.cs: Fixed typo (speficied -> specified).
2889
2890 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2891
2892         Fix #76369.
2893         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
2894
2895 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2896
2897         * attribute.cs: Changed error message.
2898
2899         * cs-tokenizer.cs: One more check.
2900
2901 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2902
2903         * statement.cs (Block.Resolve): Ignore empty statement.
2904
2905 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2906
2907         * report.cs: Made error/warning methods more strict to avoid
2908         their misuse.
2909
2910         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
2911         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
2912         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
2913         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
2914
2915 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2916
2917         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
2918         Use the more explicit AssemblyName.FullName instead of 
2919         AssemblyName.Name to report errors.
2920         
2921 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2922
2923         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
2924         with mcs.
2925
2926 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2927
2928         * class.cs,
2929         * convert.cs,
2930         * cs-parser.jay,
2931         * decl.cs,
2932         * enum.cs,
2933         * expression.cs,
2934         * generic.cs,
2935         * pending.cs,
2936         * report.cs: Fixed error reporting and typos.
2937
2938         * generic.cs (TypeParameter.GetSignatureForError): New method.
2939         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
2940
2941         * typemanager.cs (GetFullName): Refactored.
2942
2943 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
2944
2945         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
2946         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
2947
2948         * class.cs (TypeContainer.IsComImport): New property.
2949         (Constructor.Define): Create proper ctor for ComImport types.
2950
2951         * expression.cs (New.CheckComImport): Fixed.
2952
2953 2005-11-07  Miguel de Icaza  <miguel@novell.com>
2954
2955         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
2956         that a parameter has been captured does not mean that we do not
2957         have to do the rest of the processing.  This fixes the second part
2958         of #76592.  If there was another anonymous method capturing
2959         values in the past, the Scope would never be set for the second
2960         method that captured the same parameter.
2961
2962         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
2963         properly manipulate the stack.   Second part of fix for #76592.
2964
2965         * expression.cs (New): Add support for invoking "new" on
2966         interfaces that have been flagged with the ComImport attribute and
2967         the CoClass.  Fixes #76637 
2968
2969         * statement.cs (Try.DoEmit): When a variable is captured, do not
2970         try to emit the vi.LocalBuilder variable as it has been captured.
2971         Create a temporary variable and store the results on the
2972         FieldBuilder.  Fixes #76642
2973
2974 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2975
2976         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
2977
2978         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
2979
2980         * expression.cs (Binary.DoResolve): Added && optimalization.
2981     
2982         * typemanager.cs (AddUserType): Removed useless argument.
2983
2984 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
2985
2986         * statement.cs (Block.variables): Uses ListDictionary.
2987
2988 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2989
2990         Fix #75969.
2991         * class.cs (PartialContainer.EmitType): Customized to emit
2992         security attributes.
2993         (ClassPart.ApplyAttributeBuilder): Transform security attribute
2994         for partial classes.
2995
2996 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2997
2998         Fix #76599.
2999         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
3000         access has to be fixed.
3001         
3002         * typemanager.cs (IsUnmanagedType): Wrong common field type.
3003
3004 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
3005
3006         Fix #76590.
3007         * ecore.cs (NullCast.Reduce): Implemented.
3008
3009         * expression.cs (ArrayCreation.CheckIndices): Correcly check
3010         constant type.
3011         
3012         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
3013         properly.
3014         (Foreach.Resolve): Catch null properly.
3015
3016 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3017  
3018         * cs-tokenizer.cs: Warning text fix.
3019
3020         * driver.cs: AllWarningNumbers exposed on public interface.
3021
3022         * report.cs (): Reviewed warning numbers.
3023         (IsValidWarning): Use binary search.
3024
3025 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3026  
3027         * driver.cs: Implemeted resource visibility.
3028         (Resources): New class for code sharing between /res: and
3029         /linkres:
3030  
3031 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3032
3033         decl.cs (CurrentTypeParameters): Fixed to be public.
3034
3035 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3036
3037         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
3038
3039 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3040
3041         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
3042
3043 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
3044
3045         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
3046
3047 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3048
3049         Add friend assembly access support.
3050         * typemanager.cs: assembly_internals_vis_attrs
3051         cache for friend assembly access. 
3052         (TypeManager.IsFriendAssembly): New method for
3053         checking friend assembly access.
3054         (TypeManager.Error_FriendAccessNameNotMatching): New
3055         helper method.
3056         (TypeManager.CompareKeyTokens): Likewise.
3057         (TypeManager.Filter): Handle friend accessible
3058         members.
3059
3060         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
3061         friend accessible types.
3062
3063         * ecore.cs (Expression.IsAccessorAccessible): Handle
3064         friend accessible properties.
3065
3066         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
3067         accessible types.
3068         
3069 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
3070
3071         Fix #76568.
3072         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
3073         folding.
3074         
3075         * convert (Convert.ImplicitReferenceConversion): NullCast holds
3076         contants only.
3077         
3078         * ecore.cs (NullCast): Child is contant only.
3079         
3080         * literal.cs (NullLiteral.Reduce): null can be converted to any
3081         reference type.
3082
3083 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
3084
3085         * driver.cs: Use Encoding.Default as default code page instead
3086           of ISO-28591.
3087
3088 2005-10-27  Raja R Harinath  <rharinath@novell.com>
3089
3090         Fix #76085.
3091         * expression.cs (Invocation.Error_InvalidArguments): Handle
3092         __arglist parameters.
3093         (Invocation.VerifyArgumentsCompat): Likewise.
3094         * support.cs (ReflectionParameters.GetSignatureForError): Print
3095         __arglist parameters.
3096         (InternalParamters.GetSignatureForError): Likewise.
3097         * parameter.cs (Parameters.GetSignatureForError): Likewise.
3098
3099 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
3100
3101         * attribute.cs (GetPropertyValue): Made public.
3102
3103         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
3104         Resolve.
3105         Add new property WrapNonExceptionThrows to handle 2.0 assembly
3106         attribute.
3107         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
3108         is not defined.
3109         
3110         * driver.cs: Reflect method name change.
3111         
3112         * statement.cs (Try.Resolve): Warn when try has both general
3113         exception handlers.
3114         
3115         * typemanager.cs: runtime_compatibility_attr_type new predefined
3116         type.
3117
3118 2005-10-26  Raja R Harinath  <harinath@gmail.com>
3119
3120         Fix #76419.
3121         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
3122         treat it as an empty parameter list.
3123
3124 2005-10-26  Raja R Harinath  <rharinath@novell.com>
3125
3126         Fix #76271.     
3127         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
3128         ResolveAsTypeStep silent.
3129         * statement.cs (Block.AddConstant): Mark block as used.
3130         (Block.ResolveMeta): Avoid piling on error messages
3131         if a constant initializer resolution fails.
3132
3133 2005-10-25  Raja R Harinath  <rharinath@novell.com>
3134
3135         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
3136         Remove.
3137         (NamespaceEntry.VerifyAllUsing): New.
3138         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
3139         behaviour.  Delegates actual resolution of alias to ...
3140         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
3141         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
3142         Update.
3143         * driver.cs (Driver.MainDriver): Update.
3144         
3145         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
3146         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
3147         property.
3148         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
3149         Remove.
3150         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
3151         RootNamespace.DefineNamespacesForAll.
3152
3153 2005-10-24  Raja R Harinath  <harinath@gmail.com>
3154
3155         * typemanager.cs (assemblies, external_aliases, modules)
3156         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
3157         (ComputeNamespaces, GetRootNamespace): Remove extra staging
3158         overhead.  Move resposibility ...
3159         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
3160         * driver.cs, attribute.cs, codegen.cs: Update to changes.
3161
3162 2005-10-23  Raja R Harinath  <harinath@gmail.com>
3163
3164         * namespace.cs (RootNamespace.all_namespaces): Renamed from
3165         cached_namespaces.  Improve usage.
3166         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
3167         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
3168         Move from GlobalRootNamespace and simplify.
3169         (RootNamespace.Global): Make instance variable.
3170         (RootNamespace.RootNamespace): Add "alias name" parameter.
3171         (GlobalRootNamespace): Simplify drastically.
3172         (Namespace.Lookup): Don't use GetNamespace.
3173         * typemanager.cs (GetRootNamespace): Rename from
3174         ComputeNamespaceForAlias.
3175         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
3176
3177 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3178
3179         * anonymous.cs (AnonymousContainer): Don't crash when container
3180         doesn't exist.
3181
3182 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3183
3184         * expression.cs (Binary.DoResolve): Warn when comparing same
3185         values.
3186
3187 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3188
3189         Fix #76486.
3190         * expression.cs (Binary.DoResolve): It looks like there are no
3191         convetsion rules in enum context.
3192
3193 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3194
3195         Add support for extern alias qualifiers.
3196         * typemanager.cs: Move some LookupTypeReflection code
3197         to namespace.cs, to have cleaner code. Added some methods
3198         to help us keep track of the extern aliased references.
3199         * driver.cs: Add suport for extern alias assemblies on command
3200         line and check for their warnings/errors. Also keep track of the
3201         extern aliased assemblies.
3202         * namespace.cs: Move the global functionality of Namespace
3203         to GlobalRootNamespace/RootNamespace. Now the global namespace
3204         is GlobalRootNamespace.Globa. Also the code moved from 
3205         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
3206         Finally added LocalAliasEntry (AliasEntry before) and
3207         ExternAliasEntry, to handle alias statements.
3208         * cs-parser.jay: Add support in the grammar for extern alias
3209         statement.
3210         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
3211         Update callings to Namespace (now in GlobalRootNamespace).
3212
3213 2005-10-25  Martin Baulig  <martin@ximian.com>
3214
3215         * convert.cs (ImplicitTypeParameterConversion): Make base
3216         interfaces actually work; fixes #76557.
3217
3218 2005-10-25  Martin Baulig  <martin@ximian.com>
3219
3220         * generic.cs
3221         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
3222         all the type parameters; fixes #76551.
3223
3224 2005-10-25  Martin Baulig  <martin@ximian.com>
3225
3226         Fix #76472.
3227
3228         * generic.cs
3229         (GenericMethod.ctor): Added `Expression return_type' and
3230         `Parameters parameters' arguments.
3231         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
3232         parameter and return types to check their constraints if they're
3233         generic types.
3234
3235         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
3236         boolean field.
3237
3238         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
3239         constraints of a generic type if `ec.ResolvingGenericMethod'.
3240
3241         * class.cs (MethodCore.DoDefineParameters): Set
3242         `ec.ResolvingGenericMethod' if we're a generic method.
3243         (MemberBase.MemberType): Likewise.
3244
3245 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3246
3247         * typemanager.cs (TypeManager): Added 
3248         TypeManager.internals_visible_attr_type to cache
3249         S.R.CompilerServices.InternalsVisibleToAttribute.
3250
3251         * codegen.cs (AssemblyClass): Added checks for 
3252         InternalsVisibleToAttribute in new method 
3253         CheckInternalsVisibleAttribute () and also cache the
3254         AssemblyName in AssemblyClass.Name.
3255         
3256 2005-10-24  Martin Baulig  <martin@ximian.com>
3257
3258         * typemanager.cs
3259         (TypeManager.ExpandInterfaces): Added overloaded version which
3260         just takes a `Type[]' array.
3261
3262         * generic.cs
3263         (Constraints.Resolve): Don't expand the interfaces here; ie. we
3264         just use the interfaces which were explicitly specified and not
3265         the interfaces they inherit.  Fixes #76482.
3266         (TypeParameter.FindMembers): Expand the interfaces here.
3267
3268 2005-10-21  Martin Baulig  <martin@ximian.com>
3269
3270         * generic.cs
3271         (Constraints.Resolve): Also resolve the actual types here.
3272         (Constraints.ResolveTypes): Just check the constraints here.
3273         Fixes #76363; see gtest-218.cs.
3274
3275 2005-10-21  Martin Baulig  <martin@ximian.com>
3276
3277         * convert.cs
3278         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
3279         instead of a `BoxedCast'; fixes gtest-217.cs.
3280
3281 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
3282
3283         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
3284           1) "new()" is specified as generic parameter constraint and 2) the
3285           type is TypeBuilder and 3) the type is abstract even if it has a
3286           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
3287
3288 2005-10-20  Martin Baulig  <martin@ximian.com>
3289
3290         * generic.cs
3291         (GenericConstraints.TypeParameter): New public property.
3292         (TypeParameter.ctor): Also take a `DeclSpace' argument.
3293         (TypeParameter.DeclSpace): New public property.
3294         (TypeParameter.DefineType): Inflate the constraints if our
3295         `DeclSpace' is an `Iterator'.   
3296
3297 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
3298
3299         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
3300           GenericMethod argument to compare methods' generic type arguments.
3301           Fixed bug #76382.
3302
3303 2005-10-19  Martin Baulig  <martin@ximian.com>
3304
3305         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
3306         not ResolveType() when resolving the base type, so we're not
3307         checking the constraints here.
3308         (TypeContainer.ResolveType): Call ResolveType() on our base_type
3309         if we have any.
3310
3311 2005-10-19  Martin Baulig  <martin@ximian.com>
3312
3313         * generic.cs (ConstructedType.CheckConstraints): Committing
3314         untested fix for #76441.
3315
3316 2005-10-18  Raja R Harinath  <rharinath@novell.com>
3317
3318         Fix #76371.
3319         * class.cs (TypeContainer.DefineType): Move updating of
3320         topological sort earlier in the code.
3321         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
3322
3323 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
3324
3325         Fix #76273.
3326         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
3327         
3328         * constant.cs (Constant.TryReduce): Moved from Cast class.
3329         (Reduce): Made little bit more OO and fixed missing conversions.
3330         
3331         * ecore.cs (Reduce): Implemented.
3332         (Binary.EnumLiftUp): New method to upgrade values to enum values.
3333         
3334         * literal.cs (Reduce): Implemented.
3335         
3336         * class.cs: Reverted Miguel's wrong commit.
3337
3338 2005-10-14  Miguel de Icaza  <miguel@novell.com>
3339
3340         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
3341
3342 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
3343
3344         * cs-parser.jay, expression.cs : CS0214 was missing error location
3345           for constants. Fixed bug #76404.
3346
3347 2005-10-10  Raja R Harinath  <rharinath@novell.com>
3348
3349         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
3350         InstanceExpression.
3351         (PropertyExpr.EmitCall): Likewise.
3352         * expression.cs (Invocation.EmitArguments): Handle case where
3353         arguments == null.
3354         (Invocation.EmitCall): Avoid allocating temporary variable if
3355         there are no arguments.
3356
3357 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
3358
3359         Fix #76370.
3360         * convert.cs (ExplicitConversionCore): Fixed object->enum
3361         conversion.
3362
3363 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3364
3365         Fix #76323.
3366         * convert.cs (ImplicitConversionStandard): Move conversion of
3367         void* to arbitrary pointer types ...
3368         (ExplicitConversionStandard): .. here.
3369         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
3370         error to always print typenames.
3371
3372 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3373
3374         * convert.cs (GetConversionOperator): Rename from
3375         GetConversionOperators.  Move operator selection code from ...
3376         (UserDefinedConversion): ... here.
3377
3378 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
3379
3380         * convert.cs (ExplicitConversionCore): Removed duplicate enum
3381         conversion.
3382
3383 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
3384
3385         * assign.cs (Assign.DoResolve): Error method changed.
3386
3387         * cfold.cs (DoConstantNumericPromotions): Error method changed.
3388         
3389         * const.cs (ResolveValue): Reset in_transit immediately.
3390         
3391         * constant.cs: Error method changed.
3392         
3393         * convert.cs: Removed useless location parameter.
3394         (ExplicitNumericConversion): Don't do double enum check.
3395         (ExplicitConversionCore): Renamed from ExplicitConversion.
3396         (ExplicitUnsafe): Extracted from ExplicitConversion.
3397         (ExplicitConversion): Uses for error reporting.
3398         
3399         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
3400         error messages.
3401         (ResolveBoolean): Uses common error method.
3402         (CastToDecimal): Get rid of ec.
3403         (CastFromDecimal): Optimized.
3404         (ConvCast): Get rid of ec.
3405         
3406         * enum.cs (ResolveValue): Reset in_transit immediately.
3407         (Emit): Return after first error.
3408         
3409         * expression.cs: Convert changes.
3410         
3411         * literal.cs: Error method changed.
3412         
3413         * statement.cs: Error method changed.
3414
3415 2005-10-06  Raja R Harinath  <rharinath@novell.com>
3416
3417         Fix gtest-131.cs and gtest-211.cs.
3418         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
3419         Only emit code for a label if it is used.  Unreachable code can
3420         violate ECMA evaluation stack invariants.
3421
3422 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3423
3424         * anonymous.cs: Implemented ExprClassName.
3425         
3426         * assign.cs (Assign.DoResolve): Don't chrash when type is not
3427         delegate.
3428         
3429         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
3430         check.
3431         
3432         * class.cs (StaticClass.DefineContainerMembers): Report protected
3433         members as error.
3434         
3435         * codegen.cs: if(ed) PRODUCTION.
3436         
3437         * convert.cs (Error_CannotImplicitConversion): Better error
3438         distinction.
3439         
3440         * cs-parser.jay: More error checks.
3441         
3442         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
3443         
3444         * driver.cs (CSCParseOption): Enabled wrong option check.
3445         
3446         * ecore.cs (Expression.ExprClassName): Turned to property.
3447         (MemberExpr.CheckIntermediateModification): For checking boxed
3448         value types     modification.
3449         
3450         * statement.cs (Fixed.Resolve): Expression type must be
3451         convertible to fixed type.
3452         (CollectionForeach.GetEnumeratorFilter,TryType):
3453         Small refactoring for easier error checking.
3454
3455 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
3456
3457         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
3458         attributes.
3459         
3460         * class.cs (GeneratedBaseInitializer): New class for customization
3461         compiler generated initializers.
3462         (MemberBase.DoDefine): Check Obsolete attribute here.
3463         (FieldMember.DoDefine): Ditto.
3464         
3465         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3466         constants.
3467         
3468         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3469         (MemberCore.GetObsoleteAttribute): Removed argument.
3470         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3471         (MemberCore.CheckObsoleteType): New helper.
3472         
3473         * delegate.cs,
3474         * enum.cs,
3475         * statement.cs: Updates after MemberCore changes.
3476         
3477         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3478         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3479         
3480         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3481         obsolete attribute for compiler construct.
3482         (As.DoResolve): Cache result.
3483         
3484         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3485
3486 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3487
3488         * expression.cs (Probe): instead of having a "Type probe_type"
3489         keep the extra information as a TypeExpr probe_type_expr since the
3490         "As" operator needs to perform some type checks.
3491
3492         * (As.DoResolve): If the type is a type parameter, ensure that it
3493         is constrained by a class.
3494
3495 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3496
3497         * statement.cs (Lock): Use the TemporaryVariable class instead of
3498         manually using local variables as those do not work when variables
3499         are captured.
3500
3501         * ecore.cs: Moved the TemporaryVariable class from being a nested
3502         class inside Foreach to be a public class that can be employed in
3503         other places. 
3504
3505 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3506
3507         * cs-parser.jay: interface_accessors replaced by
3508         accessor_declarations.
3509
3510         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3511         location.
3512         
3513         * statement.cs (GotoCase.Resolve): Convert null constant to
3514         null case.
3515         (SwitchLabel.ResolveAndReduce): Ditto.
3516         (SwitchLabel.NullStringCase): Custom null stamp.
3517         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3518         
3519         typemanager.cs (CSharpSignature): Don't skip first argument
3520         for full names.
3521
3522 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3523
3524         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3525         expression.cs, iterators.cs, literal.cs: Store constants and
3526         literals location.
3527         
3528         * class.cs (MemberBase.ShortName): Pass location.
3529         
3530         * cs-parser.jay: Some location fixes.
3531         
3532         * ecore.cs (Expression.Location): Made virtual.
3533
3534 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3535
3536         Fix #72930.
3537         * const.cs (Const.ResolveValue): Check for assigning non-null
3538         value to reference type.
3539
3540 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3541
3542         Fix #76133.
3543         * expression.cs (This.VerifyFixed): In a value type T, the type of
3544         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3545         value type R, 'this' is treated as a value parameter.
3546
3547 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3548
3549         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3550         if the underlying types are the same, otherwise we need to produce
3551         code that will do the proper cast.
3552
3553         This was exposed by Marek's constant rewrite which produced
3554         invalid code for the call site:
3555
3556         enum X : long { a }
3557         void Method (X v) {}
3558
3559         Method ((X) 5)
3560
3561         This fixes test-49.cs
3562
3563 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3564
3565         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3566           Type/Object should be allowed as well. Fixed bug #75968.
3567
3568 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3569
3570         * expression.cs : (Binary.DoResolve): when one is enum constant and
3571           another is constant 0, then return enum one *as enum type*.
3572           Fixed bug 74846.
3573
3574 2005-10-04  Martin Baulig  <martin@ximian.com>
3575
3576         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3577         `SetMemberIsUsed()' work for generics, too.
3578
3579 2005-10-04  Martin Baulig  <martin@ximian.com>
3580
3581         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3582         for corlib.  Fixes #75691.
3583
3584 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3585
3586         Fix #76255.
3587         * driver.cs: Fix compilation files with full root path.
3588
3589 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3590
3591         * report.cs (SymbolRelatedToPreviousError): Format the output so
3592         it does not use an open parenthesis that is never closed. 
3593
3594         * driver.cs: Follow coding guidelines
3595
3596 2005-09-18  Miguel de Icaza  <miguel@novell.com>
3597
3598         * driver.cs: Set InEmacs based on the environment variable EMACS. 
3599
3600         * location.cs (InEmacs): in this mode, do not report column
3601         location as it confuses Emacs.
3602
3603 2005-10-03  Raja R Harinath  <rharinath@novell.com>
3604
3605         * support.cs (SeekableStreamReader.Position): Don't error out when
3606         the requested position is just beyond the end of the current
3607         buffered data.
3608
3609 2005-09-28  Raja R Harinath  <rharinath@novell.com>
3610
3611         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
3612         try to keep in sync with the byte count of the underlying Stream.
3613         However, this limits us to a window size of 2048 characters: i.e.,
3614         the maximum lookahead of our lexer/parser can be 2048 characters.
3615
3616 2005-09-22  Martin Baulig  <martin@ximian.com>
3617
3618         * driver.cs: Removed a debugging FIXME.
3619
3620 2005-09-21  Raja R Harinath  <rharinath@novell.com>
3621
3622         * cs-parser.jay (type_arguments): Add CS1644 check.
3623         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
3624
3625 2005-09-15  Raja R Harinath  <rharinath@novell.com>
3626
3627         * Makefile (PROGRAM): Make profile specific.
3628         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
3629         the current directory.
3630
3631         Fix test-455.cs.
3632         * expression.cs (Invocation.EmitCall): Remove optimization on
3633         this_call since it doesn't handle 'this' being a value type.
3634
3635 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
3636
3637         * driver.cs: Ensure file handles are closed after parsing
3638
3639 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3640
3641         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3642         if the underlying types are the same, otherwise we need to produce
3643         code that will do the proper cast.
3644
3645         This was exposed by Marek's constant rewrite which produced
3646         invalid code for the call site:
3647
3648         enum X : long { a }
3649         void Method (X v) {}
3650
3651         Method ((X) 5)
3652
3653         This fixes test-49.cs
3654
3655 2005-09-05  Martin Baulig  <martin@ximian.com>
3656
3657         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
3658         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
3659
3660         * cs-parser.jay (delegate_declaration): Small fix for #75852.
3661
3662 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3663
3664         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
3665           to be a pointer type due to the spec 25.2, so check if declaring
3666           type is generic type definition. Fixed bug #75772.
3667
3668 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3669
3670         Fixed bug #75957.
3671         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
3672           both types are not defined by methods.
3673         * expression.cs : (Invocation.IsApplicable): it should work when
3674           the argument type is equal to the parameter type, not only when
3675           ImplicitConversionExists() returns true.
3676
3677 2005-09-02  Raja R Harinath  <rharinath@novell.com>
3678
3679         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
3680         internal.
3681
3682         Fix #75941.
3683         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
3684         flow-branching for LocalVariableReferences in case we were invoked
3685         from a MemberAccess.
3686         * expression.cs (LocalVariableReference.VerifyAssigned): New.
3687         Carved out of ...
3688         (LocalVariableReference.DoResolveBase): ... this.
3689         (MemberAccess.Resolve): Do the check that was disabled during
3690         SimpleNameResolve.
3691
3692 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3693
3694         * class.cs :
3695           (PartialContainer.Create): check abstract/sealed/static strictly
3696           but abstract/sealed can exist only at one side. Fixed bug #75883.
3697
3698 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
3699
3700         Fix #75945.
3701         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
3702         specified, don't default to UnmanagedType.I4.
3703
3704 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3705
3706         * expression.cs : conditional operator should check possibly
3707           incorrect assign expression. Fixed bug #75946.
3708
3709 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3710
3711         Fix #75934.
3712         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
3713         (ScopeInfo.EmitScopeType): Use it to construct field names from
3714         names of captured locals.
3715
3716         Fix #75929.
3717         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
3718         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
3719         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
3720         (ExplicitConversion): Remove enum cases already handled by
3721         implicit conversion.  Move implicit conversion check to the beginning.
3722         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
3723         * expression.cs (ArrayCreation.EmitDynamicInitializers):
3724         Don't treat System.Enum as a struct.
3725
3726 2005-08-30  Jb Evain  <jbevain@gmail.com>
3727
3728         * attribute.cs: handles as expression in parameters.
3729
3730 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3731
3732         Fix #75802.
3733         * class.cs (TypeContainer.VerifyClsName): Don't use a
3734         PartialContainer when verifying CLS compliance.
3735         (AbstractPropertyEventMethod): Set Parent here, ...
3736         (PropertyMethod): ... not here.
3737
3738 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
3739
3740         * attribute.cs : escaped attribute name should not be allowed to be
3741           resolved (e.g. @class as classAttribute). Fixed bug #75930.
3742
3743 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3744
3745         Fix #75927.
3746         * convert.cs (ImplicitStandardConversionExists): Allow zero also
3747         when converting a long constant to unsigned long.
3748         * expression.cs (Invocation.OverloadResolve): Add sanity check to
3749         detect where IsApplicable and VerifyArgumentsCompat disagree.
3750
3751 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3752         and Carlos Alberto Cortez  <carlos@unixmexico.org>
3753
3754         Fix #75848.
3755         * class.cs (TypeContainer.CanElideInitializer): New helper.
3756         (TypeContainer.EmitFieldInitializers): Use it to determine if we
3757         can safely emitting the initializer of a field.
3758
3759 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3760
3761         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
3762           allowed inside a switch (without loop). Fixed bug #75433.
3763
3764 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
3765
3766         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
3767         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
3768
3769 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3770
3771         * driver.cs : kinda reverting the default encoding changes (not exact 
3772           revert since I noticed that "codepage:reset" might not work fine).
3773
3774 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3775
3776         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
3777           Location. Now getter and setter store location correctly.
3778           (errors/cs0111-12.cs now reports the expected location.)
3779
3780 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3781
3782         * driver.cs : Use default encoding on the environment.
3783           Removed (now that) extra parameter for SeekableStreamReader.
3784         * support.cs : (SeekableStreamReader) third .ctor() argument for
3785           StreamReader is not required (always true). preamble size could
3786           be acquired in simpler and safe way.
3787
3788 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
3789
3790         * cs-parser.jay: report CS0642 at warning level 3
3791           and report CS0642 for an if else statement also
3792           fixes bug #74745. Patch by John Luke (and a bit
3793           modified by me).
3794           Removed extra CS0642 warning check for "while",
3795           "for" and "fixed".
3796         * statement.cs: In Block.Resolve(), CS0642 check
3797           is reimplemented to check a sequence of an empty
3798           statement and a block.
3799
3800           Both fix bug #66777.
3801
3802 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
3803
3804         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
3805         detection until I fix it.
3806         
3807         * cs-tokenizer.cs: Changed error message.
3808         
3809         * cs-parser.jay: Fixed 2 error locations.
3810         
3811         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
3812         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
3813         properties.
3814         
3815         * enum.cs (GetSignatureForError): Fixed.
3816         
3817         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
3818         method detection.
3819         
3820         * class.cs,
3821         * typemanager.cs (RegisterProperty): Removed.
3822         
3823         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
3824
3825 2005-08-24  Raja R Harinath  <rharinath@novell.com>
3826
3827         Fix #75874.
3828         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
3829         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
3830
3831 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3832
3833         * expression.cs : tiny fix is required for not warning positive ulong.
3834           See test-441.cs.
3835
3836 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3837
3838         * expression.cs : add CS0652 check for constant and integral
3839           expression. Fixed bug #53974.
3840
3841 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3842
3843         * expression.cs : in DoNumericPromotions(), check if there is implicit
3844           conversion overload for string (to check CS0034). Fixed bug #52492.
3845
3846 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3847
3848         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
3849
3850 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3851
3852         * ecore.cs : report location when it is *not* Null.
3853
3854 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3855
3856         * codegen.cs,
3857           ecore.cs,
3858           flowanalysis.cs,
3859           expression.cs:
3860           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
3861           correctly. Fixed bug #75721.
3862
3863 2005-08-23  Raja R Harinath  <rharinath@novell.com>
3864
3865         * support.cs (SeekableStreamReader.Position): Avoid an expensive
3866         loop that performs 'min (pos, char_count)'.
3867
3868         Fix #75862.
3869         * expression.cs (Unary.ResolveOperator): Don't discard implicit
3870         converted value in Operator.OnesComplement.
3871
3872 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
3873
3874         * anonymous.cs: If the anon method is pulled into a helper class,
3875         it needs to be `internal' not `private'. Fixes runtime behavior on
3876         msft. bug #75704
3877
3878 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
3879
3880         Fix #75803
3881         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
3882         is a partial class.
3883
3884 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
3885
3886         The big constants rewrite
3887         Fix #75746, #75685 and more
3888         As a side effect saved 1MB for MWF ;-)
3889         
3890         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
3891         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
3892         enum based for corlib compilation.
3893         
3894         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
3895         subtractions.
3896         
3897         * class.cs (FixedField.Define): Use ResolveAsConstant.
3898         
3899         * const.cs (IConstant): Interface constants and enums.
3900         (Const.ResolveValue): New method for constant resolvning.
3901         (ExternalConstant): Constants from imported assemblies.
3902         
3903         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
3904         conversion; like enums.
3905         (Constant.ToType): Converts this constant to different type.
3906         (Constant.Increment): Adds 1.
3907         
3908         * convert.cs (ImplicitConversionRequired): Simplified.
3909         
3910         * cs-parser.jay: Create EnumMember directly.
3911         
3912         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
3913         
3914         * doc.cs (GenerateEnumDocComment): Removed.
3915         
3916         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
3917         (ConvertIntLiteral): Removed.
3918         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
3919         
3920         * enum.cs (EnumMember): Implement IConstant.
3921         (Enum.IsValidEnumConstant): Removed.
3922         (Enum.GetNextDefaultValue): Removed.
3923         (Enum.FindMembers): Updated.
3924         (Enum.GenerateDocComment): Iterate enum members.
3925         
3926         * expression.cs (Cast.TryReduce): Handle enums correctly.
3927         (New.Constantify): Made public.
3928         (MemberAccess.DoResolve): Removed contant specific if(s).
3929         
3930         * literal.cs (NullLiteral): Implement new abstract methods.
3931         
3932         * statement.cs (GotoCase.Resolve): Use new constant methods.
3933         (SwitchLabel.ResolveAndReduce): Use new constant methods.
3934         
3935         * typemanager.cs (LookupEnum): Removed.
3936         (IsEnumType): Fixed to work with corlib.
3937         (RegisterConstant): Removed.
3938         (LookupConstant): Removed.
3939         (GetConstant): Changed to work with IConstant.
3940
3941 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
3942
3943         * location.cs : Fixed overflown (>255) column number.
3944
3945 2005-08-03  Raja R Harinath  <rharinath@novell.com>
3946
3947         First cut of the qualified-alias-member feature.
3948         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
3949         token.
3950         * cs-parser.jay (DOUBLE_COLON): New token.
3951         (namespace_or_type_name): Add rule for recognizing
3952         qualified-alias-members.
3953         (primary_expression): Likewise.
3954         (element_access): Allow QualifiedAliasMember as a possible
3955         type-bearing expression.
3956         (local_variable_type, local_variable_pointer_type): Likewise.
3957         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
3958         aliases in the current and enclosing namespace declarations.
3959         (NamespaceEntry.UsingAlias): Add CS0440 warning.
3960         * decl.cs (MemberName.is_double_colon): New.
3961         (MemberName.MemberName): Add new constructor for alias-member.
3962         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
3963         * expression.cs (QualifiedAliasMember): New expression type.
3964
3965 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3966
3967         * location.cs : it borked when no argument was specified.
3968
3969 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3970
3971         * location.cs : tiny ToString() format fix.
3972
3973 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3974
3975         * statement.cs : oops, it was missing.
3976
3977 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3978
3979         A set of fixes for precise line/column location.
3980
3981         * location.cs :
3982           "token" field now holds a file/line "delta", a line number offset 
3983           from the segment, and a column number. See also:
3984           http://lists.ximian.com/pipermail/mono-devel-list/2004-
3985           December/009508.html
3986           Removed static IsNull. Use instance IsNull property instead.
3987         * cs-tokenizer.cs :
3988           For some tokens it stores Location. For Identifier it stores
3989           LocatedToken which is a pair of string name and location.
3990           Column numbers are adjusted only at getChar().
3991         * report.cs :
3992           Use Location.ToString() for reporting (it now contains column).
3993         * cs-parser.jay :
3994           Largely modified to use LocatedToken instead of
3995           string (IDENTIFIER), and to acquire Location from some tokens.
3996         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
3997           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
3998           codegen.cs :
3999           Now MemberName holds Location. DeclSpace.ctor() receives Location
4000           as a parameter. Removed extra parameters to all derived classes.
4001           Replaced Location.IsNull() with instance property.
4002         * assign.cs, expression.cs :
4003           Added .ctor() overload that omits Location.
4004         * attribute.cs :
4005           Added "nameEscaped" flag that indicates the identifier was escaped
4006           in the source file. This fixes bug #57047.
4007
4008 2005-09-02  Martin Baulig  <martin@ximian.com>
4009
4010         * class.cs: Make CS3005 a warning, not an error.
4011
4012 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
4013
4014         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
4015         New method, looking for lo-case imported cls type.
4016
4017         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
4018         here.
4019
4020         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
4021
4022         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
4023
4024         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
4025         all_imported_types.
4026         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
4027
4028         Optimized to save 3.5 MB for SWF compilation.
4029
4030 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4031
4032         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
4033         (PartialContainer.Create): Moved logic AddToContainer.
4034         (PartialContainer.MarkForDuplicationCheck): Shares name.
4035         
4036         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
4037         place.
4038         
4039         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
4040         initialization.
4041         (Namespace.GetSignatureForError): New method.
4042         
4043         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
4044         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
4045
4046 2005-08-01  Raja R Harinath  <rharinath@novell.com>
4047
4048         Fix #75669.
4049         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
4050         member lookup rather than qualifier_type, since qualifier_type can
4051         be null.
4052
4053 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4054
4055         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
4056         enum member.
4057
4058 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4059
4060         * statement.cs: Copy the local exception into the exception
4061         captured local.  Fixes 75674
4062
4063 2005-07-31  Raja R Harinath  <harinath@gmail.com>
4064
4065         Fix #75658.
4066         * expression.cs (Invocation.OverloadResolve): Don't report error
4067         CS1501 if error CS1502 has been reported.
4068         (New.DoResolve): Delegate CS1501 reporting to
4069         Invocation.OverloadResolve.
4070
4071         Fix #75656.
4072         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
4073         invariant-meaning-in-block property in an enclosing block if
4074         necessary.
4075
4076 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
4077
4078         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
4079         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
4080         (Switch.CheckSwitch): Just save 50kb for SWF.
4081
4082 2005-07-27  Martin Baulig  <martin@ximian.com>
4083
4084         * anonymous.cs (CaptureContext.AddField): Added
4085         `AnonymousContainer am' argument; compute its toplevel scope if
4086         it's not already computed.  Fixes #75649.
4087
4088 2005-07-26  Raja R Harinath  <rharinath@novell.com>
4089
4090         Fix #75628.
4091         * class.cs (Constructor.Emit): Reset block to null if the block
4092         resolve fails.
4093
4094 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4095
4096         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
4097
4098 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4099
4100         * class.cs (MethodData.Define): Check whether accessor implementing
4101         interface is public.
4102
4103         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
4104
4105 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
4106
4107         Fix #57245
4108         * namespace.cs (LookupType): Moved same type check to...
4109         
4110         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
4111         with the same name.
4112
4113 2005-07-21  Raja R Harinath  <rharinath@novell.com>
4114
4115         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
4116         already found a typebuilder.
4117         * class.cs (MethodCore.IsDuplicateImplementation): Compare
4118         MemberNames, not strings.
4119
4120         * const.cs (Error_ExpressionMustBeConst): 
4121         Rename from Error_EpressionMustBeConst.
4122         * const.cs, class.cs, statement.cd: Update.
4123
4124 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
4125
4126         Fix #65573
4127
4128         * const.cs (Const.LookupConstantValue): Report missing contant expression
4129         everytime.
4130         (Error_EpressionMustBeConstant): Only one error method.
4131
4132         * class.cs, statement.c: Updated.
4133
4134 2005-07-20  Raja R Harinath  <rharinath@novell.com>
4135
4136         * statement.cs (Block.Flags): Add back HasVarargs.
4137         (Block.flags): Make protected.
4138         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
4139
4140         * typemanager.cs (types, typecontainers, user_types): Remove.
4141         (UserTypes, TypeContainers): Likewise.
4142         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
4143         (CleanUp, Reset): Update.
4144         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
4145         (GetNestedType): Use Type.GetNestedType.
4146         (CoreLookupType): Take two arguments, the namespace and the
4147         basename of the type.  Update to use the Namespace.Lookup
4148         mechanism.
4149         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
4150         (RealMemberLookup): Use IsNestedChildOf instead of playing with
4151         string concatenation and substring matches.
4152         * class.cs, enum.cs, delegate.cs: Update to changes.
4153
4154 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
4155
4156         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
4157         Expression and made virtual.
4158
4159         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
4160         (ImplicitStandardConversionExists): Fixed `byte' typo ?
4161
4162         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
4163
4164         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
4165         error message.
4166
4167         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
4168         change.
4169
4170 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
4171
4172         Fix #57707
4173         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
4174         AssemblyCultureAttribute is not used on executable.
4175
4176         * rootcontext.cs,
4177         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
4178
4179 2005-07-16  Raja R Harinath  <rharinath@novell.com>
4180
4181         Fix #60638.
4182         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
4183         New.  Reports CS0252/CS0253.
4184         Mostly taken from preliminary patch by Duncak Mak.
4185         (Binary.DoResolveOperator): Store results of operator lookup.
4186         Use them to detect if we need to warn about unintended reference
4187         comparisons.
4188
4189 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4190
4191         Fix #72969.
4192         * namespace.cs (Namespace.Lookup): Add back location parameter.
4193         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
4194         * delegate.cs, ecore.cs, expression.cs: Update to changes.
4195
4196         * codegen.cs (EmitContext.DeclSpace): Make readonly.
4197         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
4198         (Namespace.LookupType): ... this.
4199         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
4200         of namespaces.
4201         * typemanager.cs (LookupTypeReflection): Remove buggy code that
4202         purported to handle pointers.
4203         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
4204         CoreLookupType.
4205
4206 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4207
4208         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4209         type as namespace.
4210
4211 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4212
4213         * namespace.cs (Namespace.Lookup): Drop location parameter.
4214         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
4215         (NamespaceEntry.Lookup): ... this.
4216         (NamespaceEntry.Error_AmbiguousTypeReference):
4217         Move here from DeclSpace.
4218         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
4219         names ...
4220         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
4221         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
4222         Move to NamespaceEntry.
4223         * delegate.cs, expression.cs: Update to changes.
4224
4225 2005-08-31  Martin Baulig  <martin@ximian.com>
4226
4227         Committing a patch from Atsushi Enomoto for #75850.
4228
4229         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
4230         Prefer a generic enumerator over a non-generic one.
4231
4232 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4233
4234         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4235         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4236
4237 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4238
4239         * driver.cs : reverting default encoding change as well as mcs.
4240
4241 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4242
4243         * driver.cs, support.cs : merged r48826.
4244           Marek Safer wrote:
4245           > could you integrate your mcs changes to gmcs otherwise
4246           > gmcs cannot compile some files.
4247
4248 2005-08-20  Martin Baulig  <martin@ximian.com>
4249
4250         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
4251         scope if we don't already have it.
4252
4253         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
4254         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
4255         fixes #75867.
4256
4257 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4258
4259         * statement.cs: Copy the local exception into the exception
4260         captured local.  Fixes 75674
4261
4262 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4263
4264         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4265         type as namespace.
4266
4267 2005-08-12  Martin Baulig  <martin@ximian.com>
4268
4269         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4270         for nested types here to avoid hitting the cache too early.
4271
4272 2005-08-09  Miguel de Icaza  <miguel@novell.com>
4273
4274         * enum.cs: On the new compiler CLS error 3005 is now a warning not
4275         an error. 
4276
4277 2005-08-03  Martin Baulig  <martin@ximian.com>
4278
4279         Make iterators in generic methods work; see gtest-191.cs.
4280
4281         * generic.cs
4282         (Constraints.Resolve): Protect against being called twice.
4283
4284         * class.cs
4285         (TypeContainer.GetClassBases): Make this `protected virtual'.
4286
4287         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
4288         (Iterator.GetClassBases): Override this and compute the base
4289         classes here.
4290         (Iterator.DefineNestedTypes): If we're a generic method, all our
4291         method type parameters become class type parameters on the proxy
4292         class.
4293
4294         * statement.cs
4295         (ToplevelBlock.Parameters): Make this a property, not a field.
4296         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
4297
4298 2005-08-03  Martin Baulig  <martin@ximian.com>
4299
4300         * typemanager.cs (TypeManager.IsSubclassOf): Use
4301         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
4302         (TypeManager.GetFullName_recursed): Improved.
4303
4304 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
4305
4306         Fix #75417
4307         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
4308         Private accessor case, using TypeManager.IsPrivateAccessible instead of
4309         invocation_type == mi.DeclaringType, since the first one also checks
4310         other condition used by generic instances.
4311         
4312 2005-07-27  Martin Baulig  <martin@ximian.com>
4313
4314         * anonymous.cs (CaptureContext.AddField): Added
4315         `AnonymousContainer am' argument; compute its toplevel scope if
4316         it's not already computed.  Fixes #75649.
4317
4318 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
4319
4320         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
4321         CheckAttributeType and refactored.
4322         (Attribute.ResolvePossibleAttributeType): Changed to reuse
4323         ResolveAsTypeTerminal error handling.
4324         (ResolveAsTypeTerminal): Introduced because of global attributes extra
4325         handling.
4326         (GetSignatureForError): Print errors in same way.
4327
4328         * class.cs,
4329         * codegen.cs: Reflect attribute GetSignatureForError change.
4330
4331         * ecore.cs,
4332         * expression.cs: Add silent parameter to ResolveAsTypeStep.
4333
4334         * namespace.cs (UsingEntry): Refactored to make fields private.
4335
4336         * assign.cs,
4337         statement.cs: Error_UnexpectedKind has extra parameter.
4338
4339 2005-07-14  Raja R Harinath  <rharinath@novell.com>
4340
4341         * ecore.cs (IAlias): Remove.
4342         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
4343         that implement the interface.
4344         * namespace.cs (Namespace): Likewise.
4345         (Namespace.declspaces): Renamed from 'defined_names'.
4346         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
4347         DeclSpace instead of an IAlias.
4348         * tree.cs (Tree.AddDecl): Update.
4349
4350 2005-07-12  Raja R Harinath  <rharinath@novell.com>
4351
4352         * statement.cs (Block.Flags); Remove HasVarargs.
4353         (Block.HasVarargs): Move to ToplevelBlock.
4354         (Block.ThisVariable, Block.AddThisVariable): Likewise.
4355         (Block.Variables): Make protected.  Initialize variable hashtable
4356         if necessary.
4357         (Block.AddVariable): Update.
4358         (Block.Resolve): Update to changes.
4359         (ToplevelBlock.HasVarargs): New boolean.
4360         (ToplevelBlock.ThisVariable): Move here from Block.
4361         (ToplevelBlock.AddThisVariable): Likewise.
4362         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
4363         * expression.cs (This.ResolveBase): Update to changes.
4364         (ArglistAccess.DoResolve): Likewise.
4365
4366 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4367
4368         Fix #75321
4369         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
4370
4371         * class.cs (TypeContainer.VerifyMembers): Distinguish between
4372         not used and not used & assigned.
4373         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
4374
4375 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4376
4377         Fix #75053
4378         * expression.cs (Is.DoResolve): null is never provided type.
4379
4380 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
4381
4382         Fix #52496
4383         * cs-parser.jay: Less strict event error rule to catch more errors.
4384
4385 2005-07-11  Martin Baulig  <martin@ximian.com>
4386
4387         * generic.cs (ConstructedType.CheckConstraints): Improve the check
4388         for the constructor constraint: we do not only have to check
4389         whether the class has a public constructor, but also ensure that
4390         it's parameterless.  Fixes #75492.
4391
4392 2005-07-11  Martin Baulig  <martin@ximian.com>
4393
4394         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
4395         between type parameters if they either have the reference type
4396         constraint or the class constraint.
4397
4398 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
4399
4400         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
4401
4402 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
4403
4404         Fix #74975
4405         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
4406         (ExtractSecurityPermissionSet): Cope with self referencing security
4407         attributes properly.
4408
4409         * driver.cs (SetOutputFile): Made public property OutputFile.
4410
4411 2005-07-07  Raja R Harinath  <rharinath@novell.com>
4412
4413         Fix #75486.
4414         * class.cs (TypeContainer.first_nonstatic_field): Rename from
4415         has_nonstatic_fields.  Make into a FieldBase pointer.
4416         (TypeContainer.AddField): Add CS0282 check.
4417         (TypeContainer.EmitType): Update.
4418
4419 2005-07-06  Miguel de Icaza  <miguel@novell.com>
4420
4421         * cs-tokenizer.cs (consume_identifier): Do not create strings to
4422         compare if they start with __.
4423
4424 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4425
4426         * statement.cs (Switch.SwitchGoverningType): Only look at
4427         UserCasts that don't need implicit standard conversions to one of
4428         the allowed switch types (Fixes test-322.cs).
4429         (LocalInfo.Resolve): Re-enable sanity-test.
4430
4431 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
4432
4433         * cs-tokenizer.cs (consume_identifier): Detect double undescores
4434         
4435         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
4436         
4437         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
4438
4439 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4440
4441         Fix #75472.
4442         * ecore.cs (SimpleName.GetSignatureForError): Add.
4443         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
4444         (MemberAccess.GetSignatureForError): Add.
4445
4446 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
4447  
4448         The big error and warning messages review.
4449         
4450         * anonymous.cs,
4451         * assign.cs,
4452         * attribute.cs,
4453         * class.cs,
4454         * codegen.cs,
4455         * convert.cs,
4456         * cs-parser.jay,
4457         * cs-tokenizer.cs,
4458         * decl.cs,
4459         * delegate.cs,
4460         * doc.cs,
4461         * driver.cs,
4462         * ecore.cs,
4463         * enum.cs,
4464         * expression.cs,
4465         * flowanalysis.cs,
4466         * iterators.cs,
4467         * literal.cs,
4468         * location.cs,
4469         * modifiers.cs,
4470         * namespace.cs,
4471         * parameter.cs,
4472         * pending.cs,
4473         * report.cs,
4474         * rootcontext.cs,
4475         * statement.cs,
4476         * support.cs,
4477         * tree.cs,
4478         * typemanager.cs: Updated.
4479         
4480         * class.cs: (MethodCore.SetYields): Moved here to share.
4481         (PropertyMethod.Define): Moved iterator setup here.
4482         
4483         * iterators.cs: Add orig_method to have full access to parent
4484         container.
4485
4486 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4487
4488         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4489         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4490         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4491         variable of struct type.
4492         * expression.cs (Unary.ResolveOperator): Update to change.
4493         (Indirection.VerifyFixed): Likewise.
4494         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4495         (ParameterReference.VerifyFixed): Value parameters are fixed.
4496         (This.VerifyFixed): Treat 'this' as a value parameter.
4497         * statement.cs (LocalInfo.IsFixed): Remove.
4498
4499 2005-07-01  Martin Baulig  <martin@ximian.com>
4500
4501         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4502         `ec.EmitThis ()' to get the correct scope.
4503
4504 2005-07-01  Martin Baulig  <martin@ximian.com>
4505
4506         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4507         instance is a ParameterReference; fixes #75299.
4508
4509 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4510
4511         Fix #75412.
4512         * expression.cs (Indexers.map): Remove.
4513         (Indexers.Append): Filter out inaccessible setters and getters.
4514         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4515
4516         Fix #75283.
4517         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4518         Refactored from ...
4519         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4520         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4521         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4522         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4523
4524 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4525
4526         Fix #75322
4527         * class.cs (FieldBase.GetInitializerExpression): One more field
4528         for backup.
4529
4530 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4531
4532         * pending.cs: Do not define a proxy if the base method is virtual,
4533         it will be picked up by the runtime (bug 75270).
4534
4535 2005-07-08  Martin Baulig  <martin@ximian.com>
4536
4537         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4538         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4539
4540 2005-07-07  Martin Baulig  <martin@ximian.com>
4541
4542         * generic.cs (ConstructedType.CheckConstraint): Use
4543         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4544         called recursively; fixes #75329.
4545
4546 2005-07-06  Martin Baulig  <martin@ximian.com>
4547
4548         * generic.cs (TypeManager.InferTypeArguments): Added support for
4549         anonymous methods; fixes #75461.
4550
4551 2005-07-01  Martin Baulig  <martin@ximian.com>
4552
4553         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4554         `ec.EmitThis ()' to get the correct scope.
4555
4556 2005-07-01  Martin Baulig  <martin@ximian.com>
4557
4558         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4559         instance is `This'; fixes #75299.
4560
4561 2005-06-30  Martin Baulig  <martin@ximian.com>
4562
4563         * class.cs (Indexer): Implement IIteratorContainer; added support
4564         for iterators in indexers.
4565
4566         * codegen.cs
4567         (EmitContext.CurrentIterator): Make this a property, not a field.
4568
4569         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4570
4571 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4572
4573         * pending.cs: Do not define a proxy if the base method is virtual,
4574         it will be picked up by the runtime (bug 75270).
4575
4576 2005-06-28  Martin Baulig  <martin@ximian.com>
4577
4578         * cs-parser.jay (interface_method_declaration): Avoid a
4579         reduce/reduce conflict by moving some of the code into a separate
4580         `interface_method_declaration_body' rule; fixes #75368.
4581
4582 2005-06-28  Martin Baulig  <martin@ximian.com>
4583
4584         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4585         array check after the check for TypeBuilder's.
4586
4587 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4588
4589         * convert.cs (FindMostEncompassedType): Add two trivial special
4590         cases (number_of_types == 0 || number_of_types == 1).
4591         (FindMostEncompasingType): Likewise.
4592
4593 2005-06-17  Raja R Harinath  <rharinath@novell.com>
4594
4595         Some cleanups preparing for the fix of #75283.
4596         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
4597         error testing.
4598         (EventExpr.InstanceResolve): Likewise.
4599         (EventExpr.DoResolve): Remove redundant checks.
4600
4601 2005-06-08  Miguel de Icaza  <miguel@novell.com>
4602
4603         * class.cs: Small fix.
4604
4605 2005-06-08  Raja R Harinath  <rharinath@novell.com>
4606
4607         Fix #75160.
4608         * class.cs (GetPartialBases): Fix return value check of
4609         part.GetClassBases.
4610
4611 2005-06-07  Raja R Harinath  <rharinath@novell.com>
4612
4613         Ensure that partial classes are registered in their enclosing
4614         namespace.  Initial part of fix of #75160.
4615         * tree.cs (Tree.RecordDecl): Add new namespace argument.
4616         Register declspace with namespace here, not in
4617         DeclSpace.RecordDecl.
4618         * cs-parser.jay: Pass namespace to RecordDecl.
4619         * class.cs (PartialContainer.Create): Likewise.
4620         (ClassPart.DefineType): New sanity-check.  Throws an exception if
4621         called.
4622         * decl.cs (Declspace.RecordDecl): Remove.
4623         * namespace.cs (NamespaceEntry.DefineName): Remove.
4624
4625 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4626
4627         * rootcontext.cs: Reset TargetExt as well.
4628
4629 2005-06-03  Raja R Harinath  <rharinath@novell.com>
4630
4631         * ecore.cs (Expression.Resolve): Emit CS0654 error when
4632         -langversion:ISO-1.
4633
4634 2005-06-02  Raja R Harinath  <rharinath@novell.com>
4635
4636         Fix #75080, cs0119.cs.
4637         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
4638         of ...
4639         (Expression.Resolve): ... this.  Use it.  Remove bogus code
4640         allowing ExprClass.Type and ExprClass.Namespace for
4641         ResolveFlags.VariableOrValue.
4642         (Expression.Resolve) [1-argument variant]: Change default resolve
4643         flags based on language version.
4644         (Expression.Error_UnexpectedKind): Use a simple string array
4645         rather than an ArrayList.
4646         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
4647         not ExprClass.Type.
4648         (TypeOfVoid.DoResolve): Likewise.
4649         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
4650         flags argument -- it always has the same value.
4651
4652 2005-05-31  Raja R Harinath  <rharinath@novell.com>
4653
4654         Fix #75081.
4655         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
4656         Use it in the error message.
4657         * assign.cs, expression.cs, statement.cs: Update.
4658
4659 2005-05-30  Raja R Harinath  <rharinath@novell.com>
4660
4661         Fix #75088.
4662         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
4663         the "almostMatchedMember" case too.
4664         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
4665         that failed the accessibility checks to 'almost_match'.
4666
4667 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
4668
4669         * attribute.cs: Use internal MethodBuilder methods to set
4670         ExactSpelling and SetLastError on PInvoke methods, instead
4671         of passing them via charset.  Fixes #75060.
4672
4673 2005-05-27  Raja R Harinath  <rharinath@novell.com>
4674
4675         * parameter.cs (Parameter): Remove TODO comment.
4676         (Parameter.DefineParameter): Remove Location parameter.
4677         (Parameters.LabelParameters): Likewise.
4678         * class.cs (Constructor.Emit): Update to change.
4679         (MethodData.Emit): Likewise.
4680         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
4681         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
4682
4683 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
4684
4685         * parameter.cs,
4686           Removed Parameters.Location and added Parameter.Location instead.
4687           Removed Location parameter from Emit() and GetSignature().
4688         * anonymous.cs,
4689           class.cs,
4690           cs-parser.jay,
4691           delegate.cs,
4692           iterators.cs,
4693           statement.cs :
4694           Modified all related calls.
4695
4696 2005-06-21  Martin Baulig  <martin@ximian.com>
4697
4698         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
4699         left-hand side is not a nullable type; fixes #75328.
4700
4701 2005-06-21  Martin Baulig  <martin@ximian.com>
4702
4703         * typemanager.cs
4704         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
4705         (TypeManager.GetFullNameSignature): Likewise.
4706
4707         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
4708         `source.FullName' and `target.FullName' to check whether there are
4709         two conflicting definitions.
4710
4711 2005-06-21  Martin Baulig  <martin@ximian.com>
4712
4713         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
4714         a BoxedCast - also for reference types - to be compatible with csc.
4715
4716 2005-06-21  Martin Baulig  <martin@ximian.com>
4717
4718         * expression.cs (MemberAccess.DoResolve): Add support for nested
4719         types in a generic instance; fixes #75320.
4720
4721 2005-06-20  Martin Baulig  <martin@ximian.com>
4722
4723         * generic.cs (TypeManager.InferType): Also walk the class
4724         hierarchy for generic instances; fixes #75261.
4725
4726 2005-06-17  Martin Baulig  <martin@ximian.com>
4727
4728         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
4729         to make things work for corlib.
4730
4731 2005-06-15  Martin Baulig  <martin@ximian.com>
4732
4733         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
4734         obsolete `SecurityAction' values.
4735
4736 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4737
4738         * rootcontext.cs: Reset TargetExt as well.
4739         
4740 2005-06-09  Martin Baulig  <martin@ximian.com>
4741
4742         * delegate.cs (Delegate.VerifyMethod): Added
4743         `MethodGroupExpr old_mg' argument; inherit its
4744         `HasTypeParameters'; fix #75085.
4745
4746 2005-06-09  Martin Baulig  <martin@ximian.com>
4747
4748         * expression.cs (Invocation.OverloadResolve): Correctly handle
4749         generic methods for the SetMemberIsUsed(); fix #75064.
4750
4751 2005-06-09  Martin Baulig  <martin@ximian.com>
4752
4753         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
4754         fixes #75062.
4755
4756 2005-06-08  Martin Baulig  <martin@ximian.com>
4757
4758         * cs-parser.jay (nullable_type_or_conditional): If we put the
4759         nullable back and our `type' is a `ComposedCast', remove the
4760         nullable from it.  Fixes #75156.
4761
4762         * expression.cs (ComposedCast.RemoveNullable): New public method.
4763
4764 2005-06-08  Martin Baulig  <martin@ximian.com>
4765
4766         The big Iterators rewrite :-)
4767
4768         * iterators.cs: Rewrite this to use the anonymous methods framework.
4769
4770         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
4771         before the TypeContainers; see 2test-21.cs.
4772
4773         * class.cs
4774         (TypeContainer.DefineType): Don't create a new EmitContext if we
4775         already have one (this only happens if we're an Iterator).
4776         (TypeContainer.Define): Also call Define() on all our iterators.
4777         (Method.CreateEmitContext): Added support for iterators.
4778
4779         * anonymous.cs
4780         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
4781         (AnonymousContainer.CreateMethodHost): Moved here from
4782         AnonymousMethod and made abstract.
4783         (AnonymousContainer.CreateScopeType): New abstract method.
4784         (AnonymousContainer.IsIterator): New public property.
4785         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
4786         get the ScopeTypeBuilder rather than manually defining it here. 
4787         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
4788         iterators here.
4789
4790         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
4791         before RootContext.DefineTypes().
4792
4793         * codegen.cs (EmitContext.RemapToProxy): Removed.
4794         (EmitContext.CurrentAnonymousMethod): Changed type from
4795         AnonymousMethod -> AnonymousContainer.
4796         (EmitContext.ResolveTopBlock): Protect from being called twice.
4797         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
4798         (EmitContext.EmitThis): Removed the iterators hacks; use the
4799         anonymous methods framework for that.
4800
4801         * statement.cs
4802         (ToplevelBlock.Container): Make this a property, not a field.
4803         (ToplevelBlock.ReParent): New public method; move the
4804         ToplevelBlock into a new container.
4805         (Foreach.TemporaryVariable): Simplify.
4806
4807 2005-06-05  Martin Baulig  <martin@ximian.com>
4808
4809         * statement.cs (LocalInfo.CompilerGenerated): New flag.
4810         (Block.AddTemporaryVariable): New public method; creates a new
4811         `LocalInfo' for a temporary variable.
4812         (Block.EmitMeta): Create the LocalBuilders for all the temporary
4813         variables here.
4814         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
4815         non-iterator variables.
4816
4817 2005-06-05  Martin Baulig  <martin@ximian.com>
4818
4819         * statement.cs (Foreach.TemporaryVariable): Create the
4820         LocalBuilder in the Emit phase and not in Resolve since in some
4821         situations, we don't have an ILGenerator during Resolve; see
4822         2test-19.cs for an example.
4823
4824 2005-06-04  Martin Baulig  <martin@ximian.com>
4825
4826         The big Foreach rewrite - Part II.
4827
4828         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
4829         with `PropertyInfo ienumerator_getcurrent'.
4830
4831         * codegen.cs (VariableStorage): Removed.
4832
4833         * statement.cs
4834         (Foreach): Derive from Statement, not ExceptionStatement.
4835         (Foreach.CollectionForeach): New nested class.  Moved all the code
4836         dealing with collection foreach here.
4837         (Foreach.ForeachHelperMethods): Removed.
4838         (Foreach.TemporaryVariable): Implement IMemoryLocation.
4839
4840 2005-05-23  Martin Baulig  <martin@ximian.com>
4841
4842         * statement.cs (Try.DoResolve): Don't create a `finally' if we
4843         don't need to.  Fix #75014.
4844
4845 2005-05-26  Raja R Harinath  <rharinath@novell.com>
4846
4847         Improve user-defined conversion handling.
4848         * convert.cs (GetConversionOperators): Rewrite.  Return only the
4849         applicable operators.
4850         (AddConversionOperators): New.  Helper for GetConversionOperators.
4851         (FindMostEncompassedType, FindMostEncompassingType): Verify that
4852         there is only one most encompassed/encompassing type.
4853         (FindMostSpecificSource, FindMostSpecificTarget): Remove
4854         "applicable operator" handling.
4855         (UserConversion): Move cache here from GetConversionOperators.
4856         Directly cache the chosen operator, rather than the whole
4857         MethodGroup.
4858         (ExplicitNumericConversion): Fix buggy implementation of Decimal
4859         case.  Allow conversion of decimal to sbyte and byte too.
4860         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4861         New static methods.  Used to avoid allocating EmptyExpressions in
4862         convert.cs.
4863
4864 2005-05-24  Duncan Mak  <duncan@novell.com>
4865
4866         * ecore.cs (CastFromDecimal): New class for casting a decimal to
4867         another class, used in Convert.ExplicitNumericConversion.
4868         (CastToDecimal): New class, similar to above, but casts to
4869         System.Decimal, used in Convert.ImplicitNumericConversion and also
4870         in explicit convesion from double/float to decimal.
4871
4872         * convert.cs (ImplicitNumericConversion): Handle implicit
4873         conversions to System.Decimal.
4874         (ExplicitNumericConversion): handle explicit conversions to
4875         System.Decimal.
4876
4877         This fixes #68711.
4878         
4879 2005-05-20  Miguel de Icaza  <miguel@novell.com>
4880
4881         * typemanager.cs: Do not throw an exception in the TypeBuilder
4882         case, we take care of it on the TypeCode.
4883
4884 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
4885         
4886         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
4887         is back.
4888         
4889         * cs-parser.jay: Catch more lexical errors.
4890         
4891         * report.cs: Add one more Error method.
4892         
4893         * rootcontext.cs,
4894         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
4895
4896 2005-05-20  Martin Baulig  <martin@ximian.com>
4897
4898         * class.cs (TypeContainer.CircularDepException): Removed.
4899         (TypeContainer.DefineType): Removed the `InTransit' stuff.
4900         (TypeContainer.CheckRecursiveDefinition): Check for circular class
4901         (CS0146) and interface (CS0529) dependencies here.
4902
4903 2005-05-20  Martin Baulig  <martin@ximian.com>
4904
4905         * expression.cs (New.DoResolve): Move the CS0712 check above the
4906         CS0144 check; otherwise it can never be reached.
4907
4908 2005-05-20  Martin Baulig  <martin@ximian.com>
4909
4910         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
4911
4912 2005-05-20  Martin Baulig  <martin@ximian.com>
4913
4914         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
4915
4916         * typemanager.cs (TypeManager.IsAttributeType): New public method.
4917
4918 2005-05-19  Martin Baulig  <martin@ximian.com>
4919
4920         * delegate.cs
4921         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
4922         to disable error reporting.
4923
4924         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
4925         here since we don't want to report an error; see the new test-336.cs.
4926
4927 2005-05-19  Raja R Harinath  <rharinath@novell.com>
4928
4929         * statement.cs (ToplevelBlock.GetParameterReference)
4930         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
4931         Move here from class Block.
4932         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
4933         * expression.cs (ParameterReference.DoResolveBase): Likewise.
4934
4935 2005-05-18  Martin Baulig  <martin@ximian.com>
4936
4937         Fix #74978.
4938
4939         * flowanalysis.cs
4940         (FlowBranching.Reachability): Add non-static public And() and Or()
4941         methods.
4942         (FlowBranchingSwitch): New class; do the `break_origins' thing
4943         like in FlowBranchingLoop.
4944         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
4945         reachability, not just locals and parameters.
4946         (FlowBranching.MergeChild): Remove some of the hacks for loop and
4947         switch; MergeBreakOrigins() now takes care of that.
4948
4949 2005-05-18  Martin Baulig  <martin@ximian.com>
4950
4951         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4952         a loop and may leave it, reset the barrier; fixes #74974.
4953
4954 2005-05-16  Raja R Harinath  <rharinath@novell.com>
4955
4956         Fix test-382.cs.  Emit values of decimal constants.
4957         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
4958         Carved out of ...
4959         (TypeContainer.AddField): ... this.
4960         (TypeContainer.EmitFieldInitializers): Allow the list of fields
4961         with initializers to include 'Const's.
4962         (ClassPart.RegisterFieldForInitialization): Forward to
4963         PartialContainer.
4964         * const.cs (Const.Const): Pass initializer to base class.
4965         (Const.Define): In case of decimal constants, register them for
4966         initialization in a static constructor.
4967
4968 2005-05-14  Martin Baulig  <martin@ximian.com>
4969
4970         * statement.cs (Block.Resolve): Correctly handle unreachable code;
4971         do not call ResolveUnreachable() on unreachable statements in
4972         here, see the comment in the source code.
4973
4974 2005-05-13  Raja R Harinath  <rharinath@novell.com>
4975
4976         Fix #74934.
4977         * expression.cs (BinaryResolveOperator): If one of the operands of
4978         an equality comparison is 'null' and the other is a pointer type,
4979         convert the null to a NullPointer.
4980         * convert.cs (ImplicitReferenceConversion): If the expression is a
4981         NullLiteral and the target type is a pointer type, return a
4982         NullPointer instead.
4983         (ImplicitConversionStandard): Likewise.
4984
4985 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
4986         
4987         * cs-parser.jay: Set readonly context based on special constructs.
4988         
4989         * expression.cs (LocalVariableReference.DoResolveBase): Improved
4990         readonly variable error handling.
4991         
4992         * rootcontext.cs (EmitCode): Don't verify members when error
4993         occurred.
4994         
4995         * statement.cs (LocalInfo): Add reaodnly context information.
4996         (SetReadOnlyContext, GetReadOnlyContext): New methods.
4997
4998 2005-05-17  Martin Baulig  <martin@ximian.com>
4999
5000         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
5001         #70970. 
5002
5003 2005-05-13  Martin Baulig  <martin@ximian.com>
5004
5005         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
5006         handle unreachable blocks.
5007
5008 2005-05-13  Martin Baulig  <martin@ximian.com>
5009
5010         * class.cs
5011         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
5012         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
5013         #74905. 
5014
5015 2005-05-13  Martin Baulig  <martin@ximian.com>
5016
5017         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
5018         instance variable, not a local.  Fix #74873.
5019         (Block.ResolveUnreachable): Set it to true here.
5020
5021 2005-05-12  Martin Baulig  <martin@ximian.com>
5022
5023         * cs-parser.jay (property_declaration): Pass the `current_class',
5024         not the `current_container' to Property's .ctor.  Fixes #74912.
5025
5026 2005-05-11  Martin Baulig  <martin@ximian.com>
5027
5028         * typemanager.cs (Closure): Copy this from MCS and merge all the
5029         GMCS-specific changes into it.
5030
5031 2005-05-12  Raja R Harinath  <harinath@gmail.com>
5032
5033         Fix #74920.
5034         * typemanager.cs (unmanaged_enclosing_types): New.
5035         (IsUnmanagedType): Avoid infloops by using
5036         'unmanaged_enclosing_types' to talk with recursive invocations.
5037
5038 2005-05-11  Duncan Mak  <duncan@novell.com>
5039
5040         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
5041         continuing to process for 'arg'.
5042         (handle_preprocessing_directive): Check the argument of the #endif
5043         directive and report error CS1025 if there are any trailing
5044         characters.
5045
5046         According to the C# spec, having even whitespace after the #endif
5047         directive is illegal; however, because we call arg.TrimEnd ()
5048         beforehand, we have the same behavior as csc, allowing whitespace
5049         after the directive.
5050
5051         Fixes #74892.
5052
5053 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
5054
5055         Fix #74863.
5056         
5057         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
5058         (Constructor.GetObsoleteAttribute): Implemented correctly.
5059
5060 2005-05-10  Martin Baulig  <martin@ximian.com>
5061
5062         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
5063         resolve the type; fixes #74864.
5064         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
5065         in DoResolve(); fixes #74862.
5066
5067 2005-05-10  Martin Baulig  <martin@ximian.com>
5068
5069         * support.cs (ReflectionParameters.ParameterModifier): Use
5070         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
5071         and `ParameterAttributes.In'.  Fixes #74884.
5072
5073 2005-05-10  Martin Baulig  <martin@ximian.com>
5074
5075         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
5076         the cache if we're just looking for `MemberTypes.NestedType' in a
5077         generic instance.
5078
5079         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
5080         constraints if we're still resolving the type tree.
5081         (Expression.MemberLookup): If we're resolving the type tree, only
5082         look for `MemberTypes.NestedType' since we're only interested in
5083         getting types.
5084
5085         * class.cs (TypeContainer.DefineType): Don't resolve the type
5086         parameters here; do this later in ResolveType() after the type
5087         tree has been resolved.
5088         (TypeContainer.ResolveType): New public method; this is called
5089         after the type tree is resolved and before the types are being
5090         populated.  We resolve the generic constraints here.
5091         (TypeContainer.DoDefineMember): Check the constraints on our base
5092         class and interfaces.
5093
5094         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
5095         set the `ResolvingTypeTree' flag on the EmitContext.
5096
5097         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
5098
5099 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
5100
5101         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
5102         
5103         * expression.cs (Argument.GetParameterModifier): Turned to property.
5104         (Invocation.Error_InvalidArguments): Add more descriptive errors.
5105         
5106         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
5107         its C# equivalent.
5108         
5109 2005-05-09  Raja R Harinath  <rharinath@novell.com>
5110
5111         Fix #74852.
5112         * decl.cs (MemberCache.AddMethods): Register override methods,
5113         rather than non-override methods.
5114         * typemanager.cs (RegisterOverride): New.
5115         (IsOverride): Update.
5116
5117 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5118
5119         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
5120
5121 2005-05-06  Martin Baulig  <martin@ximian.com>
5122
5123         * attribute.cs
5124         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
5125         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
5126
5127 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5128
5129         Fix #73105.
5130         
5131         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
5132         recursive declaration.
5133         
5134         * statement.cs (Block.ResolveMeta): Report any error in resolving.
5135         
5136 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
5137
5138         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
5139         
5140         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
5141
5142 2005-05-05  Raja R Harinath  <rharinath@novell.com>
5143
5144         Fix #74797.
5145         * decl.cs (DeclSpace.FamilyAccessible): 
5146         Use TypeManager.IsNestedFamilyAccessible.
5147
5148         Fix reopened #64812.
5149         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
5150         internal'.
5151
5152 2005-05-04  Raja R Harinath  <rharinath@novell.com>
5153             Abin Thomas  <projectmonokochi@rediffmail.com>
5154             Anoob V E  <projectmonokochi@rediffmail.com>
5155             Harilal P R  <projectmonokochi@rediffmail.com>
5156
5157         Fix #64812.
5158         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
5159         allow access to all static members.
5160
5161 2005-05-04  Martin Baulig  <martin@ximian.com>
5162
5163         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
5164
5165 2005-05-04  Martin Baulig  <martin@ximian.com>
5166
5167         Fix #74655.
5168
5169         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
5170         section at the end; make things work if `default' is not the last
5171         section.        
5172
5173 2005-05-04  Martin Baulig  <martin@ximian.com>
5174
5175         Fix #70400.
5176
5177         * statement.cs (Switch): Replaced the `got_default' field with a
5178         `default_section' one.
5179         (Switch.CheckSwitch): Set `default_section' here.
5180         (Switch.Resolve): If we're a constant switch and the constant is
5181         not found, use the default section.
5182
5183 2005-05-03  Martin Baulig  <martin@ximian.com>
5184
5185         * expression.cs (ArrayAccess.EmitGetLength): New public method.
5186
5187         * statement.cs (Foreach.ArrayForeach): New nested class.
5188         (Foreach.TemporaryVariable): New nested class.
5189         (Foreach.EmitArrayForeach): Removed; this is now in the new
5190         ArrayForeach class.
5191
5192 2005-05-03  Raja R Harinath  <rharinath@novell.com>
5193
5194         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
5195         more conservative.
5196         (VerifyPendingMethods): Revert change below.
5197
5198         * typemanager.cs (IsOverride, RegisterNonOverride): New.
5199         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
5200         that used to trigger warning -28.  Remove warning -28.
5201         * expression.cs (Invocation.OverloadResolve): Use
5202         TypeManager.IsOverride to distinguish override methods.
5203
5204         Fix #74773.
5205         * pending.cs (VerifyPendingMethods): If a base type implements the
5206         requested interface, don't bother checking individual methods of
5207         the base type.  As a side-effect, this prevents the creation of
5208         unnecessary proxies.
5209
5210 2005-05-02  Martin Baulig  <martin@ximian.com>
5211
5212         Fix #70182.
5213
5214         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
5215         Also `And' the locals if the old vector is null.
5216         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
5217         null; in this case we basically reset all the variables.        
5218
5219 2005-05-02  Martin Baulig  <martin@ximian.com>
5220
5221         Fix #74529.
5222
5223         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
5224         Added `FlowBranching branching' argument; always `and' the
5225         variables instead of `or'ing them unless we're an infinite loop.
5226
5227         * statement.cs (While.Resolve): Create a new sibling unless we're
5228         infinite.       
5229
5230 2005-05-02  Martin Baulig  <martin@ximian.com>
5231
5232         Fix #70140.
5233
5234         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
5235         arguments; use it instead of creating a new TopLevelBlock.
5236         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
5237         our ConstructorInitializer.
5238
5239         * statement.cs
5240         (TopLevelBlock.TopLevelBranching): New public property.
5241         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
5242         and create our `TopLevelBranching'.
5243
5244         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
5245         anonymous method host, use `block.TopLevelBranching' rather than
5246         creating a new branching.
5247
5248 2005-04-20  Miguel de Icaza  <miguel@novell.com>
5249
5250         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
5251         a ScopeInfo, if any of the current children is a child of the new
5252         entry, move those children there.
5253
5254 2005-04-30  Martin Baulig  <martin@ximian.com>
5255
5256         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
5257         at the beginning of a SwitchSection.  Fix #73335.
5258
5259 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
5260
5261         Fix #74378
5262         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
5263         
5264         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
5265         (FieldExpr.DoResolve): Obsolete members are ignored for field
5266         initializers.
5267         
5268 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
5269
5270         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
5271         of arrays detection.
5272
5273         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
5274         verification.
5275         (Field.VerifyClsCompliance): Volatile fields are not compliant.
5276
5277         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
5278         arrays report.
5279
5280 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
5281
5282         * cs-parser.jay: Use the prefered version of -unsafe in error
5283         message.
5284
5285 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
5286
5287         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
5288         circumstances.
5289
5290 2005-04-20  John Luke  <john.luke@gmail.com>
5291
5292         * driver.cs: fix typo in error message, --outout to --output
5293
5294 2005-04-30  Martin Baulig  <martin@ximian.com>
5295
5296         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
5297         handle the .NET 2.x security attributes.
5298
5299 2005-04-30  Martin Baulig  <martin@ximian.com>
5300
5301         * typemanager.cs
5302         (TypeManager.ExpandInterfaces): Don't add things twice.
5303
5304         * class.cs
5305         (TypeContainer.VerifyClsCompliance): Allow generic instances.
5306
5307 2005-04-29  Martin Baulig  <martin@ximian.com>
5308
5309         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
5310
5311         * anonymous.cs: Added support for anonymous generic methods.
5312
5313 2005-04-29  Martin Baulig  <martin@ximian.com>
5314
5315         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
5316         generic instances.
5317
5318 2005-04-29  Martin Baulig  <martin@ximian.com>
5319
5320         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
5321
5322         * expression.cs (New.DoResolve): Fix the CS0304 check.
5323
5324 2005-04-29  Martin Baulig  <martin@ximian.com>
5325
5326         * typemanager.cs (TypeManager.GetFullName): Updated to the new
5327         naming schema.
5328
5329         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
5330         explicit interface implementation, compare the interface types.
5331         (MethodData.Define): Use the new naming scheme from the latest
5332         .NET 2.x beta2.
5333         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
5334
5335         * decl.cs (MemberName.GetMemberName): Removed.
5336         (MemberName.MethodName, FullName): New properties.
5337
5338 2005-04-25  Raja R Harinath  <rharinath@novell.com>
5339
5340         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
5341
5342 2005-04-22  Martin Baulig  <martin@ximian.com>
5343
5344         * generic.cs (GenericMethod): Create the EmitContext in the
5345         `Define()'; in `Define(MethodBuilder)', create the type parameters
5346         before calling `Define()'.  Fixes #73933.
5347
5348 2005-04-22  Martin Baulig  <martin@ximian.com>
5349
5350         * generic.cs
5351         (Constraints.Resolve): Make things work wrt. the new type lookup system.
5352         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
5353
5354         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
5355         ConstructedType, check its constraints.
5356
5357 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
5358
5359         * codegen.cs (InRefOutArgumentResolving): New field.
5360         
5361         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
5362         fields outside contructor.
5363         
5364         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
5365         
5366 2005-04-19  Miguel de Icaza  <miguel@novell.com>
5367
5368         * anonymous.cs (CaptureContext.EmitParameterInstance): The
5369         parameter code was not completed ever, so it was not as up-to-date
5370         as local variables.  Must finish it.
5371
5372         The bug fix was to compare the Toplevel of the block, not the
5373         current block.  Thanks for Ben for pointing this out. 
5374
5375 2005-04-19  Raja R Harinath  <rharinath@novell.com>
5376
5377         * decl.cs (AddMethods): Use the declaring type of the problem
5378         method to determine if we want to squash a warning.
5379
5380 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
5381
5382         * attribute.cs: Removed debug output.
5383
5384         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
5385         
5386         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
5387         Report.Stderr.
5388         
5389 2005-04-18  Raja R Harinath  <rharinath@novell.com>
5390
5391         Fix #74481.
5392         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
5393         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
5394         all null comparisons against reference types.
5395
5396 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
5397
5398         Fix# 74565
5399         * class.cs (TypeContainer.CircularDepException) New nested
5400         exception class.
5401         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
5402         (TypeContainer.DefineType): Removed error, reset InTransit before
5403         exit.
5404         (Class.DefineType): Throw exception when is in Transit.
5405         Catch exception and report error.
5406         (Struct.DefineType): Throw exception when is in Transit.
5407         Catch exception and report error.
5408         (Interface.DefineType): Throw exception when is in Transit.
5409         Catch exception and report error.
5410
5411         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
5412         handle nested exception handlers.
5413
5414         * flowanalysis.cs (InTryWithCatch): New method, search for try with
5415         a catch.
5416
5417         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
5418         InFinally and InCatch storage.
5419
5420         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
5421         (Catch.Resolve): Set and Restore ec.InCatch.
5422         (Try.Resolve): Set and Restore ec.InFinally.
5423         (Try.HasCatch): True when try has catch.
5424
5425 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
5426
5427         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
5428           for the same event member, so exclude such cases from warning 419.
5429           Fixed bug #74633.
5430
5431 2005-04-16  Miguel de Icaza  <miguel@novell.com>
5432
5433         * expression.cs (Binary.ResolveOperator): Apply patch from John
5434         Luke to fix bug 59864: operators &, | and ^ on enumerations
5435         require that the same enum type on both sides.
5436
5437         * driver.cs: Add warnings to old flag usage, this is to assist
5438         people who produce Makefiles and hope that the Makefiles will be
5439         used on Windows.
5440
5441         * class.cs (TypeContainer.EmitType): Moved the definition of the
5442         special $PRIVATE$ field from the resolve phase to the Emit phase.
5443         During resolve we do not know if we are a struct with
5444         HasExplicitLayout, we know this only after the attributes for the
5445         type are emitted.
5446
5447         Set the FieldOffset to zero on the dummy field that we create for
5448         the class.   Fixes 74590.
5449
5450 2005-04-16  Raja R Harinath  <rharinath@novell.com>
5451
5452         Fix #73834.
5453         * ecore.cs (PropertyExpr.resolved): New.
5454         (DoResolve): Use it to handle a case of double resolution here.
5455         Handle a case of identical-name-and-type-name.
5456         * expression.cs (ArrayCreation.CheckIndices): Avoid double
5457         resolution by storing the results of expression resolution back
5458         into the "probes" array.
5459
5460 2005-04-15  Raja R Harinath  <rharinath@novell.com>
5461
5462         Fix cs0208-7.cs and cs0208-8.cs.
5463         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5464         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5465         error reporting to point out the reason a struct is not unmanaged.
5466
5467 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5468
5469         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5470           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5471
5472 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5473
5474         Fix #74528.
5475         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5476         IdenticalNameAndTypeName here.
5477         (EventExpr.InstanceResolve): Likewise.
5478
5479 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5480
5481         C# 2.0 DefaultCharSetAttribute implementation
5482         
5483         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5484         which allows us to set GlobalNamespace for every resolve.
5485         (Attribute.ResolveArguments): Cut from Resolve.
5486         (Attribute.GetCharSetValue): Returns CharSet named argument.
5487         (Attribute.DefinePInvokeMethod): Gets default charset from
5488         module settings.
5489         (GlobalAttribute.ResolveAsTypeStep): Override.
5490         (GlobalAttribute.ResolveArguments): Override.
5491         
5492         * class.cs (TypeAttr): Is protected.
5493         
5494         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5495         (ModuleClass.DefaultCharSetType): New memeber.
5496         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5497         
5498         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5499         charset from module.
5500         
5501         * delegate.cs (TypeAttr): Override.
5502         (Delegate.DefineType): Use this TypeAttr.
5503         
5504         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5505         at very early stage (before types are defined) to resolve model
5506         module attributes. It will probably not work with corlib but it
5507         should be ok.
5508         
5509         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5510         charset from module.
5511         
5512         * typemanager.cs (default_charset_type): New type.
5513
5514 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5515
5516         * decl.cs (MemberCache.AddMethods): Don't warn if
5517         System.Object.Finalize has buggy MethodAttributes.
5518
5519         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5520         removed below.
5521
5522 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5523
5524         * doc.cs : detect ambiguous reference to overloaded members.
5525           Fixed bug #71603. MS 1.1 csc does not detect it.
5526
5527 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5528
5529         * doc.cs : delegates must not be referenced with parameters.
5530           Fixed bug #71605.
5531
5532 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5533
5534         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5535
5536 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5537
5538         * driver.cs (MainDriver): Stop processing if the CLS stage found
5539         errors. 
5540
5541         (CompilerCallableEntryPoint.InvokeCompiler): Always
5542         reset after execution;   Take a TextWriter argument for the
5543         output.
5544
5545         * report.cs: Use the error stream instead of hardcoding stderr. 
5546
5547 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5548
5549         * class.cs: Reduce code paths to test, too small of an
5550         optimization to make it worth the extra testing.  Always perform
5551         it. 
5552
5553 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5554
5555         Fix #74510.
5556         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5557         operators that had errors reported on them.
5558
5559 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5560
5561         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5562         argument types.
5563         (Attribute.Resolve): Add named argument type checking.
5564         
5565         * class.cs (FixedField.Define): Use IsPrimitiveType
5566         
5567         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5568         
5569         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5570         unsafe parameter types.
5571         
5572         * statement.cs (Using.ResolveExpression): Add better error description.
5573         
5574         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5575         
5576 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5577
5578         Fix #74484.
5579         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5580         AttributeUsageAttribute in the emitcontext of the attribute class,
5581         not in the emitcontext of the attributable entity it was attached to.
5582         * cs-parser.jay: Use 'current_class', not 'current_container',
5583         when creating a GlobalAttribute.
5584
5585 2005-04-08  Alp Toker  <alp@atoker.com>
5586
5587         * pending.cs: The fix to #58413 failed to compile methods implementing
5588         interfaces with/without params modifiers and vice versa, even though
5589         params modifiers aren't part of the signature. Make the modifier check
5590         less strict as in csc.
5591
5592 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
5593             Anoob V E  <projectmonokochi@rediffmail.com>
5594             Harilal P R  <projectmonokochi@rediffmail.com>
5595
5596         Fix #58413.
5597         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
5598         modifiers of pending methods.
5599         (PendingImplementation.PendingImplementation): Initialize it.
5600         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
5601         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
5602         with ParameterData.  Add check for modifiers.
5603         * class.cs (MethodData.Define): Update to changes.
5604
5605 2005-04-07  Raja R Harinath  <rharinath@novell.com>
5606
5607         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
5608
5609 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
5610
5611         * class.cs (PropertyMethod.Define): Check private accessor in abstract
5612         property.
5613         
5614         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
5615         
5616         * rootcontext.cs,
5617         * typemanager.cs: Registered RequiredAttributeAttribute.
5618         
5619 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
5620
5621         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
5622         Warning CS0169 is back at level 3.
5623         (IMethodData.SetMemberIsUsed): New method.
5624         
5625         * decl.cs (IsUsed): New value; moved from FieldBase.Status
5626         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
5627         
5628         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
5629
5630         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
5631         contants.
5632         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
5633         is used.
5634         
5635         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
5636         is used.
5637         
5638         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
5639         to avoid the problems with nested types.
5640
5641 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
5642             Anoob V.E  <projectmonokochi@rediffmail.com>
5643             Harilal P.R  <projectmonokochi@rediffmail.com>
5644             Raja R Harinath  <rharinath@novell.com>
5645
5646         Fix #73820.
5647         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
5648         attribute.
5649         * typemanager (GetConstructor): Make public.
5650
5651 2005-04-05  John Luke  <john.luke@gmail.com>
5652             Raja R Harinath  <rharinath@novell.com>
5653
5654         Fix #62232.
5655         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
5656         struct too.  Return false quicker in a few cases.
5657         (VerifyUnManaged): Use it.
5658
5659 2005-04-05  Raja R Harinath  <rharinath@novell.com>
5660
5661         Fix #74041.
5662         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
5663         not 'unreachable_seen'.
5664
5665 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
5666
5667         * attribute.cs (Attribute.GetValue): Removed unused.
5668         
5669         * codegen.cs (CodeGen.TrimExt): Removed unused.
5670         
5671         * cs-parser.jay (output): Removed unused.
5672         
5673         * cs-tokenizer.cs (hex_digits): Removed unused.
5674         
5675         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
5676         
5677         * expression.cs (Indirection.LoadExprValue): Removed unused.
5678         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
5679         
5680         * iterators.cs (Iterator.param_types): Removed unused.
5681         
5682         * statement.cs (Goto.block): Removed unused.
5683         (ToplevelBlock.did): Removed unused.
5684         (Switch.ResolveConstantSwitch): Removed unused.
5685
5686 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
5687
5688         * rootcontext.cs: Allow mcs to bootstrap with the compilation
5689         resetting thingy.
5690
5691 2005-04-19  Martin Baulig  <martin@ximian.com>
5692
5693         Merged r42462 from MCS and made it work for GMCS.
5694
5695         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
5696
5697         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
5698
5699 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5700
5701         Fix #74232 and cs0208-3.cs.
5702         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
5703         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
5704         unmanaged type.  Don't use FieldBuilders when 't' is a
5705         TypeBuilder.  Use ModFlags and MemberType fields.
5706         * class.cs (MemberBase.member_type): Rename from MemberType.
5707         (MemberBase.MemberType): New property.  Determines member_type on
5708         demand.
5709         (MemberBase.DoDefine): Don't initialize MemberType here.
5710         (FieldMember.Define): Likewise.
5711
5712 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
5713
5714         Fix #74241
5715         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
5716         Attributes are emitted there.
5717         
5718 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5719
5720         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
5721         keyword in 'partial enum' too.
5722         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
5723         is not allowed).
5724         Report from Kamil Skalski <nazgul@omega.pl>.
5725
5726         Fix #74309.
5727         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
5728         have partial containers too.
5729
5730         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
5731         in block' checks to Block.CheckInvariantMeaningInBlock.
5732         * statement.cs (Block.GetKnownVariableInfo): Make private.
5733         (Block.IsVariableUsedInChildBlock): Remove.
5734         (Block.IsVariableUsedInBlock): Likewise.
5735         (Block.CheckInvariantMeaningInBlock): New.  Show location of
5736         conflicting declaration.
5737         (Block.AddVariable): Make error messages less long-winded and more
5738         specific.  Show location of conflicting declaration.
5739         * parameter.cs (Parameters.Location): New readonly property.
5740
5741 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5742
5743         Clean up semantics of invoking ResolveMemberAccess.
5744         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
5745         can have an instance, ensure that we pass in a non-TypeExpression
5746         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
5747         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
5748         argument.  Update to changes and simplify.
5749         (FieldExpr.Emitinstance): Remove CS0120 check.
5750         (PropertyExpr.EmitInstance): Likewise.
5751         * expression.cs (Argument.Resolve): Likewise.
5752         (Invocation.DoResolve): Update to changes in semantics of
5753         InstanceExpression.
5754
5755 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
5756
5757         Fix #74241
5758         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
5759         customization.
5760         
5761         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
5762
5763 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5764
5765         Fix difference in behaviour with commandline invocation.
5766         * driver.cs (Driver.Reset): New.
5767         (CompilerCallableEntryPoint): Call it.
5768
5769         * statement.cs (If.Resolve): Avoid spurious "uninitialized
5770         variable" warnings if the boolean expression failed to resolve.
5771
5772 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
5773
5774         * attribute.cs: Fix the union of several permissions when some of them
5775         are unrestricted (so the result isn't an unrestricted permission set).
5776         Fix #74036.
5777
5778 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5779
5780         * ecore.cs (MemberExpr): New class.  Convert from interface
5781         IMemberExpr.
5782         (MemberExpr.ResolveMemberAccess): Refactor and move here from
5783         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
5784         error checks.
5785         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
5786         (MethodGroupExpr.IsExplicitImpl): Remove.
5787         (Expression.GetFieldFromEvent): Remove.
5788         (SimpleName.MemberStaticCheck): Remove.
5789         (SimpleName.DoSimpleNameResolve): Update to changes.
5790         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
5791         (MemberAccess.IdenticalNameAndTypeName): Remove.
5792         (MemberAccess.error176): Move to MemberExpr.
5793         (MemberAccess.DoResolve): Update to changes.
5794         (BaseAccess.DoResolve): Likewise.
5795
5796 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
5797
5798         C# 2.0 Conditional attribute class implementation
5799         
5800         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
5801         Analyzes class whether it has attribute which has ConditionalAttribute
5802         and its condition is not defined.
5803         
5804         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
5805         (Class.IsExcluded): New method. Search for at least one defined
5806         condition in ConditionalAttribute of attribute class.
5807
5808 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5809
5810         * ecore.cs (PropertyExpr): Derive from Expression, not
5811         ExpressionStatement.
5812         (PropertyExpr.EmitStatement): Remove.
5813
5814 2005-03-29  Raja R Harinath  <rharinath@novell.com>
5815
5816         Fix #74060.
5817         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
5818         internal field "value__" of an enum be private.  The examples for
5819         "value__" that I found on MSDN all used FieldAttributes.Private.
5820
5821         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
5822         Don't mention IL method attribute names.
5823
5824         Fix #47991.  Remove a TODO.
5825         * statement.cs (Block.Toplevel): Make into a field.
5826         (Block.Parameters): Move into ToplevelBlock.
5827         (Block.known_variables): Rename from child_variable_names.
5828         (Block.Block): Remove variants that take Parameters.  Initialize
5829         'Toplevel' with the immediately surrounding toplevel block.
5830         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
5831         LocalInfo parameter.
5832         (Block.GetKnownVariableInfo): New.
5833         (Block.IsVariableNameUsedInChildBlock): Update.
5834         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
5835         the block, even though it may not be in scope.
5836         (Block.AddVariable): Remove Parameters parameter.  Use
5837         Toplevel.Parameters instead.
5838         (Block.AddConstant): Remove Parameters parameter.
5839         (Block.GetParameterReference): Update to use Toplevel.Parameters.
5840         (Block.IsParamaterReference): Likewise.
5841         (Block.IsLocalParameter): Likewise.  Simplify a lot.
5842         (ToplevelBlock.Parameters): New.  Moved from Block.
5843         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
5844         initialize Parameters to a non-null value.
5845         * cs-parser.jay: Update to changes.
5846         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
5847         simple names that mean different things in the same block.  Use
5848         Block.IsVariableNameUsedInBlock.
5849
5850 2005-03-28  Raja R Harinath  <rharinath@novell.com>
5851
5852         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
5853
5854 2005-03-26  Raja R Harinath  <harinath@acm.org>
5855
5856         Fix #73038.
5857         * assign.cs (Assign.DoResolve): When the RHS of an assignment
5858         fails to resolve, ensure that the LHS is still resolved as an
5859         lvalue.
5860
5861 2005-03-25  Raja R Harinath  <harinath@acm.org>
5862
5863         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
5864         ec.ContainerType.
5865         (Enum.current_ec): Remove.
5866         (Enum.LookupEnumValue): Remove EmitContext argument.
5867         Just uses the one created during DefineType.
5868         (Enum.FindMembers): Update.
5869         * expression.cs (MemberAccess.DoResolve): Update.
5870
5871 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
5872
5873         * assign.cs (Assign.DoResolve): Check for CS1717 when
5874         source and target are same (uses Equals).
5875
5876         * expression.cs (LocalVariableReference, ParameterReference,
5877         This): Implemented Equals, GetHashCode.
5878
5879         * statement.cs (Block.GetParameterReference): Removed useless
5880         local variable.
5881
5882 2005-03-22  Raja R Harinath  <rharinath@novell.com>
5883
5884         Fix cs0128.cs
5885         * statement.cs (Block.AddVariable): Ensure that we skip implicit
5886         blocks before deciding whether the error is cs0136 or cs0128.
5887
5888         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
5889         (using_alias_directive, using_namespace_directive): Pass
5890         MemberName, not an expression to Namespace.UsingAlias and
5891         Namespace.Using.
5892         (MakeName): Use the MemberName of the namespace.
5893         * namespace.cs (Namespace.MemberName): New.
5894         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
5895         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
5896         Likewise.
5897         * decl.cs (MemberName.Name): Make readonly.
5898         (MemberName.FromDotted): New "constructor".
5899         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
5900         (MemberCore.Name): Compute from MemberName on demand.
5901         (MemberCore.SetMemberName): Provide a way to change the
5902         MemberName.
5903         (MemberCore.AddToContainer): Don't take a fullname parameter.
5904         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
5905         fully qualified name of the container to the member name.
5906         (TypeContainer.AddToTypeContainer): Use a fully qualified name
5907         only if the type is a member of the root container.
5908         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
5909         MemberName.Left rather than searching for an embedded ".".
5910         (PartialContainer.CreatePart): Update to changes in RootContext.
5911         (MemberBase.ShortName): Turn into a property.  Use
5912         MemberCore.SetMemberName.
5913         (MemberBase.ExplicitInterfaceName): Remove.
5914         (MemberBase.UpdateMemberName): Remove.
5915         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
5916         (PropertyBase.SetMemberName): New override.
5917         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
5918         (Tree.GetDecl): New.
5919         (Tree.AllDecls): Rename from Decls.
5920         * attribute.cs, enum.cs, report.cs: Update to changes.
5921         * driver.cs (MainDriver): Use MemberName.FromDotted on
5922         RootContext.MainClass.
5923
5924 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
5925
5926         * class.cs (FixedField.Define): Check for CS1664 and more sanity
5927         checks.
5928
5929         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
5930
5931 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
5932
5933         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
5934         property accessor modifiers.
5935
5936         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
5937         fixed buffer attribute (CS1716).
5938         (PropertyMethod.HasCustomAccessModifier): When property accessor
5939         has custom modifier.
5940
5941         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
5942         modifiers.
5943         (PropertyExpr.DoResolveLValue): Add CS0272.
5944
5945 2005-03-17  Miguel de Icaza  <miguel@novell.com>
5946
5947         * convert.cs: When converting to a pointer, use the proper Conv.U
5948         or Conv.I depending on the source data type.
5949
5950         * cs-tokenizer.cs: Make the size for large decimal constants,
5951         fixes #72957.
5952
5953 2005-03-17  Martin Baulig  <martin@ximian.com>
5954
5955         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
5956         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
5957
5958 2005-03-17  Martin Baulig  <martin@ximian.com>
5959
5960         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
5961         to bool so we can return an error condition.
5962         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
5963         returned an error.
5964
5965 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
5966
5967         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
5968         attributes.
5969
5970 2005-03-16  Raja R Harinath  <rharinath@novell.com>
5971
5972         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
5973         Refactor to avoid traversing the list of assemblies, and to avoid
5974         string concatenation.
5975         * typemanager.cs (guid_attr_type): Remove.
5976         (negative_hits, pointers, references): Remove hashes.
5977         (type_hash): New.
5978         (GetConstructedType): New.  Uses type_hash to handle constructed
5979         types (arrays, references, pointers).
5980         (GetReferenceType, GetPointerType): Use it.
5981         (GetNestedType): New.  Uses type_hash to handle nested types of
5982         reflected types.
5983         (LookupType, LookupTypeDirect): Remove.
5984         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
5985         'types' hash and LookupTypeReflection directly.
5986         (params_string, params_object): Use GetConstructedType.
5987         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
5988         top-level types.
5989         (Namespace.Lookup): Use cached_types.
5990         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
5991         provided by old TypeManager.LookupType.
5992         * rootcontext.cs (MakeFQN): Remove.
5993         * decl.cs (DeclSpace.MakeFQN): Likewise.
5994         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
5995         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
5996         TypeManager.GetConstructedType.
5997         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
5998
5999 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
6000
6001         * cs-parser.jay: Fix build.
6002
6003 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
6004
6005         * class.cs (TypeContainer.CircularDepException) New nested
6006         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
6007
6008         * cs-parser.jay: Reports CS1527 for any namespace element.
6009
6010         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
6011         Added CS0407.
6012
6013         * expression.cs (ParameterReference.IsAssigned): Changed error to
6014         CS0269.
6015         (Error_WrongNumArguments): Moved CS0245 detection here.
6016
6017         * statement.cs (Return.Resolve): Add CS1622 report.
6018
6019 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
6020
6021         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
6022
6023 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
6024
6025         * attribute.cs expression.cs: Get rid of some allocations.
6026
6027 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
6028
6029         * doc.cs : just eliminate the latest change.
6030
6031 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6032
6033         * doc.cs : commented out the latest change. It breaks xml-030.cs
6034
6035 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6036
6037         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
6038           fail. So invoke CreateType() in FindDocumentedType().
6039
6040 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6041
6042         * cs-tokenizer.cs : added IsKeyword().
6043         * doc.cs : Detect keyword incorrectly used as identifier.
6044           Allow identifiers prefixed by @.
6045
6046 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
6047
6048         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
6049         It caused exception in namespace resolving (again!).
6050         
6051         * class.cs (Class.ctor): Removed exit.
6052         (PropertyMethod.ctor): ditto.
6053         
6054         * codegen.cs (Codegen.Reset): Reset static data.
6055         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
6056         
6057         * cs-tokenizer.cs (Cleanup): Removed.
6058         
6059         * driver.cs (GetSystemDir): Rewrote to one line command.
6060         It caused problem with unloaded dynamic modules.
6061         (UnixParseOption): Removed Exit.
6062         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
6063         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
6064         Now can be mcs used as library.
6065         
6066         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
6067         empty location.
6068         
6069         * location.cs (Reset): Reset static data.
6070         
6071         * namespace.cs (Reset): Reset static data.
6072         
6073         * report.cs (Report.Reset): Reset static data.
6074         
6075         * rootcontext.cs (RootContext.Reset): Reset static data.
6076         
6077         * tree.cs (RootTypes.ctor): Use Location.Null
6078         
6079         * typemanager.cs (TypeManager.Reset): Reset static data.
6080         (CoreLookupType): Removed Exit.
6081         (TypeHandle.Reset): Reset static data.
6082         
6083 2005-03-10  Raja R Harinath  <rharinath@novell.com>
6084
6085         Fix #73516.
6086         * typemanager.cs (ComputeNamespaces): Import namespaces from
6087         referenced modules too.
6088
6089 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6090
6091         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
6092         than '.'.
6093
6094 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6095
6096         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
6097         enclosing DeclSpace.  This ensures that a name-lookup populates
6098         more caches and there are fewer 'TypeExpression's.  Carve out
6099         nested type lookup into ...
6100         (LookupNestedTypeInHierarchy): ... this.
6101
6102 2005-04-15  Martin Baulig  <martin@ximian.com>
6103
6104         Merged r41590 from MCS and make it work in the generics land.
6105
6106         * generic.cs (TypeParameter.UpdateConstraints): Removed the
6107         `check' argument.
6108
6109         * class.cs (PartialContainer.UpdateConstraints): Removed.
6110         (PartialContainer.CheckConstraints): Removed.
6111         (PartialContainer.SetParameterInfo): Store the constraints here.
6112         (PartialContainer.DefineTypeParameters): New public method;
6113         resolve the type parameter's constraints here.  Note that the
6114         PartialContainer doesn't have an EmitContext anymore, so we must
6115         do this in the ClassPart.
6116
6117 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6118
6119         Clean up a few partial-class semantics.  
6120         Fixes test-357.cs and cs1618-2.cs.
6121         * cs-parser.jay (struct_declaration): Use 'current_class' as
6122         parent of newly-created struct.  Remove call to Register ().
6123         Use 'pop_current_class' to complete handing the current struct.
6124         (interface_declaration): Likewise.
6125         (class_declaration): Likewise.
6126         (enum_declaration): Use 'current_class' as parent of newly created
6127         enum.
6128         (delegate_declaration): Likewise.
6129         (pop_current_class): New function.  This is used to handle closing
6130         up the 'current_class' and 'current_container', and pointing them
6131         to the enclosing class/container.
6132         (CSharpParser): Initialize 'current_class' too.
6133         * decl.cs (MemberCore): Add check for invariant: a partial
6134         container is not a parsed entity, and thus does not enclose any
6135         parsed members.
6136         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
6137         (DeclSpace.BaseTypeExpr): Use it.
6138         (DeclSpace.LookupType): Add check for invariant.
6139         * class.cs (TypeContainer): Add check for invariant: a nested
6140         class should have the same NamespaceEntry as its enclosing class.
6141         (TypeContainer.EmitFieldInitializers): Make virtual.
6142         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
6143         MemberCore.
6144         (TypeContainer.Register): Remove.
6145         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
6146         null.  Use TypeResolveEmitContext for resolving base types and
6147         interfaces.  Move initialization of Parts.TypeBuilder here from
6148         ...
6149         (TypeContainer.DefineNestedTypes): ... here.
6150         (PartialContainer): Take a Namespace not a NamespaceEntry.
6151         (PartialContainer.Create): Don't use Register.  Call the
6152         appropriate Add... function directly.
6153         (ClassPart): Take both the PartialContainer and the enclosing
6154         class as constructor arguments.
6155         (ClassPart.EmitFieldInitializers): Override.
6156         (ClassPart.PartFindNestedTypes): Remove.
6157         (FieldBase.GetInitializerExpression): Resolve the initializer
6158         expression in the emit context of the enclosing class.
6159         * tree.cs (RootTypes): Remove Register ().
6160         
6161 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
6162
6163         * cs-parser.jay: Removed CS0134.
6164         
6165         * driver.cs: Removed CS1901.
6166         
6167         * expression.cs (SizeOf.DoResolve): Don't report CS0233
6168         for predefined types.
6169
6170 2005-03-07  Duncan Mak  <duncan@novell.com>
6171
6172         * codegen.cs (Save):  Catch UnauthorizedAccessException as
6173         well. Fixes bug #73454.
6174
6175 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
6176
6177         * cs-tokenizer.cs (xtoken): Add CS1035.
6178         
6179         * class.cs (MethodData.Define): Add CS0683.
6180         (FieldMember.ctor): Add CS0681.
6181
6182 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6183
6184         * ecore.cs (SimpleName.DoResolve): Rename from
6185         SimpleName.DoResolveAllowStatic.
6186         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
6187         Pass 'intermediate' flag to MemberStaticCheck.
6188         (SimpleName.MemberStaticCheck): Skip "static check" only in case
6189         of "intermediate" lookups via MemberAccess.
6190         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
6191         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
6192
6193 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6194
6195         Fix #73394.
6196         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
6197         slipped in because of variable names that are identical to a
6198         builtin type's BCL equivalent ('string String;', 'int Int32;').
6199         (PropertyExpr.EmitInstance): Likewise.
6200
6201 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
6202
6203         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
6204         
6205         * report.cs (warning_ignore_table): Made public.
6206
6207 2005-03-04  Raja R Harinath  <rharinath@novell.com>
6208
6209         Fix #73282.
6210         * class.cs (MethodData.Emit): Pass 'container' to
6211         container.GetObsoleteAttribute instead of 'container.Parent'.
6212
6213 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
6214
6215         * cs-parser.jay: Add 1534 error test.
6216
6217         * iterators.cs (Yield.CheckContext): Add error 1629.
6218         (Iterator.ctor): Save unsafe modifier.
6219         (MoveNextMethod.DoEmit): Restore unsafe context.
6220
6221         * namespace.cs (UsingAlias): Better error message.
6222
6223 2005-03-03  Dan Winship  <danw@novell.com>
6224
6225         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
6226         the warning message [#73219]
6227
6228 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6229
6230         Fix compile with MCS 1.0.0.0.
6231         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
6232         w_restore to not depend on string constant folding.
6233
6234 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6235
6236         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
6237         CS0246 check to users who passed 'silent = false'.
6238         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
6239         check.
6240         (SimpleName.SimpleNameResolve): Update.
6241         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
6242         (MemberAccess.IdenticalNameAndTypeName): Update.
6243         * doc.cs (FindDocumentedTypeNonArray): Update.
6244
6245 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
6246
6247         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
6248         * parameters.cs (ComputeAndDefineParameters): Remove.
6249         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
6250         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
6251         Use GetParameterInfo.
6252
6253 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
6254
6255         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
6256
6257 2005-03-02  Raja R Harinath  <rharinath@novell.com>
6258
6259         Unify DeclSpace.LookupType and DeclSpace.FindType.
6260         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
6261         is in charge of defining nested types on demand.
6262         (DeclSpace.LookupType): Use it when the current_type is a
6263         TypeBuilder.  Use LookupTypeDirect for reflected types.
6264         (DeclSpace.FindType): Remove.
6265         (DeclSpace.LookupInterfaceOrClass): Likewise.
6266         (DeclSpace.DefineTypeAndParents): Likewise.
6267         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
6268         DeclSpace.LookupType.
6269         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
6270         * typemanager.cs (LookupType): Simplify.
6271         (AddUserType): Remove type from negative_hits.
6272         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
6273         * class.cs (TypeContainer.FindMembers): Move handling of nested
6274         types ...
6275         (TypeContainer.FindMembers_NestedTypes): ... here.
6276         (TypeContainer.FindNestedType): Implement override.
6277         (ClassPart.FindNestedType): Delegate to PartialContainer.
6278         (ClassPart.PartFindNestedType): Looks up the nested types of the
6279         part alone.
6280
6281 2005-04-14  Martin Baulig  <martin@ximian.com>
6282
6283         * generic.cs (ConstructedType): Moved all the type lookup and
6284         nested class logic into SimpleName.
6285         (ConstructedType.ResolveConstructedType): Our underlying type is
6286         already fully resolved; all the type lookup stuff is in
6287         SimpleName.
6288
6289         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
6290         constructed types here instead of in ConstructedType.
6291
6292         * decl.cs (MemberName.GetTypeExpression): Always create a
6293         SimpleName, not a ConstructedType.
6294         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
6295
6296 2005-03-02  Martin Baulig  <martin@ximian.com>
6297
6298         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6299         static constructor in static classes.
6300
6301 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
6302
6303         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
6304         sizeParamIndex is not specified.
6305
6306 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
6307
6308         Fix #73117
6309         * report.cs (WarningMessage.IsEnabled): Missing null check.
6310
6311 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6312
6313         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
6314         in the fields and not in the properties.
6315
6316 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
6317
6318         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
6319         fields as well.
6320
6321 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6322
6323         * attribute.cs: Small refactoring (improved robustness).
6324         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
6325         (ValidateGuid): Removed.
6326         (Resolve): Removed referenced to above mentioned.
6327         (GetAttributeUsage): Made private and changed to work without
6328         class assistance.
6329         (GetIndexerAttributeValue): Don't crash.
6330         (GetConditionalAttributeValue): Ditto.
6331         (GetClsCompliantAttributeValue): Ditto.
6332         (ExtractSecurityPermissionSet): All attributes exceptions are
6333         error 648.
6334         (GetPropertyValue): New helper.
6335         (GetMethodImplOptions): New method.
6336         (DefinePInvokeMethod): Reuse common code. Implemented handling of
6337         some missing properties.
6338         
6339         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
6340         (Method.ApplyAttributeBuilder): Updated.
6341         
6342         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
6343         exception.
6344
6345 2005-02-28  Raja R Harinath  <rharinath@novell.com>
6346
6347         Fix #73052.
6348         * report.cs (Report.SymbolRelatedToPreviousError): Handle
6349         non-simple types (array, pointer, reference).
6350
6351 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6352
6353         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
6354
6355         * class.cs (MethodCore.IsDuplicateImplementation): Special error
6356         for operators.
6357         (Method.CheckBase): Catch wrong destructor here.
6358         (MethodData.Define): Add errors 550, 668.
6359
6360         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
6361
6362         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
6363
6364         * pending.cs (VerifyPendingMethods): Add error 551.
6365
6366         * typemanager.cs (CSharpName): Next error report helper.
6367
6368 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
6369
6370         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
6371         attributes. Removed useless attribute double check.
6372         It saves almost 2MBs for corlib.
6373
6374 2005-02-25  Raja R Harinath  <rharinath@novell.com>
6375
6376         Fix #72924.
6377         * statement.cs (ExpressionStatement.Resolve): Make robust to being
6378         called twice in case of error.
6379
6380 2005-02-23  Chris Toshok  <toshok@ximian.com>
6381
6382         Fix compiler portions of #72827.
6383         * statement.cs (Block.Emit): call Begin/EndScope on the
6384         EmitContext instead of the ILGenerator.
6385
6386         * codegen.cs (EmitContext.BeginScope): new method, call
6387         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
6388         we have one.)
6389         (EmitContext.BeginScope): same, but EndScope and CloseScope
6390
6391         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
6392         offset and call the superclass's OpenScope(int) with it.
6393         (SymbolWriter.CloseScope): get the current il
6394         offset and call superclass's CloseScope(int) with it.
6395
6396 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
6397
6398         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
6399         CS1677 for out and ref as well.
6400
6401         * class.cs (Method.Define): Add error CS1599 detection.
6402         
6403         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
6404         
6405         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
6406         
6407         * delegate.cs (Delegate.Define): Add error CS1599 detection.
6408         
6409         * support.cs.cs (ModifierDesc): New helper method.
6410
6411 2005-02-23  Raja R Harinath  <rharinath@novell.com>
6412             Abin Thomas  <projectmonokochi@rediffmail.com>
6413             Anoob V E  <projectmonokochi@rediffmail.com>
6414             Harilal P R  <projectmonokochi@rediffmail.com>
6415
6416         Fix #57851, #72718.
6417         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
6418         MemberLookup (used for error reporting) actually returns a result.
6419         Fix error report number (122, not 112).
6420
6421 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
6422             Anoob V E  <projectmonokochi@rediffmail.com>
6423             Harilal P R  <projectmonokochi@rediffmail.com>
6424
6425         Fix #71134.
6426         * pending.cs (PendingImplementation.GetAbstractMethods):
6427         Find NonPublic members too.
6428
6429 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
6430
6431         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
6432         Fixed error 217.
6433         
6434         * class.cs (MethodCore.CheckMethodAgainstBase):
6435         Add error 239 report.
6436
6437 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6438
6439         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6440         
6441         * class.cs (Operator.Define): Add error 217 report.
6442         
6443 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6444
6445         Fix #68955.
6446         * expression.cs (Invocation.IsApplicable): Make public.
6447         (Invocation.IsParamsMethodApplicable): Likewise.
6448         * delegate.cs (Delegate.VerifyApplicability): Don't use
6449         Invocation.VerifyArgumentCompat for parameter applicability
6450         testing.  Use Invocation.IsApplicable and
6451         Invocation.IsParamsMethodApplicable.
6452
6453 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6454
6455         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6456         
6457         * class.cs (Operator.Define): Add error 217 report.
6458         
6459 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6460
6461         * namespace.cs (UsingEntry.Resolve): Undo change below.
6462
6463 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6464
6465         Fix #72756.
6466         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6467         disable the error message when the extended MemberLookup also
6468         fails.
6469         (Expression.MemberLookupFinal): Update.
6470         (SimpleName.DoSimpleNameResolve): Update.
6471         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6472         Don't use MemberLookupFinal.
6473         (New.DoResolve): Update.
6474         (BaseAccess.CommonResolve): Update.
6475
6476 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6477
6478         Fix #72732.
6479         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6480         occured previously, don't resolve again.
6481
6482 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6483
6484         Fix #69949
6485         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6486         argument. Call ResolveAttributeUsage for unresolved.
6487         when types doesn't match ctor arguments.
6488         
6489         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6490         for nested attribute classes.
6491         (Class.attribute_usage): Removed.
6492         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6493         for attribute class.
6494         
6495         * ecore.cs (IsAttribute): Removed.
6496         
6497         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6498         
6499         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6500         now normal types.
6501         (attribute_types): Removed.
6502         (EmitCode): Global attributes are emited as the latest.
6503
6504 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6505
6506         * class.cs (EmitFieldInitializers): Don't emit field initializer
6507         for default values when optimilization is on.
6508         
6509         * constant.cs (Constant.IsDefaultValue): New property.
6510         
6511         * driver.cs: Add /optimize handling.
6512         
6513         * constant.cs,
6514         * ecore.cs,
6515         * literal.cs: Implement new IsDefaultValue property.
6516         
6517         * rootcontext.cs (Optimize): New field, holds /optimize option.
6518
6519 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6520
6521         Fix crasher in re-opened #72347.
6522         * namespace.cs (Namespace.Lookup): Return null if
6523         DeclSpace.DefineType returns null.
6524
6525         Fix #72678.
6526         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6527
6528 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6529
6530         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6531         now returns null if it cannot resolve to an lvalue.
6532         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6533         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6534         returned null.  Remove check for SimpleName.
6535         (EventExpr.DoResolveLValue): New.
6536         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6537         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6538         error from ...
6539         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6540         avoid CS0131 error.
6541         (Unary.ResolveOperator): Move CS0211 check ...
6542         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6543         CS0131 error.
6544         (Unary.DoResolveLValue): Simplify.
6545         (AddressOf.DoResolveLValue): New.
6546         (ArrayAccess.DoResolveLValue): New.
6547
6548 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6549
6550         * attribute.cs (Attribute.Resolve): Add arguments casting for
6551         when types doesn't match ctor arguments.
6552
6553 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6554
6555         Fix parts of #63202.
6556         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6557         lookup of operator in base type.  Ensure that all checks happen
6558         when the operator resolves to an "op_..." method.
6559
6560 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6561
6562         Fix #71992.
6563         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6564         'ignore_cs0104' parameter.  Pass it to ...
6565         (NamespaceEntry.Lookup): ... this.
6566         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6567         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6568         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6569         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6570         Update.  Request that cs0104 errors be ignored.
6571         (ComposedCast.ResolveAsTypeStep): Update.
6572
6573 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6574
6575         Fix #59209.
6576         * expression.cs (Invocation.BetterFunction): Remove support for
6577         comparing virtual functions and their overrides.
6578         (Invocation.IsOverride): New.
6579         (Invocation.OverloadResolve): Don't consider 'override' functions
6580         during candidate selection.  Store them in a lookaside list.
6581         If the selected method is a 'virtual' function, use the list to
6582         find any overrides that are closer to the LHS type.
6583
6584 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6585
6586         * expression.cs (New.DoResolve): Add complex core type reduction.
6587         (New.Constantify): Converts complex core type syntax like 'new int ()'
6588         to simple constant.
6589         
6590 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6591
6592         * decl.cs (EntryType.EntryType): New constructor to create an
6593         updated copy of a cache entry.
6594         (MemberCache.AddMethods): Use it.
6595         (MemberCache.ClearDeclaredOnly): Remove.
6596         (MemberCache.MemberCache): Update.
6597
6598 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6599
6600         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
6601         variable.  This one is represents the actual low-level declaration
6602         of the method, as opposed to the semantic level `IsStatic'.   
6603
6604         An anonymous method which is hosted into a static method might be
6605         actually an instance method.  IsStatic would reflect the
6606         container, while MethodIsStatic represents the actual code
6607         generated.
6608
6609         * expression.cs (ParameterReference): Use the new MethodIsStatic
6610         instead of IsStatic.
6611
6612         * anonymous.cs (AnonymousMethod.Compatible): Pass the
6613         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
6614         set on the current EmitContext. 
6615
6616         * expression.cs (Cast): Overload DoResolveLValue so we can pass
6617         resolve our casted expression as an LValue.  This triggers the
6618         proper LValue processing that is later required by Assign.
6619
6620         This fixes 72347.
6621
6622         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
6623
6624 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
6625
6626         C# 2.0 Fixed buffer implementation
6627
6628         * anonymous.cs: Update after RegisterHelperClass renaming.
6629
6630         * attribute.cs (AttributeTester.fixed_buffer_cache):
6631         Cache of external fixed buffers.
6632         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
6633         implementation if field is fixed buffer else null.
6634
6635         * class.cs
6636         (TypeContainer.AddField): Accept FieldMember instead of Field.
6637         (FieldBase.IsFieldClsCompliant): Extracted code from
6638         VerifyClsCompliance descendant customization.
6639         (FixedField): New class handles fixed buffer fields.
6640         (FixedFieldExternal): Keeps information about imported fixed
6641         buffer.
6642         (IFixedField): Make access to internal or external fixed buffer
6643         same.
6644
6645         * cs-parser.jay: Add fixed buffer parsing.
6646
6647         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
6648         buffer.
6649
6650         * expression.cs (Indirection): Extended implementation to accept
6651         fixed buffer field.
6652         (PointerArithmetic.Emit): Get element from fixed buffer as well.
6653         (ElementAccess.MakePointerAccess): Get type as parameter.
6654         (DoResolve): Add fixed buffer field expression conversion.
6655         (DoResolveLValue): Ditto.
6656         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
6657         (ArrayPtr): Derives from FixedBufferPtr.
6658         (ArrayPtr.Emit): Add extra emit for array elements.
6659
6660         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
6661
6662         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
6663         for compiler generated types.
6664         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
6665
6666         * statement.cs (Fixed): Refactored to be easier add fixed buffer
6667         and consume less memory.
6668         (Fixed.Resolve): Add fixed buffer case.
6669
6670         * typemanager.cs (compiler_generated_attr_ctor,
6671         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
6672         (HasElementType): Add our own implementation to work on every
6673         runtime.
6674
6675 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6676
6677         * anonymous.cs (CaptureContext): Track whether `this' has been
6678         referenced.   
6679
6680         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
6681         only captured `this' if it was implicitly done (instance
6682         methods/variables were used). 
6683
6684         * codegen.cs (EmitContext.CaptureThis): New method to flag that
6685         `this' must be captured.
6686
6687 2005-01-30  Miguel de Icaza  <miguel@novell.com>
6688  
6689         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
6690         is null it means that there has been no need to capture anything,
6691         so we just create a sibling.
6692
6693         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
6694
6695         Just a partial fix.  The other half is fairly elusive.
6696         
6697 2005-02-10  Raja R Harinath  <rharinath@novell.com>
6698
6699         Fix #52586, cs0121-4.cs.
6700         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
6701         and return a hashtable.
6702         (MemberCache.ClearDeclaredOnly): New.
6703         (MemberCache.MemberCache): Update to change.  Make a deep copy of
6704         the method_hash of a base type too.
6705         (MemberCache.AddMethods): Adapt to having a deep copy of the base
6706         type methods.  Overwrite entries with the same MethodHandle so
6707         that the ReflectedType is correct.  The process leaves in base
6708         virtual functions and their overrides as distinct entries.
6709         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
6710         matters since it was boxed in a ArrayList before.
6711         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
6712         modifier.
6713         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
6714         case of a virtual function and its override (choose the overload
6715         as better).
6716         (Invocation.OverloadResolve): Avoid 'override' members during
6717         'applicable_type' calculation.
6718
6719 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6720
6721         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
6722         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
6723         GetTypeHandle.  It is possible for a reflected type to derive from
6724         a TypeBuilder (e.g., int[] derives from the TypeBuilder
6725         System.Array during mscorlib compilation).
6726         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
6727         contain a method_hash, don't create one either.  Don't create a
6728         deep copy of the base cache's method_hash.
6729         (MemberCache.SetupCache): Rename back from DeepCopy.
6730         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
6731         already initialized.  If we see an override function, add its
6732         underlying base virtual function to the member_hash too.
6733
6734 2005-02-09  Raja R Harinath  <rharinath@novell.com>
6735
6736         Combine two near-redundant caches.
6737         * typemanager.cs (method_params): Rename from method_internal_params.
6738         (TypeManager.GetParameterData): New.  Replace
6739         Invocation.GetParameterData.
6740         (TypeManager.LookupParametersByBuilder): Remove.
6741         * expression.cs (Invocation.method_parameter_cache): Remove.
6742         (Invocation.GetParameterData): Remove.
6743         Update to changes.
6744         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
6745         Update to changes.
6746
6747 2005-02-08  Raja R Harinath  <rharinath@novell.com>
6748
6749         Fix #72015.
6750         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
6751         TypeManager.multicast_delegate_type is null, resolve it by looking
6752         up "System.MulticastDelegate".
6753         * rootcontext.cs (RootContext.ResolveCore): Simplify.
6754
6755 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
6756             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
6757             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
6758
6759         Fix cs0164.cs.
6760         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
6761         (LabeledStatement.AddReference): New.  Set 'referenced'.
6762         (Goto.Resolve): Use it.
6763
6764 2005-02-05  John Luke  <john.luke@gmail.com>
6765
6766         * driver.cs: remove duplicate -doc line in Usage ()
6767
6768 2005-02-04  Raja R Harinath  <rharinath@novell.com>
6769
6770         * location.cs (Location.AddFile): Fix CS2002 error report.
6771
6772 2005-02-02  Martin Baulig  <martin@ximian.com>
6773
6774         * delegate.cs (Delegate.DefineType): Report an internal error if
6775         TypeManager.multicast_delegate_type is null.  See bug #72015 for
6776         details.        
6777
6778 2005-02-02  Raja R Harinath  <rharinath@novell.com>
6779
6780         Fix a crasher in a variant of #31984.
6781         * const.cs (Constant.CheckBase): New override that defers the
6782         new-or-override check in case the base type hasn't been populated
6783         yet.
6784         (Constant.Define): Ensure the new-or-override check is performed.
6785
6786 2005-02-01  Duncan Mak  <duncan@ximian.com>
6787
6788         * const.cs (LookupConstantValue): Check that `ce' is not null
6789         before calling GetValue ().
6790
6791 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6792
6793         Fix test-334.cs (#69519).
6794         * cs-parser.jay (using_alias_directive): Pass in an expression to
6795         NamespaceEntry.UsingAlias.
6796         (using_namespace_directive): Pass in an expression to
6797         NamespaceEntry.Using.
6798         (namespace_name): Don't flatten to a string.
6799         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
6800         (NamespaceEntry.AliasEntry.Resolve): Lookup using
6801         ResolveAsTypeStep.
6802         (NamespaceEntry.UsingEntry): Likewise.
6803         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
6804         changes.
6805         (NamespaceEntry.LookupForUsing): Remove.
6806         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
6807         names.
6808         (NamespaceEntry.Lookup): Remove support for dotted names.
6809
6810 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6811
6812         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
6813         split into two.
6814         (NamespaceEntry.ImplicitParent): Compute on demand.
6815         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
6816         parallels the current.
6817         (NamespaceEntry.LookupForUsing): Use it.
6818         (NamespaceEntry.Lookup): If the current namespace-entry is
6819         implicit, don't search aliases and using tables.
6820
6821 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6822
6823         Fix #31984.
6824         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
6825         BaseCache here.
6826         (TypeContainer.BaseCache): Compute on demand.
6827         (TypeContainer.FindMembers): Define constants and types if they're
6828         not already created.
6829         (FieldMember.Define): Move resetting of ec.InUnsafe before error
6830         check.
6831         * const.cs (Constant.Define): Make idempotent.
6832
6833 2005-01-29  Miguel de Icaza  <miguel@novell.com>
6834
6835         * pending.cs: Produce better code (no nops produced by using Ldarg
6836         + value).
6837         
6838         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
6839         i - 1' it should be arg + 1.
6840
6841         Fixes bug #71819.
6842
6843 2005-01-28  Raja R Harinath  <rharinath@novell.com>
6844
6845         * attribute.cs (Attribute.CheckAttributeType): Make private
6846         non-virtual.
6847         (Attribute.ResolveType): Make virtual.
6848         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
6849         handling of RootContext.Tree.Types.
6850
6851 2005-01-27  Raja R Harinath  <rharinath@novell.com>
6852
6853         Update attribute-handling to use the SimpleName/MemberAccess
6854         mechanisms.
6855         * cs-parser.jay (attribute): Pass in an expression to the
6856         constructors of Attribute and GlobalAttribute.
6857         * attribute.cs (Attribute): Take an expression for the name.
6858         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
6859         passed in attribute name expression.
6860         (Attribute.CheckAttributeType): Use it.
6861         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
6862         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
6863         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
6864         argument to prevent error messages if the lookup fails.
6865
6866 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
6867
6868         * expression.cs (Indirection): Implemented IVariable interface
6869         to support indirection in AddressOf operator.
6870         (PointerArithmetic.Emit): Add optimalization for case where
6871         result can be precomputed.
6872
6873 2005-01-26  Martin Baulig  <martin@ximian.com>
6874
6875         * class.cs (TypeContainer.AttributeTargets): Return the correct
6876         AttributeTargets depending on our `Kind' instead of throwing an
6877         exception; fixes #71632.
6878
6879 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
6880
6881         Fix #71257
6882         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
6883         constant members.
6884
6885 2005-03-17  Martin Baulig  <martin@ximian.com>
6886
6887         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6888         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6889
6890 2005-03-17  Martin Baulig  <martin@ximian.com>
6891
6892         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6893         to bool so we can return an error condition.
6894         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6895         returned an error.
6896
6897 2005-03-17  Martin Baulig  <martin@ximian.com>
6898
6899         * generic.cs (TypeMananager.IsIEnumerable): New public method.
6900
6901         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
6902         converting from an array-type of T to `IEnumerable<T>'.
6903
6904 2005-03-16  Martin Baulig  <martin@ximian.com>
6905
6906         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
6907         (Nullable.LiftedUnaryMutator): New public class.
6908
6909         * expression.cs (UnaryMutator.DoResolve): Added support for
6910         Nullable Types.
6911
6912 2005-03-14  Martin Baulig  <martin@ximian.com>
6913
6914         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
6915
6916 2005-03-14  Martin Baulig  <martin@ximian.com>
6917
6918         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
6919         the comparision operators `<', `>', `<=' and `>='.
6920
6921 2005-03-13  Martin Baulig  <martin@ximian.com>
6922
6923         * generic.cs
6924         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
6925         avoid confusion with the `NullLiteral'.
6926         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
6927
6928 2005-03-13  Martin Baulig  <martin@ximian.com>
6929
6930         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
6931         comparing arbitrary types with the null literal.
6932
6933 2005-03-13  Martin Baulig  <martin@ximian.com>
6934
6935         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
6936         boolean operators '&&', '||', '&' and '|'.
6937         (Nullable.OperatorTrueOrFalse): New public class.
6938
6939         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
6940         instead of a `StaticCallExpr'; added support for nullables.
6941
6942 2005-03-10  Martin Baulig  <martin@ximian.com>
6943
6944         * expression.cs
6945         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
6946         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
6947
6948 2005-03-07  Martin Baulig  <martin@ximian.com>
6949
6950         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
6951         it work if `expr' is not an IMemoryLocation.
6952         (Nullable.Lifted): Implement IMemoryLocation.
6953         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
6954         target type.
6955
6956 2005-03-05  Martin Baulig  <martin@ximian.com>
6957
6958         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
6959         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
6960         (Nullable): Added support for lifted unary and binary operators.
6961
6962         * expression.cs (Unary.DoResolve): Added support for nullable types.
6963         (Binary.DoResolve): Likewise.
6964         (Conditional.DoResolve): Likewise.
6965
6966 2005-03-02  Martin Baulig  <martin@ximian.com>
6967
6968         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
6969
6970         * class.cs (ClassPart.SetParameterInfo): Override this.
6971         (PartialContainer.SetParameterInfo): Override this.
6972         (TypeContainer.CheckConstraints): New protected method.
6973         (PartialContainer.CheckConstraints): Override this and check
6974         whether the same contraints were specified in all parts of a
6975         partial generic type definition.
6976         (PartialContainer.UpdateConstraints): New public method.
6977
6978         * generic.cs (TypeParameter.UpdateConstraints): New public method.
6979
6980 2005-03-02  Martin Baulig  <martin@ximian.com>
6981
6982         Committing a patch from Carlos Alberto Cortez to fix #72887.
6983
6984         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
6985         casts from `T []' to `int []'.
6986
6987 2005-03-02  Martin Baulig  <martin@ximian.com>
6988
6989         * generic.cs (TypeManager.IsEqual): Make this symmetric.
6990
6991         * expression.cs (Binary.ResolveOperator): When resolving a
6992         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
6993         `=='.  Fixes #71866.  See gen-127.cs.
6994
6995 2005-03-02  Martin Baulig  <martin@ximian.com>
6996
6997         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6998         static constructor in static classes.
6999
7000 2005-03-02  Martin Baulig  <martin@ximian.com>
7001
7002         * generic.cs
7003         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
7004         (Nullable.LiftedConversion): Added support for user-defined
7005         conversions.
7006
7007         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
7008
7009         * cs-parser.jay: Use ComposedCast everywhere instead of
7010         NullableType, so we don't need to check for NullableType
7011         everywhere.
7012         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
7013         case where we'll be resolved into a `parenthesized_expression_0'
7014         afterwards.
7015
7016         * convert.cs
7017         (Convert.UserDefinedConversion): Added nullable conversions.
7018
7019 2005-02-28  Martin Baulig  <martin@ximian.com>
7020
7021         * generic.cs (TypeManager.IsNullableType): New static method.
7022         (Nullable): New abstract class.
7023         (Nullable.NullLiteral): New public class.
7024         (Nullable.LiftedConversion): New public class.
7025
7026         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
7027         `builtin_types opt_nullable'.
7028
7029         * convert.cs
7030         (Convert.ImplicitConversionStandard): Added nullable conversions.
7031         (Convert.ExplicitConversionStandard): Likewise.
7032         (Convert.ExplicitConversion): Likewise.
7033
7034 2005-02-26  Martin Baulig  <martin@ximian.com>
7035
7036         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
7037         begin with a "?", for instance "?[]".  Don't do a type lookup if
7038         `dim' is empty.
7039
7040 2005-02-25  Martin Baulig  <martin@ximian.com>
7041
7042         The first part of Nullable Types :-)
7043
7044         * generic.cs (NullableType): New public class.
7045         (NullCoalescingOperator): New public class.
7046         (TypeArguments.Resolve): Add a CS0306 check.
7047
7048         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
7049         (opt_nullable): New rule.
7050         (type): Added `opt_nullable' to `namespace_or_type_name',
7051         `builtin_types' and `pointer_type'.
7052         (array_type): Added `opt_nullable'.
7053         (opt_rank_specifier_or_nullable): New rule; this is the
7054         combination of `opt_rank_specifier' and `opt_nullable'.
7055         (opt_error): New rule; catch errors here.
7056         (nullable_type_or_conditional): New rule; we use this to check for
7057         nullable and still detect the conditional operator.
7058         (local_variable_type): Use `opt_rank_specifier_or_nullable'
7059         instead `opt_rank_specifier'.
7060
7061         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
7062         for nullables.
7063
7064 2005-02-24  Martin Baulig  <martin@ximian.com>
7065
7066         * README, README.Changes: Removed; they're old and obsolete.
7067
7068 2005-02-22  Martin Baulig  <martin@ximian.com>
7069
7070         * generic.cs (TypeParameter.Resolve): If resolving the constraints
7071         returned an error, set `constraints' to null to avoid a crash
7072         later on.
7073         (TypeParameter.ResolveType): Likewise.
7074
7075 2005-02-22  Martin Baulig  <martin@ximian.com>
7076
7077         * generic.cs
7078         (Constraints.ResolveTypes): Protect against being called twice.
7079         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
7080         (TypeParameter.ResolveType): New public method; calls
7081         constraints.ResolveTypes().
7082         (TypeParameter.DefineType): Moved constraints.ResolveType() out
7083         into the new ResolveType().
7084         (GenericMethod.Define): Call ResolveType() on all our
7085         TypeParameter's.        
7086
7087 2005-02-21  Martin Baulig  <martin@ximian.com>
7088
7089         * generic.cs
7090         (TypeManager.generic_nullable_type): New static public field.
7091         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
7092
7093         * rootcontext.cs
7094         (RootContext.ResolveCore): Resolve "System.Nullable`1".
7095
7096 2005-02-15  Martin Baulig  <martin@ximian.com>
7097
7098         * generic.cs (ConstructedType.Constraints): Correctly check
7099         constraints if the argument type is a type parameter; fixes
7100         #72326. 
7101
7102 2005-02-02  Martin Baulig  <martin@ximian.com>
7103
7104         * delegate.cs (Delegate.DefineType): Report an internal error if
7105         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7106         details.        
7107
7108 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7109
7110         * pending.cs: Produce better code (no nops produced by using Ldarg
7111         + value).
7112         
7113         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7114         i - 1' it should be arg + 1.
7115
7116         Fixes bug #71819.
7117         
7118 2005-01-26  Martin Baulig  <martin@ximian.com>
7119
7120         * cs-parser.jay (indexer_declarator): Don't report an error if we
7121         have type parameters since we can be an explicit interface
7122         implementation; fixes #71449.
7123
7124 2005-01-26  Martin Baulig  <martin@ximian.com>
7125
7126         * class.cs (TypeContainer.AttributeTargets): Return the correct
7127         AttributeTargets depending on our `Kind' instead of throwing an
7128         exception; fixes #71632.
7129
7130 2005-01-26  Martin Baulig  <martin@ximian.com>
7131
7132         * delegate.cs (Delegate.DefineType): Correctly define our type
7133         parameters.  Fixes #71483.
7134
7135 2005-01-25  Raja R Harinath  <rharinath@novell.com>
7136
7137         Fix #71602.
7138         * expression.cs (MemberAccess.DoResolve): Don't complain with
7139         cs0572 when the LHS of a member access has identical name and type
7140         name.
7141
7142 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
7143
7144         Fix #71651, #71675
7145         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
7146         CreatePermission.
7147         Create custom PermissionSet only for PermissionSetAttribute.
7148
7149 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
7150
7151         Fix #71649
7152         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
7153         delegates in static class.
7154
7155 2005-01-24  Martin Baulig  <martin@ximian.com>
7156
7157         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7158         merging an implicit block, just use its reachability.
7159
7160         * statement.cs (Block.Resolve): Make the unreachable code check
7161         work wrt. implicit blocks; see test-337 from #63842.
7162
7163 2005-01-21  Alp Toker  <alp@atoker.com>
7164  
7165         * cs-parser.jay: destructor_declaration's container is PartialContainer
7166         not Class when partial types are used, so use Kind prop instead of
7167         'is'.
7168         
7169 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
7170
7171         * cs-parser.jay: Improve error reporting when an interface
7172         declares new types.
7173
7174 2005-01-20  Dick Porter  <dick@ximian.com>
7175
7176         * support.cs: SeekableStreamReader fix from Sandor Dobos
7177         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
7178         chars are read.  Fixes bug 70369.
7179
7180 2005-01-20  Raja R Harinath  <rharinath@novell.com>
7181
7182         * cs-parser.jay (catch_clause): Simplify current_block handling
7183         somewhat.
7184
7185 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
7186
7187         * convert.cs (ImplicitStandardConversionExists): Synchronize the
7188         code with ImplicitStandardConversion to handle the implicit
7189         conversion of method groups into valid delegate invocations. 
7190
7191         The problem is that in parameter handling we were using this code
7192         path.  Fixes bug #64698
7193
7194 2005-01-19  Raja R Harinath  <rharinath@novell.com>
7195
7196         * cs-parser.jay: Fix several infelicities.
7197         - Avoid assigning to the parser value stack.  Code like 
7198           '$3 = null' is unclean.  Synthesize a value for the code block
7199           instead. 
7200         - Avoid using oob_stack for storing location information.  Use ...
7201         (_mark_): ... this.  New (empty) rule.  Saves the current location
7202         in $$.
7203         (foreach_statement): Avoid using oob_stack for current_block
7204         handling.  Use technique used in for_statement and
7205         using_statement.  Synthesize a value for the code block to store
7206         additional intermediate information.
7207
7208 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
7209
7210         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
7211         of a different type is only allowed to private fields of a
7212         containing type, not on fields of a base class.
7213
7214         See test-174.cs and error cs0122-9.cs
7215
7216 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7217
7218         Fix test-335.cs (bug #58126).
7219         * cs-parser.jay (argument): Split out non-expression parts of the
7220         rule into 'non_simple_argument'.
7221         (invocation_expression): Support parenthesized invocations with
7222         multiple arguments, and with single non-simple arguments.
7223
7224 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7225
7226         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
7227         places.
7228
7229 2005-01-12  Raja R Harinath  <rharinath@novell.com>
7230
7231         Fix cs0038-1.cs, cs1640-6.cs.
7232         * ecore.cs (Expression.Resolve): Remove special-case for
7233         SimpleName in error-handling.
7234         (Expression.almostMatchedMembers): Relax access permission to
7235         protected.
7236         (Expression.MemberLookupFailed): Handle duplicates in
7237         almostMatchedMembers list.
7238         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
7239         * expression.cs (New.DoResolve): Report CS1540 for more cases.
7240         * typemanager.cs (GetFullNameSignature): Use the MethodBase
7241         overload if the passed in MemberInfo is a MethodBase.
7242
7243 2005-01-25  Martin Baulig  <martin@ximian.com>
7244
7245         * doc.cs
7246         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
7247
7248 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
7249
7250         Fix #70749
7251         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
7252         for non-CAS & merge permission sets properly.
7253
7254 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7255
7256         Improve standard-compliance of simple name and member access 
7257         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
7258         * ecore.cs (FullNamedExpression): New abstract base class 
7259         for Namespaces and TypeExpressions.
7260         (ResolveFlags.SimpleName): Remove.
7261         (SimpleName): Remove support for dotted names.
7262         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
7263         DeclSpace.FindType and DeclSpace.LookupType.
7264         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
7265         (Expression.ExprClassName): Make member function.
7266         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
7267         a namespace.  Remove creation of dotted "SimpleName"s.
7268         (MemberAccess.DoResolve): Likewise.
7269         * decl.cs (DeclSpace.Cache): Make private.
7270         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
7271         (DeclSpace.FindType): Update.
7272         (DeclSpace.LookupType): Move here from RootContext.  Return a 
7273         FullNamedExpression.
7274         * namespace.cs (Namespace): Derive from FullNamedExpression
7275         so that it can be part of expression resolution.
7276         (Namespace.Lookup): Return an FullNamedExpression.
7277         (NamespaceEntry.LookupAlias): Lookup aliases only in current
7278         namespace.
7279         * rootcontext.cs (NamespaceLookup): Remove.
7280         (LookupType): Move to DeclSpace.
7281         * attribute.cs (CheckAttributeType): Update.
7282         * doc.cs (FindDocumentedType): Remove allowAlias argument.
7283         (FindDocumentedTypeNonArray): Likewise.
7284
7285 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7286
7287         Fix cs0509.cs, cs1632.cs.
7288         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
7289         is the same as IsInterface.
7290         (TypeContainer.GetClassBases): Likewise.
7291         * statement.cs (LabeledStatement.ig): New field.
7292         (LabeledStatement.LabelTarget): Save ILGenerator which created the
7293         label.
7294         (LabeledStatement.DoEmit): Check that the label was created with
7295         the same ILGenerator.
7296
7297 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7298
7299         Fix #71058
7300         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
7301         accessors to its properties.
7302
7303         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
7304         from accessors to property.
7305         
7306 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7307
7308         Fix #70722
7309         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
7310         only for overrides.
7311         
7312 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
7313
7314         * attribute.cs: Check for null and empty strings.  
7315
7316         I have lost another battle to Paolo.
7317
7318 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
7319
7320         Fix #70942
7321         * class.cs (PropertyMethod): Set Parent field in ctors.
7322         (SetMethod.InternalParameters): Add unsafe switch hack.
7323         Override MarkForDuplicationCheck where it is appropriate.
7324
7325         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
7326         It says whether container allows members with the same name.
7327         Base default is no.
7328         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
7329         Removed is_method parameter.
7330
7331 2005-01-06  Duncan Mak  <duncan@ximian.com>
7332
7333         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
7334         because the previous change led to incorrect reporting of CS1032
7335         ("Cannot define/undefine preprocessor symbols after first token in
7336         file"). Instead of using `tokens_seen' as the only flag that
7337         triggers CS1040, introduce `comments_seen'. This new flag is used
7338         to signify having seen comments on the current line, so it is
7339         unset after a newline.
7340
7341 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7342
7343         * doc.cs : When searching for a type, find nested type too.
7344           This fixes bug #71040.
7345
7346 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7347
7348         * doc.cs :
7349           - Warn missing member comment on those classes which also does not
7350             have doc comments. Fixed bug #71041.
7351           - Don't warn missing doc comment on default constructor.
7352             Fixed bug #71042.
7353
7354 2005-01-06  Duncan Mak  <duncan@ximian.com>
7355
7356         * cs-tokenizer.cs (xtoken): After handling traditional C-style
7357         comments, set `tokens_seen' to true. This allows us to detect
7358         misplaced preprocessor directives (i.e. not at the beginning of
7359         the a line, nor after whitespaces). In that case, report error
7360         CS1040. This fixes bug #56460.
7361
7362         * cs-parser.jay (interface_member_declaration): Add checks for
7363         IsExplicitImpl, and report CS0541 error if an interface member is
7364         defined as an explicit interface declaration.
7365
7366 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
7367
7368         Fix #70817
7369         * class.cs (PropertyMethod): Set Parent field in ctors.
7370         (SetMethod.InternalParameters): Add unsafe switch hack.
7371         
7372         * decl.cs (MemberCore.Parent): Cannot be readonly.
7373
7374 2005-01-06  Raja R Harinath  <rharinath@novell.com>
7375
7376         * decl.cs (DeclSpace.ResolveType): Remove.
7377         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
7378         Merge in code from ...
7379         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
7380         * class.cs, enum.cs: Update to changes.
7381
7382 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
7383
7384         * anonymous.cs: Ensure that we init the scope of our parent if it
7385         has not been initialized yet.
7386
7387 2004-12-30  Duncan Mak  <duncan@ximian.com>
7388
7389         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
7390         if field.FieldBuilder is null. Fixes #70758.
7391
7392         * convert.cs: Fixed some typos and updated some of the comments.
7393         (ImplicitStandardConversionExists):
7394         (TryImplicitIntConversion): If `target_type' is an interface and
7395         the type of `ic' implements this interface, return true or a new
7396         BoxedCast instead of null. This fixes #70468.
7397
7398 2004-12-29  Duncan Mak  <duncan@ximian.com>
7399
7400         * expression.cs (Argument.Emit): Check that Expr is
7401         IMemoryLocation before casting to it, and report CS1510 otherwise.
7402
7403         This fixes #70402.
7404
7405 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
7406
7407         * statement.cs (Block.ThisVariable): remove the recursion here, to
7408         make the --profile more sane.
7409
7410 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
7411
7412         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
7413         assembly, by JB Evain.
7414
7415 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7416
7417         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
7418           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
7419         "parent" refers to enclosing type/class.  "base" refers to superclass.
7420
7421 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7422
7423         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7424         Ensure that we only have GlobalAttributes.
7425         * attribute.cs (Attribute.Emit): Make non-virtual.
7426         (GlobalAttribute.Emit): Remove.
7427         (Attribute.Resolve): Make virtual.
7428         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
7429         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
7430         the argument. Don't create one.
7431         (Attribute.GetObsoleteAttribute): Likewise.
7432         (Attribute.GetClsCompliantAttributeValue): Likewise.
7433         * class.cs, decl.cs: Update to changes.
7434
7435 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
7436
7437         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
7438         
7439         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
7440         
7441         * statement.cs (Foreach.Resolve): Add error 186 report.
7442
7443 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
7444
7445         * expression.cs (Conditional.DoResolve): Add warning 429.
7446         
7447         * statement.cs (If.Resolve): Add warning 665.
7448
7449 2004-12-16  Raja R Harinath  <rharinath@novell.com>
7450
7451         New invariant: RootContext.Tree.Types.NamespaceEntry == null
7452         except when in the parser, and in GlobalAttribute.
7453         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
7454         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
7455         RootContext.Tree.Types.NamespaceEntry once work is done.
7456         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
7457         and resets RootContext.Tree.Types.NamespaceEntry.
7458
7459 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
7460
7461         * cs-parser.jay: Don't create a block for every variable.
7462
7463 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7464
7465         * location.cs: Provide extra information.
7466
7467         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7468         variables from the captured environment, it is the ldarg_0.
7469
7470 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7471
7472         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7473         find a conclusion.
7474         
7475         * class.cs: Changed warning level for 169 to avoid developer
7476         displeasure from warning flooding. It will be changed back when they
7477         fix most of current BCL warnings.
7478         
7479         * RootContext.cs: Pushed default WarningLevel to 3.
7480         
7481         * statement.cs: Removed unused variable.
7482
7483 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7484
7485         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7486         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7487         Add error 502 report.
7488         (StaticClass.DefineType): Add error 441 report.
7489         (Class.AllowedModifiersProp): New virtual property as temporary
7490         extension to AllowedModifiers.
7491         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7492         to share implementation with StaticClass and don't call virtual
7493         methods from ctor.
7494         
7495         * driver.cs (MainDriver): Add error 1558 test.
7496
7497         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7498         report. Moved error 36 test here.
7499
7500         * statement.cs (Throw.Resolve): Add error 724 report.
7501
7502         * typemanager.cs: Add out_attribute_type core type.
7503         
7504 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7505
7506         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7507         3018 report.
7508         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7509
7510         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7511         3017 report.
7512         
7513         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7514
7515         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7516         Add error 3023 report.
7517         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7518
7519         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7520         implementation.
7521
7522 2004-12-12  John Luke  <john.luke@gmail.com>
7523
7524         * driver.cs (AddArgs): take -- into account when
7525         adding arguments, fixes bug 65710 
7526
7527 2004-12-12  Martin Baulig  <martin@ximian.com>
7528
7529         * expression.cs (Unary.TryReduceNegative): Added support for
7530         SByteConstant and ByteConstant.
7531         (Unary.Reduce): Check error values from TryReduceNegative().
7532
7533 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7534
7535         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7536         and report exception as error 182.
7537
7538 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7539
7540         * driver.cs (Main): Fix message when there are warnings.
7541
7542 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7543
7544         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7545
7546 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7547
7548         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7549         Reduced number of warnings.
7550         
7551         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7552
7553 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7554
7555         * driver.cs: Removed message.
7556
7557         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7558
7559 2004-12-08    <vargaz@freemail.hu>
7560
7561         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7562
7563 2004-12-08  Martin Baulig  <martin@ximian.com>
7564
7565         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7566         instead of a CS3002 for properties and indexer.
7567
7568 2004-12-08  Martin Baulig  <martin@ximian.com>
7569
7570         * decl.cs (MemberName.ToString): Make this work again.
7571
7572 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7573
7574         * attribute.cs (Resolve): Add error 591 detection.
7575
7576         * class.cs (FieldMember.Define): Add error 1547 detection.
7577         (Indexer.Define): Add error 620 detection.
7578         (Operator.Define): Add error 590 detection.
7579
7580         * ecore.cs: Missing argument for error 79.
7581
7582         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7583         detection.
7584
7585 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7586
7587         Fix #70106
7588         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7589         only.
7590
7591 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7592
7593         * cs-parser.jay : handle doc comments on implicit/explicit operators.
7594           Some operator comments were suppressed.
7595         * doc.cs : Implicit/explicit operator name in doc comments are like
7596           "op_Explicit(type)~returnType", so added suffix handling.
7597
7598 2005-01-21  Alp Toker  <alp@atoker.com>
7599
7600         * cs-parser.jay: destructor_declaration's container is PartialContainer
7601         not Class when partial types are used, so use Kind prop instead of 'is'.
7602
7603 2004-12-12  Martin Baulig  <martin@ximian.com>
7604
7605         * expression.cs (Unary.TryReduceNegative): Added support for
7606         SByteConstant and ByteConstant.
7607         (Unary.Reduce): Check error values from TryReduceNegative().
7608
7609 2004-12-11  Martin Baulig  <martin@ximian.com>
7610
7611         * support.cs (ReflectionParameters.ParameterName): If we have a
7612         `gpd', call `ParameterName' on it.
7613
7614         * parameter.cs (Parameter.GetParameterAttributes): New static method.
7615
7616         * pending.cs (PendingImplementation.DefineProxy): Call
7617         DefineParameter() for all of the MethodBuilder's arguments.
7618
7619 2004-12-09  Martin Baulig  <martin@ximian.com>
7620
7621         * doc.cs (DocUtil): Make this a static class.
7622
7623 2004-12-09  Martin Baulig  <martin@ximian.com>
7624
7625         * expression.cs (Invocation.InferType): Moved the type inference
7626         implementation into TypeManager.
7627
7628         * generics.cs (TypeManager): Moved the type inference
7629         implementation here.
7630
7631 2004-12-09  Martin Baulig  <martin@ximian.com>
7632
7633         * typemanager.cs (TypeManager): Make this a partial class.
7634
7635         * generics.cs
7636         (TypeManager): Move the generics part of `TypeManager' here.
7637
7638 2004-12-08  Martin Baulig  <martin@ximian.com>
7639
7640         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7641         instead of a CS3002 for properties and indexer.  Added CS3024
7642         check for generic interfaces.
7643
7644         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
7645         instances are not CLS-compliant.
7646
7647 2004-12-08  Martin Baulig  <martin@ximian.com>
7648
7649         * cs-parser.jay
7650         (void_pointer_expression): New rule for `void*', `void**' etc.
7651         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
7652
7653 2004-12-08  Martin Baulig  <martin@ximian.com>
7654
7655         * expression.cs (Invocation.InferType): Removed the hack for
7656         MethodCore.MayUnify().  
7657
7658         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
7659         this actually work.
7660
7661         * class.cs (MethodCore.MayUnify): Use
7662         TypeManager.MayBecomeEqualGenericTypes().       
7663
7664 2004-12-08  Martin Baulig  <martin@ximian.com>
7665
7666         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
7667         parameter, box it.  Fixes #69233.
7668
7669 2004-12-08  Martin Baulig  <martin@ximian.com>
7670
7671         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
7672         have the ctor constraint.  Fixes #68326.
7673
7674 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7675
7676         * cs-parser.jay : interface comment was not consumed because of
7677           extra opt_semicolon before doc handling.
7678
7679 2004-12-03  Raja R Harinath  <rharinath@novell.com>
7680
7681         Fix test-327.cs, test-328.cs, and put in early infrastructure
7682         for eventually fixing #52697.
7683         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
7684         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
7685         from other methods.
7686         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
7687         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
7688         (VerifyUsing, error246): Update.
7689         * rootcontext.cs (RootContext.NamespaceLookup): Just use
7690         'NamespaceEntry.LookupNamespaceOrType'.
7691
7692 2004-12-07  Martin Baulig  <martin@ximian.com>
7693
7694         * driver.cs: Call it "BETA SOFTWARE" :-)
7695
7696 2004-12-06  Raja R Harinath  <rharinath@novell.com>
7697
7698         Fix crash on cs0657-17.cs.
7699         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7700         Use RootContext.Tree.Types, not 'new RootTypes ()'.
7701         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
7702         the case where the NamespaceEntry gets overwritten.
7703
7704 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
7705
7706         Fixed #69195, #56821
7707         * ecore.cs (ResolveBoolean): Tiny refactoring.
7708
7709         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
7710         of right expression resolving when left is false constant and
7711         operator is LogicalAnd OR true constant and operator is LogicalOr.
7712
7713         * statement.cs (ResolveUnreachable): Always reports warning.
7714
7715 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
7716
7717         * class.cs: Distinguish between 1721 and 1722 (just a little help
7718         for the programmer).
7719
7720 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
7721
7722         * delegate.cs: Only allow this on new versions of the language. 
7723
7724 2004-12-02  Duncan Mak  <duncan@ximian.com>
7725
7726         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
7727         Expression class.
7728         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
7729         here as a static method. Take an additional bool out parameter
7730         `must_do_cs1540_check' for signaling to InstanceResolve.
7731         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
7732         member field from PropertyExpr class and made it an argument of
7733         the method instead.
7734         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
7735         check for MarshalByRefObject, and report CS0122 instead of CS1540.
7736         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
7737         and `remove_accessor' as well as InstanceResolve: report CS0122
7738         where applicable.
7739
7740         Fixes #70129.
7741
7742 2004-12-07  Martin Baulig  <martin@ximian.com>
7743
7744         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
7745         and CS0692 where appropriate.
7746
7747 2004-12-06  Martin Baulig  <martin@ximian.com>
7748
7749         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
7750         IsDuplicateImplementation() and improved it.
7751
7752         * expression.cs (Invocation.InferTypeArguments): Added
7753         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
7754         and removed the "ref" modifier from `infered_types'.
7755
7756         * decl.cs (MemberName.ToString): Removed the exception.
7757
7758 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
7759
7760         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
7761           comments are allowed.
7762
7763 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7764
7765         * delegate.cs: Add checks for subtypes in paramaters and return values
7766         in VerifyMethod () to add support for Covariance/Contravariance
7767         in delegates.
7768         
7769 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7770
7771         * report.cs: Remove extra closing parenthesis.
7772
7773         * convert.cs (Error_CannotImplicitConversion): If the name of the
7774         types are the same, provide some extra information.
7775
7776 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
7777
7778         Fix bug #70102
7779         * attribute.cs (Resolve): Improved implementation of params
7780         attribute arguments.
7781
7782         * support.cs (ParameterData): Add HasParams to be faster.
7783
7784 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
7785
7786         all things are for /doc support:
7787
7788         * doc.cs: new file that supports XML documentation generation.
7789         * mcs.exe.sources: added doc.cs.
7790         * driver.cs:
7791           Handle /doc command line option.
7792           Report error 2006 instead of 5 for missing file name for /doc.
7793           Generate XML documentation when required, after type resolution.
7794         * cs-tokenizer.cs:
7795           Added support for picking up documentation (/// and /** ... */),
7796           including a new XmlCommentState enumeration.
7797         * cs-parser.jay:
7798           Added lines to fill Documentation element for field, constant,
7799           property, indexer, method, constructor, destructor, operator, event
7800           and class, struct, interface, delegate, enum.
7801           Added lines to warn incorrect comment.
7802         * rootcontext.cs :
7803           Added Documentation field (passed only when /doc was specified).
7804         * decl.cs:
7805           Added DocComment, DocCommentHeader, GenerateDocComment() and
7806           OnGenerateDocComment() and some supporting private members for
7807           /doc feature to MemberCore.
7808         * class.cs:
7809           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
7810         * delegate.cs:
7811           Added overriden DocCommentHeader.
7812         * enum.cs:
7813           Added overriden DocCommentHeader and GenerateDocComment().
7814
7815 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
7816
7817         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
7818         unwrapping the enumeration values, chain to
7819         DoConstantNumericPromotions again, so we can promote things to the
7820         fundamental types (takes care of enums that are bytes, sbytes).
7821
7822         Fixes bug #62054.
7823
7824 2004-12-01  Raja R Harinath  <rharinath@novell.com>
7825
7826         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
7827         Fix long-standing bug in type-lookup.  Use FindType instead of
7828         LookupType when ec.ResolvingTypeTree.
7829         (Attribute.ResolveType, Attribute.Resolve)
7830         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
7831         Update to changes.
7832         (Attributes.Search): Remove internal version.  Update.
7833         (Attributes.SearchMulti): Update.
7834         (Attributes.GetClsCompliantAttribute): Remove.
7835         (Attributes.GetIndexerNameAttribute): Remove.
7836         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
7837         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
7838         * class.cs (Indexer.Define): Likewise.
7839
7840 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
7841
7842         Fix bug #68790
7843         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
7844         MarshallByReference members access.
7845
7846         * expression.cs: Use CheckMarshallByRefAccess;
7847         Better error CS0197 message.
7848
7849         * report.cs: Print whole related error message.
7850
7851 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7852
7853         * class (GetClassBases): Better error 60 report.
7854         (EventProperty): Disabled warning 67 detection.
7855
7856 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7857
7858         Fix bug #60324
7859         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
7860
7861         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
7862         precise values.
7863
7864 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7865
7866         Fix bug #49488
7867         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
7868
7869         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
7870
7871 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
7872
7873         * attribute.cs (Attribute.Resolve): Refine error reporting and
7874         report a cs0117 if the identifier does not exist, to distinguish
7875         from 0617 which is a miss-use of the actual identifier.
7876
7877         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
7878         between cs0070 and cs0079.
7879
7880         * class.cs (MemberBase.DoDefine): When reporting a wrong
7881         accessibility level, we use MethodCore to compare instead of
7882         Method (this was a regression in some refactoring effort).
7883
7884         So now we correctly report cs0056 again.
7885
7886         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
7887         testing the target_type (which was known to be object_type) and
7888         not the source type (which is anonymous_method).
7889
7890         Fixed reporting of error cs1660.
7891
7892         * expression.cs (UserCast.Source): Expose the underlying cast.
7893
7894         * statement.cs (Switch.SwitchGoverningType): Sort the list of
7895         allowed types to find a match to int32 first (most common).
7896
7897         In addition, it ignores any ImplicitUserConversions that did an
7898         internal implicit conversion (as the switch statement allows only
7899         one integral conversion to exist).
7900
7901         * class.cs (PartialContainer.Create): rename `name' to
7902         `member_name' for clarity.  Then replace the string calls with a
7903         call to MemberName.GetPartialName, as now using
7904         MemberName.ToString is an error (this is due to the side effects
7905         it had, that were fixed in the past).
7906
7907         This will restore the error reporting on a number of partial class
7908         errors that were missusing this (and getting an exception as a
7909         results, which is now just a plain textual warning, because
7910         yyparse debug output would crash otherwise).
7911
7912 2004-11-26  Raja R Harinath  <rharinath@novell.com>
7913
7914         * Makefile (PROGRAM_INSTALL_DIR): Remove.
7915
7916 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7917
7918         * rootcontext.cs (LookupType): Make sure to cache lookups that
7919         don't give us a negative result. This saves about 5% of corlib
7920         compilation time.
7921
7922 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7923
7924         * report.cs (AbstractMessage.Print): messages are sent to stderr
7925
7926         * class.cs (TypeContainer.GetClassBases): It is an error to have a
7927         non-interface in the list of interfaces (at this point, either
7928         parent was properly set, or a base class is being listed in the
7929         interfaces section).
7930
7931         This flags error 1722, and resolves the crash from bug 69259.
7932
7933 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7934
7935         * statement.cs (Using.EmitExpressionFinally): make this work right
7936         for valuetypes. Fixes 69926.
7937
7938 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7939
7940         * const.cs (Const.ChangeType): Cope with the "0 literal can be
7941         converted to an enum" here, before we try to change the underlying
7942         type.  This code exists, but it is a different code path than the
7943         one used while encoding constants.
7944
7945         (ImplicitReferenceConversionExists): In addition, resynchronized
7946         the code here, so it matches the same code in
7947         ImplicitReferenceConversionExists for the `from any class-type S
7948         to any interface-type T'.       
7949
7950 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
7951
7952         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
7953
7954 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
7955
7956         * cs-parser.jay: Use verbosity accordingly. 
7957
7958 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7959
7960         * expression.cs (Unary.ResolveOperator): Do not report warning;
7961         AddressOf reads from variable.
7962         
7963         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
7964
7965 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7966
7967         Fix bug #69462
7968
7969         * attribute.cs (Attributable): Removed CheckTargets.
7970         (Attributes.Emit): Explicit attribute targets are tested here.
7971
7972         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
7973         not enabled for interfaces.
7974
7975         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
7976         (GetAssemblyName): Ouch next bug there.
7977
7978 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7979
7980         * expression.cs: Error 275 added.
7981         
7982 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
7983
7984         Fix bug #69177 (Implemented decimal constant support)
7985
7986         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
7987         (BinaryFold): Add DecimalConstant.
7988
7989         * const.cs (Define): Decimal constant 
7990         (is not constant.
7991         (ChangeType): Add decimal type handling.
7992         (LookupConstantValue): Don't set value for decimal type but
7993         emit DecimalConstantAttribute. Needed for constant optimization.
7994
7995         * constant.cs (ToDecimal): New method.
7996         (ConvertToDecimal): New method.
7997         (IntConstant): Implemented ConvertToDecimal.
7998         (DecimalConstant.Emit): Emit optimized version for decimals in
7999         int range.
8000
8001         * expression.cs (ResolveOperator): Changed order of constant
8002         reduction to work correctly with native types which have
8003         overloaded operators.
8004         (ResolveMemberAccess): Extract constant value from attribute
8005         for decimal type.
8006
8007         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
8008
8009         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
8010         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
8011         (ChangeType): Decimal is special.
8012         (TypeToCoreType): Add decimal type.
8013
8014 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8015
8016         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
8017         decimal types.
8018
8019 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8020
8021         * class.cs (EventField.ApplyAttributeBuilder): Fix error
8022         test cs1667-5.cs.
8023
8024 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8025
8026         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
8027
8028         * pending.cs (PendingImplementation): Grab only interfaces.
8029
8030 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8031
8032         * statement.cs (ForeachHelperMethods): Add location member and
8033         error 202 detection.
8034
8035 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
8036
8037         * expression.cs (DoResolveBase): Fixed wrong warning for out
8038         variables.
8039
8040 2004-12-04  Martin Baulig  <martin@ximian.com>
8041
8042         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
8043         to check whether the conversion is ok.
8044
8045         * typemanager.cs (TypeManager.GetTypeArguments): Just return
8046         `Type.EmptyTypes' if we're not a generic TypeContainer.
8047
8048 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8049
8050         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
8051         old bug: when converting from the null literal to a pointer,
8052         return an EmptyCast, not the NullLiteral.
8053
8054         This fixes #69921, the recent null_type changes probably made this
8055         bug more prominent.
8056
8057 2004-12-03  Martin Baulig  <martin@ximian.com>
8058
8059         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8060         method as our child, call AnonymousMethod.Compatible() on it.
8061
8062 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8063
8064         * class.cs (FieldBase): Use an unused bit field from the field to
8065         encode the `has_offset' property from the FieldMember.  This saves
8066         a couple of Ks on bootstrap compilation.
8067
8068         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8069         method as our child, return the AnonymousMethod resolved
8070         expression.
8071
8072         * expression.cs (New.DoResolve): Allow return values from
8073         NewDelegate to also include AnonymousMethods.
8074
8075         Fixes #70150.
8076
8077 2004-11-29  Raja R Harinath  <rharinath@novell.com>
8078
8079         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
8080         cs1648 report.
8081         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
8082         System.Runtime.InteropServices._Exception, since it's a base
8083         interface of the core type System.Exception in the net_2_0 profile.
8084
8085 2004-11-27  Martin Baulig  <martin@ximian.com>
8086
8087         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
8088
8089 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8090
8091         * Makefile: Convert to use executable.make.
8092         * gmcs.exe.sources: New.
8093
8094 2004-11-25  Martin Baulig  <martin@ximian.com>
8095
8096         * expression.cs (Invocation.InferType): Added support for byref types.
8097
8098 2004-11-25  Martin Baulig  <martin@ximian.com>
8099
8100         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
8101         in TypeManager.TypeToCoreType().
8102
8103 2004-11-25  Martin Baulig  <martin@ximian.com>
8104
8105         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
8106         "Dispose" method from the `current_type'.
8107         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
8108         DoDefineMembers() instead of using the MethodBuilder; this is
8109         required for generic iterators.
8110
8111         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
8112
8113 2004-11-24  Martin Baulig  <martin@ximian.com>
8114
8115         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
8116
8117 2004-11-20  Martin Baulig  <martin@ximian.com>
8118
8119         * expression.cs (Invocation.InferType): Correctly infer generic
8120         instances; see gen-103.cs.
8121         (Invocation.InferTypeArguments): If a generic method doesn't have
8122         any unbound type parameters, we don't need to infer anything.
8123
8124 2004-11-19  Raja R Harinath  <rharinath@novell.com>
8125
8126         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
8127
8128 2004-11-17  Raja R Harinath  <rharinath@novell.com>
8129
8130         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
8131         (TypeHandle.GetMemberCache): New.
8132         (TypeHandle.TypeHandle): Update.
8133         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
8134         (TypeManager.LookupParentInterfacesCache):
8135         Rename from LookupInterfaceCache.  Optimize slightly.
8136         (TypeManager.MemberLookup_FindMembers): Update.
8137         * decl.cs (MemberCache.MemberCache): Set Container to null in the
8138         multi-type variant.
8139         (AddCacheContents): Rename from AddHashtable.
8140         * class.cs (TypeContainer.parent_container): Remove.
8141         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
8142         (TypeContainer.DoDefineMembers): Don't initialize it.
8143         Update to name changes.
8144         
8145 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
8146
8147         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
8148         that factors the code to check access modifiers on override.  
8149
8150         (PropertyBase): Use the code here.
8151
8152         Patch from Lluis S'anchez, fixes bug #69361.
8153
8154 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
8155
8156         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
8157         routine that is used to report the use of a captured variable
8158         whose address has been taken.
8159
8160         There are two checks: one when variables are being captured and
8161         the other check is when the address of a variable is taken. 
8162         
8163         (because an anonymous methods might be resolved before *or* after
8164         the address has been taken) and 
8165
8166         * expression.cs (Conditional.DoResolve): Remove the special
8167         casing that Martin added to trueExpr and falseExpr being both
8168         NullLiteral.  We get the right behavior now just by introducing
8169         the null_type into the compiler. 
8170
8171         * convert.cs (ExplicitConversion): Change the code to use
8172         null_type instead of testing `expr is NullLiteral'.
8173         (ImplicitConversionStandard): use null_type too.
8174         (ImplicitReferenceConversionExists): use null_type too.
8175         (ImplicitReferenceConversion): use null_type too.
8176
8177         * literal.cs: The type of `NullLiteral' is now null_type instead
8178         of object_type. 
8179         (Resolve): Set the type here.
8180
8181         * typemanager.cs: Introduce null_type.
8182
8183 2004-11-18  Martin Baulig  <martin@ximian.com>
8184
8185         * rootcontext.cs
8186         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
8187
8188 2004-11-18  Martin Baulig  <martin@ximian.com>
8189
8190         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
8191
8192 2004-11-18  Martin Baulig  <martin@ximian.com>
8193
8194         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
8195         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
8196         call ResolveConstructedType() on it to resolve it without checking
8197         constraints.
8198         (Constraints.ResolveTypes): Check them here.
8199         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
8200         but don't check constraints.
8201         (ConstructedType.ResolveAsTypeTerminal): Override this and also
8202         check constraints here.
8203         (ConstructedType.ResolveConstructedType): New public method.  This
8204         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
8205         resolve ourselves without checking constraints.
8206
8207         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
8208
8209 2004-11-18  Martin Baulig  <martin@ximian.com>
8210
8211         * decl.cs
8212         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
8213
8214         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
8215
8216 2004-11-18  Martin Baulig  <martin@ximian.com>
8217
8218         * ecore.cs (TypeExpr.ResolveType): Removed.
8219         (Expression.ResolveAsTypeTerminal): We always return a fully
8220         resolved `TypeExpr', so we can just access its `Type'.
8221
8222         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
8223
8224 2004-11-17  Martin Baulig  <martin@ximian.com>
8225
8226         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
8227         sure we don't return any unresolved TypeExpr's.
8228         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
8229         a `TypeExpr'.
8230         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
8231
8232         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
8233         unresolved `ConstructedType's.
8234
8235 2004-11-17  Martin Baulig  <martin@ximian.com>
8236
8237         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
8238
8239 2004-11-17  Martin Baulig  <martin@ximian.com>
8240
8241         * ecore.cs
8242         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
8243
8244         * decl.cs (DeclSpace.ResolveType): Removed.
8245         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
8246
8247 2004-11-17  Martin Baulig  <martin@ximian.com>
8248
8249         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
8250         direction, like FindMembers() does.  Fixes #69546, testcase is in
8251         test-315.cs.    
8252
8253 2004-11-16  Martin Baulig  <martin@ximian.com>
8254
8255         This is based on a patch from Marek Safar, see bug #69082.
8256         Fixes bugs #63705 and #67130.
8257
8258         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
8259         method; create a MemberCache for an interface type and cache the
8260         result.
8261
8262         * decl.cs (IMemberContainer.ParentContainer): Removed.
8263         (IMemberContainer.ParentCache): New property.
8264         (MemberCache.SetupCacheForInterface): Removed.
8265         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
8266         to create a cache for an interface's "parent".
8267
8268         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
8269         interfaces too.
8270
8271 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
8272
8273         * statement.cs: Avoid adding bools to a hashtable.
8274
8275 2004-11-15  Martin Baulig  <martin@ximian.com>
8276
8277         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
8278
8279 2004-11-11  Martin Baulig  <martin@ximian.com>
8280
8281         * typemanager.cs (TypeManager.GetMethodName): New method.
8282
8283         * class.cs (MethodData.Define): Include the generic arity in the
8284         name of an explicit interface; also add it to the method name.
8285
8286         * pending.cs (PendingImplementation.InterfaceMethod): The method
8287         name now includes the generic arity.
8288
8289 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
8290
8291         * expression.cs (Invocation.OverloadResolve): Flag error if we are
8292         calling an unsafe method from a safe location.
8293
8294 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
8295
8296         Fix #69167
8297         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
8298
8299 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
8300
8301         * namespace.cs (VerifyUsing): use GetPartialName instead of
8302         ToString. 
8303
8304 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
8305
8306         * statement.cs (Return.Resolve): Fix regression in typo: if
8307         `in_exc', we have to request a NeedReturnLabel, this was a typo
8308         introduced in the anonymous method check-in.  Fixes #69131.
8309
8310         * Indexers were using the ShortName when defining themselves,
8311         causing a regression in the compiler bootstrap when applying the
8312         patch from 2004-11-02 (first part), now they use their full name
8313         and the bug is gone.
8314
8315 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
8316
8317         * driver.cs: Strip the path from the names of embedded resources. Fixes
8318         #68519.
8319
8320 2004-11-04  Raja R Harinath  <rharinath@novell.com>
8321
8322         Fix error message regression: cs0104-2.cs.
8323         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
8324         (AliasEntry.Resolve): Update.
8325         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
8326         'silent' flag.
8327         (RootContext.LookupType): Update.
8328
8329 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
8330
8331         * cs-parser.jay: Add support for handling accessor modifiers
8332         * class: Add support port accessor modifiers and error checking,
8333         define PropertyMethod.Define as virtual (not abstract anymore)
8334         * ecore.cs: Add checking for proeprties access with access modifiers
8335         * iterators.cs: Modify Accessor constructor call based in the modified
8336         constructor
8337 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
8338
8339         * expression.cs (StringConcat): Handle being called twice,
8340         as when we have a concat in a field init with more than two
8341         ctors in the class
8342
8343 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
8344
8345         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
8346         special case explicit implementations, we should always produce
8347         the .property or .event declaration.
8348         
8349         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
8350         since it will not return correct data if people use this
8351         unresolved in the presence of using statements (see test-313).
8352
8353         * class.cs (MethodData.Define): If we are an explicit interface
8354         implementation, set the method name to the full name of the
8355         interface plus the name of the method.  
8356
8357         Notice that using the method.MethodName.GetFullName() does not
8358         work, as it will only contain the name as declared on the source
8359         file (it can be a shorthand in the presence of using statements)
8360         and not the fully qualifed type name, for example:
8361
8362         using System;
8363
8364         class D : ICloneable {
8365                 object ICloneable.Clone ()  {
8366                 }
8367         }
8368
8369         Would produce a method called `ICloneable.Clone' instead of
8370         `System.ICloneable.Clone'.
8371
8372         * namespace.cs (Alias.Resolve): Use GetPartialName.
8373         
8374 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8375
8376         * cs-parser.jay: Add error 1055 report.
8377
8378 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
8379
8380         * assign.cs (Assign.DoResolve): Only do the transform of
8381         assignment into a New if the types are compatible, if not, fall
8382         through and let the implicit code deal with the errors and with
8383         the necessary conversions. 
8384
8385 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8386
8387         * cs-parser.jay: Add error 1031 report.
8388
8389         * cs-tokenizer.cs: Add location for error 1038.
8390
8391 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8392
8393         * cs-parser.jay: Add error 1016 report.
8394
8395 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8396
8397         * cs-parser.jay: Add errors 1575,1611 report.
8398
8399 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8400
8401         * cs-parser.jay: Add error 1001 report.
8402
8403 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8404
8405         Fix #68850
8406         * attribute.cs (GetMarshal): Add method argument for
8407         caller identification.
8408
8409         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
8410         agument for GetMarshal and RuntimeMissingSupport.
8411
8412 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8413
8414         * attribute.cs (ExtractSecurityPermissionSet): Removed
8415         TypeManager.code_access_permission_type.
8416
8417         * typemanager.cs: Removed TypeManager.code_access_permission_type.
8418
8419 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
8420
8421         * expression.cs (LocalVariableReference.DoResolveLValue): Check
8422         for obsolete use of a variable here.   Fixes regression on errors
8423         cs0619-25 and cs0619-26.
8424
8425 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
8426
8427         Fix #62358, implemented security attribute encoding.
8428
8429         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
8430         Tests permitted SecurityAction for assembly or other types.
8431         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
8432         data from SecurityPermissionAttribute to PermisionSet class.
8433
8434         * class.cs (ApplyAttributeBuilder): Added special handling
8435         for System.Security.Permissions.SecurityAttribute based types.
8436
8437         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
8438         special handling for System.Security.Permissions.SecurityAttribute
8439         based types.
8440
8441         * enum.cs (ApplyAttributeBuilder): Added special handling
8442         for System.Security.Permissions.SecurityAttribute based types.
8443
8444         * parameter.cs (ApplyAttributeBuilder): Added special handling
8445         for System.Security.Permissions.SecurityAttribute based types.
8446
8447         * rootcontext.cs: Next 2 core types.
8448
8449         * typemanager.cs (TypeManager.security_permission_attr_type):
8450         Built in type for the SecurityPermission Attribute.
8451         (code_access_permission_type): Build in type.
8452
8453 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
8454
8455         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
8456         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
8457         all of this information into
8458         EmitContext.EmitCapturedVariableInstance.
8459         
8460         * codegen.cs (EmitCapturedVariableInstance): move here the
8461         funcionality of emitting an ldarg.0 in the presence of a
8462         remapping.   This centralizes the instance emit code.
8463
8464         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8465         then emit a load of this: it means that we have reached the
8466         topmost ScopeInfo: the one that contains the pointer to the
8467         instance of the class hosting the anonymous method.
8468
8469         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8470         captures to the topmost CaptureContext.
8471
8472 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8473
8474         * expression.cs (LocalVariableReference): Move the knowledge about
8475         the iterators into codegen's EmitCapturedVariableInstance.
8476
8477 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8478
8479         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8480         all code paths return a value from an anonymous method (it is the
8481         same as the 161 error, but for anonymous methods).
8482
8483 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8484
8485         The introduction of anonymous methods in the compiler changed
8486         various ways of doing things in the compiler.  The most
8487         significant one is the hard split between the resolution phase
8488         and the emission phases of the compiler.
8489
8490         For instance, routines that referenced local variables no
8491         longer can safely create temporary variables during the
8492         resolution phase: they must do so from the emission phase,
8493         since the variable might have been "captured", hence access to
8494         it can not be done with the local-variable operations from the runtime.
8495         
8496         * statement.cs 
8497
8498         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8499         is a toplevel block.
8500
8501         (ToplevelBlock): A new kind of Block, these are the blocks that
8502         are created by the parser for all toplevel method bodies.  These
8503         include methods, accessors and anonymous methods.
8504
8505         These contain some extra information not found in regular blocks:
8506         A pointer to an optional CaptureContext (for tracking captured
8507         local variables and parameters).  A pointer to the parent
8508         ToplevelBlock.
8509         
8510         (Return.Resolve): Catch missmatches when returning a value from an
8511         anonymous method (error 1662).
8512         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8513         phase.
8514
8515         (Break.Resolve): ditto.
8516
8517         (SwitchLabel): instead of defining the labels during the
8518         resolution phase, we now turned the public ILLabel and ILLabelCode
8519         labels into methods called GetILLabelCode() and GetILLabel() that
8520         only define the label during the Emit phase.
8521
8522         (GotoCase): Track the SwitchLabel instead of the computed label
8523         (its contained therein).  Emit the code by using
8524         SwitchLabel.GetILLabelCode ().
8525
8526         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8527         whether the Local has been captured or not.
8528
8529         (LocalInfo.IsCaptured): New property, used to tell whether the
8530         local has been captured.
8531         
8532         * anonymous.cs: Vastly updated to contain the anonymous method
8533         support.
8534
8535         The main classes here are: CaptureContext which tracks any
8536         captured information for a toplevel block and ScopeInfo used to
8537         track the activation frames for various local variables.   
8538
8539         Each toplevel block has an optional capture context associated
8540         with it.  When a method contains an anonymous method both the
8541         toplevel method and the anonymous method will create a capture
8542         context.   When variables or parameters are captured, they are
8543         recorded on the CaptureContext that owns them, for example:
8544
8545         void Demo () {
8546              int a;
8547              MyDelegate d = delegate {
8548                  a = 1;
8549              }
8550         }
8551
8552         Here `a' will be recorded as captured on the toplevel
8553         CapturedContext, the inner captured context will not have anything
8554         (it will only have data if local variables or parameters from it
8555         are captured in a nested anonymous method.
8556
8557         The ScopeInfo is used to track the activation frames for local
8558         variables, for example:
8559
8560         for (int i = 0; i < 10; i++)
8561                 for (int j = 0; j < 10; j++){
8562                    MyDelegate d = delegate {
8563                         call (i, j);
8564                    }
8565                 }
8566
8567         At runtime this captures a single captured variable `i', but it
8568         captures 10 different versions of the variable `j'.  The variable
8569         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8570         recorded on a child.  
8571
8572         The toplevel ScopeInfo will also track information like the `this'
8573         pointer if instance variables were referenced (this is necessary
8574         as the anonymous method lives inside a nested class in the host
8575         type of the method). 
8576
8577         (AnonymousMethod): Expanded to track the Toplevel, implement
8578         `AnonymousMethod.Compatible' to tell whether an anonymous method
8579         can be converted to a target delegate type. 
8580
8581         The routine now also produces the anonymous method content
8582
8583         (AnonymousDelegate): A helper class that derives from
8584         DelegateCreation, this is used to generate the code necessary to
8585         produce the delegate for the anonymous method that was created. 
8586
8587         * assign.cs: API adjustments for new changes in
8588         Convert.ImplicitStandardConversionExists.
8589
8590         * class.cs: Adjustments to cope with the fact that now toplevel
8591         blocks are of type `ToplevelBlock'. 
8592
8593         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
8594         insteda of standard blocks.
8595
8596         Flag errors if params arguments are passed to anonymous methods.
8597
8598         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
8599         `CurrentAnonymousMethod' which points to the current Anonymous
8600         Method.  The variable points to the AnonymousMethod class that
8601         holds the code being compiled.  It is set in the new EmitContext
8602         created for the anonymous method.
8603
8604         (EmitContext.Phase): Introduce a variable and an enumeration to
8605         assist in enforcing some rules about when and where we are allowed
8606         to invoke certain methods (EmitContext.NeedsReturnLabel is the
8607         only one that enfonces this right now).
8608
8609         (EmitContext.HaveCaptureInfo): new helper method that returns
8610         whether we have a CapturedContext initialized.
8611
8612         (EmitContext.CaptureVariable): New method used to register that a
8613         LocalInfo must be flagged for capturing. 
8614
8615         (EmitContext.CapturedParameter): New method used to register that a
8616         parameters must be flagged for capturing. 
8617         
8618         (EmitContext.CapturedField): New method used to register that a
8619         field must be flagged for capturing. 
8620
8621         (EmitContext.HaveCapturedVariables,
8622         EmitContext.HaveCapturedFields): Return whether there are captured
8623         variables or fields. 
8624
8625         (EmitContext.EmitMethodHostInstance): This is used to emit the
8626         instance for the anonymous method.  The instance might be null
8627         (static methods), this (for anonymous methods that capture nothing
8628         and happen to live side-by-side with the current method body) or a
8629         more complicated expression if the method has a CaptureContext.
8630
8631         (EmitContext.EmitTopBlock): Routine that drives the emission of
8632         code: it will first resolve the top block, then emit any metadata
8633         and then emit the code.  The split is done so that we can extract
8634         any anonymous methods and flag any captured variables/parameters.
8635         
8636         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
8637         during this phase, the ILGenerator should not be used as labels
8638         and local variables declared here might not be accessible to any
8639         code that is part of an anonymous method.  
8640
8641         Exceptions to this include the temporary variables that are
8642         created by some statements internally for holding temporary
8643         variables. 
8644         
8645         (EmitContext.EmitMeta): New routine, in charge of emitting all the
8646         metadata for a cb
8647
8648         (EmitContext.TemporaryReturn): This method is typically called
8649         from the Emit phase, and its the only place where we allow the
8650         ReturnLabel to be defined other than the EmitMeta.  The reason is
8651         that otherwise we would have to duplicate a lot of logic in the
8652         Resolve phases of various methods that today is on the Emit
8653         phase. 
8654
8655         (EmitContext.NeedReturnLabel): This no longer creates the label,
8656         as the ILGenerator is not valid during the resolve phase.
8657
8658         (EmitContext.EmitThis): Extended the knowledge in this class to
8659         work in anonymous methods in addition to iterators. 
8660
8661         (EmitContext.EmitCapturedVariableInstance): This emits whatever
8662         code is necessary on the stack to access the instance to a local
8663         variable (the variable will be accessed as a field).
8664
8665         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
8666         EmitContext.EmitAddressOfParameter): Routines to support
8667         parameters (not completed at this point). 
8668         
8669         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
8670         will also remove the parameters.
8671
8672         * convert.cs (Convert): Define a `ConstantEC' which points to a
8673         null.  This is just to prefity some code that uses
8674         ImplicitStandardConversion code and do not have an EmitContext
8675         handy.
8676
8677         The idea is to flag explicitly that at that point in time, it is
8678         known that the conversion will not trigger the delegate checking
8679         code in implicit conversions (which requires a valid
8680         EmitContext). 
8681
8682         Everywhere: pass new EmitContext parameter since
8683         ImplicitStandardConversionExists now requires it to check for
8684         anonymous method conversions. 
8685
8686         (Convert.ImplicitStandardConversionExists): If the type of an
8687         expression is the anonymous_method_type, and the type is a
8688         delegate, we invoke the AnonymousMethod.Compatible method to check
8689         whether an implicit conversion is possible. 
8690
8691         (Convert.ImplicitConversionStandard): Only do implicit method
8692         group conversions if the language level is not ISO_1.
8693
8694         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
8695         MethodInfo for the Invoke method.  used by Delegate and
8696         AnonymousDelegate.
8697
8698         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
8699         method conversions if the target type is a delegate.
8700
8701         Removed extra debugging nops.
8702
8703         (LocalVariableReference): Turn the `local_info' into a public
8704         field. 
8705
8706         Add `prepared' field, the same hack used for FieldExprs to cope
8707         with composed assignments, as Local variables do not necessarily
8708         operate purely on the stack as they used to: they can be captured
8709         fields. 
8710
8711         Add `temp' for a temporary result, like fields.
8712
8713         Refactor DoResolve and DoResolveLValue into DoResolveBase.
8714
8715         It now copes with Local variables that are captured and emits the
8716         proper instance variable to load it from a field in the captured
8717         case. 
8718
8719         (ParameterReference.DoResolveBase): During the resolve phase,
8720         capture parameters if we are in an anonymous method.
8721
8722         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
8723         anonymous method, use the EmitContext helper routines to emit the
8724         parameter reference.
8725
8726         * iterators.cs: Set RemapToProxy to true/false during the
8727         EmitDispose class.
8728
8729         * parameters.cs (GetParameterByName): New helper method. 
8730
8731         * typemanager.cs (anonymous_method_type) a new type that
8732         represents an anonyous method.  This is always an internal type,
8733         used as a fencepost to test against the anonymous-methodness of an
8734         expression. 
8735         
8736 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
8737
8738         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
8739         561 report.
8740         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
8741
8742 2004-11-10  Martin Baulig  <martin@ximian.com>
8743
8744         * expression.cs (Invocation.BetterFunction): If two methods have
8745         equal parameter types, but only one of them is generic, the
8746         non-generic one wins.
8747         (New.DoResolve): Don't set `is_struct' to false if we're a generic
8748         instance; just use `Type.IsValueType' to determine whether
8749         something is a struct or not.
8750         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
8751         so we can be called multiple times.
8752
8753 2004-11-10  Martin Baulig  <martin@ximian.com>
8754
8755         * generic.cs (TypeParameter.DefineConstraints): New public method.
8756         (TypeParameter.CheckAccessLevel): Override this and return true.
8757         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
8758         override ResolveType() anymore.
8759         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
8760
8761 2004-11-10  Martin Baulig  <martin@ximian.com>
8762
8763         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
8764         call DeclSpace.ResolveNestedType() on it.
8765
8766 2004-11-10  Martin Baulig  <martin@ximian.com>
8767
8768         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
8769         non-null, call ParameterModifier() on it.
8770
8771 2004-11-10  Martin Baulig  <martin@ximian.com>
8772
8773         * iterators.cs
8774         (Iterators): Added `current_type' and `this_type' fields.
8775         (Iterators.DefineIterator): Create a new EmitContext and store it
8776         in `ec'; compute `this_type'.
8777
8778 2004-11-10  Martin Baulig  <martin@ximian.com>
8779
8780         * typemanager.cs
8781         (TypeManager.IsPrivateAccessible): New public method.
8782         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
8783
8784 2004-11-10  Martin Baulig  <martin@ximian.com>
8785
8786         * class.cs (TypeContainer.DefineType): Call
8787         TypeBuilder.DefineGenericParameters() before resolving the type
8788         parameters.
8789         (MethodData.parent_method): New protected field.
8790         (MethodData..ctor): Added `MethodInfo parent_method' argument.
8791         (MethodData.Define): Compute `parent_method'.
8792
8793         * decl.cs
8794         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
8795         (MemberCore.GetClsCompliantAttributeValue): Likewise.
8796         (DeclSpace.ec): New protected field; store the EmitContext here.
8797         (DeclSpace.EmitContext): New public property.
8798         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
8799         (DeclSpace.ResolveNestedType): New public method.
8800         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
8801         (DeclSpace.NestedAccessible): Added `Type tb' argument.
8802         (DeclSpace.FamilyAccessible): Likewise.
8803         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
8804         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
8805         EmitContext.
8806
8807         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
8808         field.
8809
8810         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
8811         (Enum.Emit): Don't create a new EmitContext.
8812
8813 2004-10-18  Martin Baulig  <martin@ximian.com>
8814
8815         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
8816         `Type' directly, but call ResolveType() on it.
8817         (Catch.Resolve): Likewise.
8818         (Foreach.Resolve): Likewise.
8819
8820 2004-10-18  Martin Baulig  <martin@ximian.com>
8821
8822         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
8823         `Type' directly, but call ResolveType() on it.
8824         (Probe.DoResolve): Likewise.
8825         (ArrayCreation.LookupType): Likewise.
8826         (TypeOf.DoResolve): Likewise.
8827         (SizeOf.DoResolve): Likewise.
8828
8829 2004-10-18  Raja R Harinath  <rharinath@novell.com>
8830
8831         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
8832         the ResolveType.
8833
8834 2004-10-17  John Luke  <john.luke@gmail.com>
8835
8836         * class.cs (Operator.GetSignatureForError): use CSharpName
8837
8838         * parameter.cs (Parameter.GetSignatureForError): Returns
8839         correct name even if was not defined.
8840
8841 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8842
8843         Fix #65816.
8844         * class.cs (TypeContainer.EmitContext): New property.
8845         (DefineNestedTypes): Create an emitcontext for each part.
8846         (MethodCore.DoDefineParameters): Use container's emitcontext.
8847         Pass type array to InternalParameters.
8848         (MemberBase.DoDefine): Use container's emitcontext.
8849         (FieldMember.Define): Likewise.
8850         (Event.Define): Likewise.
8851         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8852         Pass type array to InternalParameters.
8853         (SetIndexerMethod.GetParameterInfo): Likewise.
8854         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8855         * delegate.cs (Define): Pass emitcontext to
8856         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8857         array to InternalParameters.
8858         * expression.cs (ParameterReference.DoResolveBase): Pass
8859         emitcontext to GetParameterInfo.
8860         (ComposedCast.DoResolveAsTypeStep): Remove check on
8861         ec.ResolvingTypeTree.
8862         * parameter.cs (Parameter.Resolve): Change argument to
8863         EmitContext.  Use ResolveAsTypeTerminal.
8864         (Parameter.GetSignature): Change argument to EmitContext.
8865         (Parameters.ComputeSignature): Likewise.
8866         (Parameters.ComputeParameterTypes): Likewise.
8867         (Parameters.GetParameterInfo): Likewise.
8868         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8869         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8870         * support.cs (InternalParameters..ctor): Remove variant that takes
8871         a DeclSpace.
8872         * typemanager.cs (system_intptr_expr): New.
8873         (InitExpressionTypes): Initialize it.
8874
8875 2004-10-12  Chris Toshok  <toshok@ximian.com>
8876
8877         * cs-parser.jay: fix location for try_statement and catch_clause.
8878
8879 2004-10-18  Martin Baulig  <martin@ximian.com>
8880
8881         * class.cs (FieldMember.Define): Don't access the TypeExpr's
8882         `Type' directly, but call ResolveType() on it.
8883         (MemberBase.DoDefine): Likewise.
8884
8885         * expression.cs (New.DoResolve): Don't access the TypeExpr's
8886         `Type' directly, but call ResolveType() on it.
8887         (ComposedCast.DoResolveAsTypeStep): Likewise.
8888
8889         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
8890         `Type' directly, but call ResolveType() on it.
8891
8892 2004-10-17  John Luke  <john.luke@gmail.com>
8893
8894         * class.cs (Operator.GetSignatureForError): use CSharpName
8895
8896         * parameter.cs (Parameter.GetSignatureForError): Returns
8897         correct name even if was not defined.
8898
8899 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8900
8901         Fix #65816.
8902         * class.cs (TypeContainer.EmitContext): New property.
8903         (DefineNestedTypes): Create an emitcontext for each part.
8904         (MethodCore.DoDefineParameters): Use container's emitcontext.
8905         Pass type array to InternalParameters.
8906         (MemberBase.DoDefine): Use container's emitcontext.
8907         (FieldMember.Define): Likewise.
8908         (Event.Define): Likewise.
8909         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8910         Pass type array to InternalParameters.
8911         (SetIndexerMethod.GetParameterInfo): Likewise.
8912         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8913         * delegate.cs (Define): Pass emitcontext to
8914         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8915         array to InternalParameters.
8916         * expression.cs (ParameterReference.DoResolveBase): Pass
8917         emitcontext to GetParameterInfo.
8918         (ComposedCast.DoResolveAsTypeStep): Remove check on
8919         ec.ResolvingTypeTree.
8920         * parameter.cs (Parameter.Resolve): Change argument to
8921         EmitContext.  Use ResolveAsTypeTerminal.
8922         (Parameter.GetSignature): Change argument to EmitContext.
8923         (Parameters.ComputeSignature): Likewise.
8924         (Parameters.ComputeParameterTypes): Likewise.
8925         (Parameters.GetParameterInfo): Likewise.
8926         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8927         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8928         * support.cs (InternalParameters..ctor): Remove variant that takes
8929         a DeclSpace.
8930         * typemanager.cs (system_intptr_expr): New.
8931         (InitExpressionTypes): Initialize it.
8932
8933 2004-10-12  Chris Toshok  <toshok@ximian.com>
8934
8935         * cs-parser.jay: fix location for try_statement and catch_clause.
8936
8937 2004-10-07  Raja R Harinath  <rharinath@novell.com>
8938
8939         More DeclSpace.ResolveType avoidance.
8940         * decl.cs (MemberCore.InUnsafe): New property.
8941         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
8942         with newly created EmitContext.
8943         (FieldMember.Define): Likewise.
8944         * delegate.cs (Delegate.Define): Likewise.
8945         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
8946         only if normal name-lookup fails.
8947         (TypeExpr.DoResolve): Enable error-checking.
8948         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
8949         (SizeOf.DoResolve): Likewise.
8950         (ComposedCast.DoResolveAsTypeStep): Likewise.
8951         (StackAlloc.DoResolve): Likewise.
8952         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
8953         (Block.Unsafe): New property.
8954         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
8955         (Unsafe): Set 'unsafe' flag of contained block.
8956         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
8957         (Fixed.Resolve): Likewise.
8958         (Catch.Resolve): Likewise.
8959         (Using.ResolveLocalVariableDecls): Likewise.
8960         (Foreach.Resolve): Likewise.
8961
8962 2004-10-05  John Luke <john.luke@gmail.com>
8963
8964         * cs-parser.jay: add location to error CS0175
8965
8966 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
8967
8968         * ecore.cs (Expression.Constantity): Add support for turning null
8969         into a constant.
8970
8971         * const.cs (Const.Define): Allow constants to be reference types
8972         as long as the value is Null.
8973
8974 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
8975
8976         * namespace.cs (NamespaceEntry.Using): No matter which warning
8977         level is set, check if this namespace name has already been added.
8978
8979 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
8980
8981         * expression.cs: reftype [!=]= null should always use br[true,false].
8982         # 67410
8983
8984 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
8985
8986         Fix #67108
8987         * attribute.cs: Enum conversion moved to 
8988         GetAttributeArgumentExpression to be applied to the all
8989         expressions.
8990
8991 2004-10-01  Raja R Harinath  <rharinath@novell.com>
8992
8993         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
8994         * class.c (TypeContainer.DefineType): Flag error if
8995         base types aren't accessible due to access permissions.
8996         * decl.cs (DeclSpace.ResolveType): Move logic to
8997         Expression.ResolveAsTypeTerminal.
8998         (DeclSpace.ResolveTypeExpr): Thin layer over
8999         Expression.ResolveAsTypeTerminal.
9000         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
9001         Refactor code into NestedAccess.  Use it.
9002         (DeclSpace.NestedAccess): New.
9003         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
9004         argument to silence errors.  Check access permissions.
9005         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
9006         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
9007         (Cast.DoResolve): Likewise.
9008         (New.DoResolve): Likewise.
9009         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
9010         (TypeOf.DoResolve): Likewise.
9011
9012         * expression.cs (Invocation.BetterConversion): Return the Type of
9013         the better conversion.  Implement section 14.4.2.3 more faithfully.
9014         (Invocation.BetterFunction): Make boolean.  Make correspondence to
9015         section 14.4.2.2 explicit.
9016         (Invocation.OverloadResolve): Update.
9017         (Invocation): Remove is_base field.
9018         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
9019         (Invocation.Emit): Likewise.
9020
9021 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
9022
9023         * cs-parser.jay: Reverted 642 warning fix.
9024
9025 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9026
9027         Fix bug #66615
9028         * decl.cs (FindMemberWithSameName): Indexer can have more than
9029         1 argument.
9030
9031 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9032
9033         * expression.cs (LocalVariableReference.DoResolveLValue):
9034         Do not report warning 219 for out values.
9035         (EmptyExpression.Null): New member to avoid extra allocations.
9036
9037 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9038
9039         * cs-parser.jay: Fix wrong warning 642 report.
9040
9041         * cs-tokenizer.cs (CheckNextToken): New helper;
9042         Inspect next character if is same as expected.
9043
9044 2004-09-23  Martin Baulig  <martin@ximian.com>
9045
9046         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9047         (Convert.ImplicitReferenceConversionExists): Likewise.
9048
9049 2004-11-09  Raja R Harinath  <rharinath@novell.com>
9050
9051         * Makefile (DISTFILES): Comment out a few missing files.
9052
9053 2004-10-29  Raja R Harinath  <rharinath@novell.com>
9054
9055         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
9056         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
9057         (gmcs.exe): Invoke bootstrap-libs.
9058         (clean-local): Clean the net_2_0_bootstrap profile too.
9059         (PROGRAM_INSTALL_DIR): New.
9060         (install-local): Use it.
9061
9062 2004-10-13  Martin Baulig  <martin@ximian.com>
9063
9064         * generic.cs (TypeManager.InflatedConstraints): New nested class.
9065         (TypeParameter.DefineType): If we're a method type parameter and
9066         that method is overriding something, "inflate" its constraints.
9067
9068 2004-10-12  Martin Baulig  <martin@ximian.com>
9069
9070         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
9071         and have type arguments, create and resolve a ConstructedType.
9072
9073 2004-10-12  Martin Baulig  <martin@ximian.com>
9074
9075         * decl.cs (MemberCache.FindMemberToOverride): Use
9076         TypeManager.IsEqual() to compare the parameters and Type.Equals()
9077         to compare the invocationType.
9078
9079         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
9080         When comparing two type parameters, only do the signature-only
9081         comparision for method type parameters.
9082
9083 2004-10-11  Martin Baulig  <martin@ximian.com>
9084
9085         * report.cs: Don't make --fatal abort on warnings, we have
9086         -warnaserror for that.
9087
9088 2004-10-11  Martin Baulig  <martin@ximian.com>
9089
9090         * typemanager.cs
9091         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
9092         (TypeManager.IsEqual): Call ourself recursively instead of using
9093         Type.IsEqual(). 
9094
9095 2004-10-11  Martin Baulig  <martin@ximian.com>
9096
9097         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
9098         on our own type parameters, not on the ones we inherit from a containing
9099         class.
9100
9101         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
9102         the comparision.
9103
9104         * generic.cs (TypeParameter.Define): We may only be called once.
9105
9106         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
9107         instead of TypeManager.IsEqual().
9108
9109 2004-09-28  Martin Baulig  <martin@ximian.com>
9110
9111         * generic.cs
9112         (GenericConstraints.EffectiveBaseClass): New public property.
9113         (TypeParameter.GenericConstraints): New public property.
9114         (ConstructedType.CheckConstraints): Improved.
9115
9116         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
9117         (Convert.TypeParameterConversion): New private method; use this in
9118         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
9119         for all conversions related to type parameters.
9120
9121 2004-09-24  Martin Baulig  <martin@ximian.com>
9122
9123         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
9124         type parameter conversions for type parameters which are known to
9125         be reference types.
9126
9127 2004-09-24  Martin Baulig  <martin@ximian.com>
9128
9129         * generic.cs (GenericConstraints): Added `IsReferenceType' and
9130         `IsValueType' properties.
9131
9132         * support.cs (ReflectionConstraints): Use
9133         Type.GetGenericParameterConstraints() instead of the old hack.
9134
9135 2004-09-24  Martin Baulig  <martin@ximian.com>
9136
9137         * generic.cs (GenericConstraints): Moved here and made it an
9138         abstract class.
9139
9140         * support.cs (GenericConstraints): Moved to generic.cs.
9141
9142 2004-09-24  Martin Baulig  <martin@ximian.com>
9143
9144         * support.cs
9145         (ReflectionConstraints): Un-nested this class and made it public.
9146
9147         * typemanager.cs
9148         (TypeManager.GetTypeParameterConstraints): New public method.
9149         (TypeManager.HasConstructorConstraint): Use the attributes.
9150
9151 2004-09-24  Martin Baulig  <martin@ximian.com>
9152
9153         * support.cs (GenericConstraints): Replaced `HasConstructor',
9154         `IsReferenceType' and `IsValueType' with `Attributes'.
9155         (ReflectionParameters.ReflectionConstraints): Removed the Create()
9156         method and made the .ctor public.
9157
9158         * generic.cs (Constraints.Attributes): New public property.
9159         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
9160         `IsReferenceType' -> `HasReferenceTypeConstraint' and
9161         `IsValueType' -> `HasValueTypeConstraint'.
9162
9163 2004-09-23  Martin Baulig  <martin@ximian.com>
9164
9165         * generic.cs (Constraints): Reflect latest runtime changes.
9166
9167 2004-09-23  Martin Baulig  <martin@ximian.com>
9168
9169         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9170         (Convert.ImplicitReferenceConversionExists): Likewise.
9171
9172 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9173
9174         * class.cs (Operator.Define): Add error 448 and 559 report.
9175         
9176 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9177
9178         * class.cs (MemberBase.IsTypePermitted): New protected
9179         method for checking error CS0610.
9180
9181 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9182
9183         * class.cs (TypeContainer.HasExplicitLayout): New property
9184         Returns whether container has StructLayout attribute set Explicit.
9185         (FieldMember): New abstract class for consts and fields.
9186         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
9187         (Field): Reuse FieldMember.
9188
9189         * const.cs (Const): Reuse FieldMember.
9190
9191         * rootcontext.cs: EmitConstants call moved to class.
9192
9193 2004-09-22  Martin Baulig  <martin@ximian.com>
9194
9195         Marek and me just fixed one of our oldest bugs: #28562 :-)
9196
9197         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
9198
9199         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
9200         we're an EnumConstant, just return that.
9201         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
9202         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
9203         to get the value which'll actually be written into the attribute.
9204         However, we have to use GetValue() to access the attribute's value
9205         in the compiler.        
9206
9207 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9208
9209         * constant.cs (Constant.IsNegative): New abstract property
9210         IsNegative.
9211
9212         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
9213         (StackAlloc.DoResolve): Reused IsNegative.
9214
9215 2004-09-22  Martin Baulig  <martin@ximian.com>
9216
9217         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
9218         public method; like LookupTypeContainer, but also works for
9219         generic instances.
9220
9221         * report.cs (Report.SymbolRelatedToPreviousError): Use
9222         TypeManager.LookupGenericTypeContainer().       
9223
9224 2004-09-22  Martin Baulig  <martin@ximian.com>
9225
9226         Thanks to Peter Sestoft for this bug report.
9227
9228         * expression.cs (Conditional): If both the `trueExpr' and the
9229         `falseExpr' is a NullLiteral, return a NullLiteral.
9230
9231 2004-09-22  Martin Baulig  <martin@ximian.com>
9232
9233         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
9234         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
9235         for the "get_Current" call.
9236
9237 2004-09-21  Martin Baulig  <martin@ximian.com>
9238
9239         * convert.cs (Convert.ImplicitReferenceConversion): When
9240         converting to an interface type, first check whether we're
9241         converting from a reference type.
9242
9243 2004-09-14  Martin Baulig  <martin@ximian.com>
9244
9245         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
9246
9247 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
9248
9249         Fixed bug #61902
9250         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
9251         called and is obsolete then this member suppress message
9252         when call is inside next [Obsolete] method or type.
9253
9254         * expression.cs: Use TestObsoleteMethodUsage member.
9255
9256 2004-09-14  Martin Baulig  <martin@ximian.com>
9257
9258         * genericparser.cs: Removed.
9259
9260 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
9261
9262         * class.cs (MethodCore.CheckBase): Fix bug #65757.
9263
9264 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
9265
9266         * attribute.cs (Attribute.Resolve): Add error 653 report.
9267
9268         * class.cs (Class.ApplyAttributeBuilder): Add error 641
9269         report.
9270         (Method.ApplyAttributeBuilder): Add error 685 report.
9271         (Operator.Define): Add error 564 report.
9272
9273         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
9274
9275         * expression.cs (Invocation.DoResolve): Add error
9276         245 and 250 report.
9277
9278         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
9279         error 674 report.
9280
9281 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9282
9283         * class.cs (ConstructorInitializer.Resolve):
9284         Wrong error number (515->516).
9285
9286 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9287
9288         * class.cs (Indexer.Define): Add error 631 report.
9289
9290 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9291
9292         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
9293
9294 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9295
9296         * expression.cs (Probe.DoResolve): Add error CS0241 report.
9297
9298 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
9299
9300         * cs-parser.jay: Added error CS0241 report.
9301
9302 2004-09-10  Raja R Harinath  <rharinath@novell.com>
9303
9304         * cs-parser.jay (fixed_statement): Introduce a scope for the
9305         declaration in the 'fixed' statement.
9306
9307 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9308
9309         * cs-parser.jay: Added CS0230 error report.
9310
9311 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9312
9313         * cs-parser.jay: Added errors CS0231 and CS0257 report.
9314
9315 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9316
9317         * expression.cs (Argument.Resolve): Added error CS0192 and
9318         CS0199 report.
9319
9320 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9321
9322         C# 2.0 #pragma warning feature
9323
9324         * cs-tokenizer.cs (PreProcessPragma): New method; 
9325         Handles #pragma directive.
9326
9327         * report.cs (WarningRegions): New class; Support
9328         class for #pragma warning directive. It tests whether
9329         warning is enabled for a given line.
9330
9331 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
9332
9333         * const.cs: Add more descriptive error report, tahnks to
9334         Sebastien. 
9335
9336 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
9337
9338         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
9339
9340 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
9341
9342         * expression.cs: Apply patch from Ben: Remove dead code from
9343         ArrayCreation, and remove the TurnintoConstant call in const.cs,
9344         as that code just threw an exception anwyays.
9345
9346         * const.cs: Remove the call to the turnintoconstant, for details
9347         see bug: #63144
9348         
9349         * literal.cs: The type of the null-literal is the null type;  So
9350         we use a placeholder type (literal.cs:System.Null, defined here)
9351         for it.
9352
9353         * expression.cs (Conditional.DoResolve): Remove some old code that
9354         is no longer needed, conversions have been fixed.
9355
9356         (ArrayCreationExpression.DoResolve): Return false if we fail to
9357         resolve the inner expression.
9358
9359 2004-09-07  Raja R Harinath  <rharinath@novell.com>
9360
9361         Fix test-290.cs.
9362         * cs-parser.jay (delegate_declaration): Record a delegate
9363         declaration as a type declaration.
9364         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
9365
9366 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
9367
9368         * parameter.cs: Do not crash if the type can not be resolved. 
9369
9370         * expression.cs: Report errors with unsafe pointers, fixes #64896
9371
9372 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
9373
9374         * expression.cs: Pointer arith always needs to do a conv.i
9375         if the operand is a long. fix 65320
9376
9377 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9378
9379         Fixed cs0619-37.cs, cs0619-38.cs
9380
9381         * enum.cs (GetObsoleteAttribute): Removed.
9382
9383         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
9384         on Enum member is double staged. The first is tested member
9385         and then enum.
9386
9387 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9388
9389         Fixed #56986, #63631, #65231
9390
9391         * class.cs: (TypeContainer.AddToMemberContainer): New method,
9392         adds member to name container.
9393         (TypeContainer.AddToTypeContainer): New method, adds type to
9394         name container.
9395         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
9396         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
9397         AddOperator): Simplified by reusing AddToMemberContainer.
9398         (TypeContainer.UserDefinedStaticConstructor): Changed to property
9399         instead of field.
9400         (Method.CheckForDuplications): Fixed implementation to test all
9401         possibilities.
9402         (MemberBase): Detection whether member is explicit interface
9403         implementation is now in constructor.
9404         (MemberBase.UpdateMemberName): Handles IndexerName.
9405         (Accessor): Changed to keep also location information.
9406         (AbstractPropertyEventMethod): Is derived from MemberCore.
9407         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
9408         will be emited or not.
9409         (PropertyBase.AreAccessorsDuplicateImplementation):
9410         Tests whether accessors are not in collision with some method.
9411         (Operator): Is derived from MethodCore to simplify common
9412         operations.
9413
9414         * decl.cs (Flags.TestMethodDuplication): Test for duplication
9415         must be performed.
9416         (DeclSpace.AddToContainer): Adds the member to defined_names
9417         table. It tests for duplications and enclosing name conflicts.
9418
9419         * enum.cs (EnumMember): Clean up to reuse the base structures
9420
9421 2004-09-03  Martin Baulig  <martin@ximian.com>
9422
9423         Merged latest changes into gmcs.  Please keep this comment in
9424         here, it makes it easier for me to see what changed in MCS since
9425         the last time I merged.
9426
9427 2004-09-03  Martin Baulig  <martin@ximian.com>
9428
9429         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9430         into TypeContainer, to make partial classes work again.
9431
9432 2004-09-03  Martin Baulig  <martin@ximian.com>
9433
9434         * rootcontext.cs (RootContext.V2): Removed.
9435
9436 2004-03-23  Martin Baulig  <martin@ximian.com>
9437
9438         * expression.cs (Invocation.OverloadResolve): Added `bool
9439         may_fail' argument and use it instead of the Location.IsNull() hack.
9440
9441 2004-09-09  Martin Baulig  <martin@ximian.com>
9442
9443         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
9444
9445 2004-09-09  Martin Baulig  <martin@ximian.com>
9446
9447         * generic.cs (TypeParameter.DefineType): Added support for
9448         explicit interface methods.
9449
9450 2004-09-09  Martin Baulig  <martin@ximian.com>
9451
9452         * README.Changes: New document.  Started to list important changes
9453         between MCS and GMCS here.
9454
9455 2004-09-08  Martin Baulig  <martin@ximian.com>
9456
9457         * class.cs
9458         (TypeContainer.CheckRecursiveDefinition): New protected method.
9459         (TypeContainer.DefineType): Move the CS0146 check into
9460         CheckRecursiveDefinition().     
9461
9462 2004-09-06  Martin Baulig  <martin@ximian.com>
9463
9464         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9465         types for the constructor constraint.
9466
9467 2004-09-03  Martin Baulig  <martin@ximian.com>
9468
9469         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9470         into TypeContainer, to make partial classes work again.
9471
9472 2004-09-03  Martin Baulig  <martin@ximian.com>
9473
9474         * rootcontext.cs (RootContext.V2): Removed.
9475
9476 2004-03-23  Martin Baulig  <martin@ximian.com>
9477
9478         * expression.cs (Invocation.OverloadResolve): Added `bool
9479         may_fail' argument and use it instead of the Location.IsNull() hack.
9480
9481 2004-09-03  Martin Baulig  <martin@ximian.com>
9482
9483         Merged latest changes into gmcs.  Please keep this comment in
9484         here, it makes it easier for me to see what changed in MCS since
9485         the last time I merged.
9486
9487 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9488
9489         Fix #61128.
9490         * expression.cs (BetterConversion): Don't allow either conversion 
9491         to be null.  Remove redundant implicit conversion test when 'q ==
9492         null' -- when this function is invoked, we already know that the
9493         implicit conversion exists.
9494         (BetterFunction): Assume that 'best' is non-null.  Remove
9495         redundant reimplementation of IsApplicable when 'best' is null.
9496         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9497         number of arguments.
9498         (IsAncestralType): Extract from OverloadResolve.
9499         (OverloadResolve): Make robust to the MethodGroupExpr being
9500         unsorted.  Implement all the logic of Section 14.5.5.1, and
9501         support overloading of methods from multiple applicable types.
9502         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9503
9504         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9505         (RealError, Warning): Append type of report to related symbol.
9506
9507 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9508
9509         * enum.cs: Fixed CLS-Compliance checks for enum members.
9510         Error tests cs3008-8.cs, cs3014-8.cs
9511
9512 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9513
9514         Fixed bug #62342, #63102
9515         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9516         like ImplementMethod.
9517
9518 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9519
9520         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9521         Fixed bug #65170.
9522
9523 2004-09-02  Martin Baulig  <martin@ximian.com>
9524
9525         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9526         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9527         on the MethodBase.
9528
9529 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9530
9531         C# 2.0 Static classes implemented
9532
9533         * class.cs (TypeContainer): instance_constructors,
9534         initialized_fields, initialized_static_fields,
9535         default_constructor, base_inteface_types are protected to be
9536         accessible from StaticClass.
9537         (TypeContainer.DefineDefaultConstructor): New virtual method
9538         for custom default constructor generating
9539         (StaticClass): New class to handle "Static classes" feature.
9540
9541         * cs-parser.jay: Handle static keyword on class like instance
9542         of StaticClass.
9543
9544         * driver.cs: Added "/langversion" command line switch with two
9545         options (iso-1, default).
9546
9547 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9548
9549         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9550
9551 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9552
9553         * delegate.cs: Style.
9554
9555 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9556
9557         * delegate.cs: Add seperate instance expr field for miguel.
9558
9559 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9560
9561         * PointerArithmetic (Resolve): make sure we are not doing
9562         pointer arith on void*. Also, make sure we are resolved
9563         by not setting eclass until resolve.
9564
9565         All callers: Make sure that PointerArithmetic gets resolved.
9566
9567 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9568
9569         * ArrayCreation (LookupType): If the type does not resolve 
9570         to an array, give an error.
9571
9572 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9573
9574         * statement.cs (Try.Resolve): Fixed bug #64222
9575
9576 2004-08-27  Martin Baulig  <martin@ximian.com>
9577
9578         * class.cs
9579         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9580         crash here.     
9581
9582 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9583
9584         * ecore.cs (Constantify): Get underlying type via
9585         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9586         Windows in special cases.
9587
9588 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9589
9590         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9591         for obtaining also private methods.
9592         (GetRemoveMethod): Used GetRemoveMethod (true)
9593         for obtaining also private methods.
9594
9595 2004-09-02  Martin Baulig  <martin@ximian.com>
9596
9597         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9598         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9599         on the MethodBase.
9600
9601 2004-08-27  Martin Baulig  <martin@ximian.com>
9602
9603         * class.cs
9604         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9605         crash here.     
9606
9607 2004-08-25  Martin Baulig  <martin@ximian.com>
9608
9609         * support.cs (ReflectionParameters..ctor): If this is a generic
9610         method, retrieve and store its type parameters.
9611         (InternalParameters..ctor): Added `TypeParameter[]' argument.
9612         (ReflectionParameters.GenericConstraints): The argument specifies
9613         the type parameter, not the method parameter.
9614         (InternalParameters.GenericConstraints): Likewise.
9615
9616         * generic.cs (TypeParameter.DefineType): Correctly handle
9617         constraints wrt. generic methods in interfaces and their
9618         implementations.        
9619
9620 2004-08-24  Martin Baulig  <martin@ximian.com>
9621
9622         * generic.cs (TypeParameter.IsSubclassOf): New public method.
9623         (Constraints.IsSubclassOf): New internal method.
9624
9625         * typemanager.cs (TypeManager.FindMembers): Added special support
9626         for GenericTypeParameterBuilder's.      
9627         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
9628         type parameters.
9629
9630 2004-08-24  Martin Baulig  <martin@ximian.com>
9631
9632         * typemanager.cs
9633         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
9634         this for accessibility checks.
9635         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
9636         IsNestedFamilyAccessible.
9637         (TypeManager.IsSubclassOf): New method, do what the name actually
9638         says.   
9639
9640 2004-08-24  Martin Baulig  <martin@ximian.com>
9641
9642         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
9643         as a SimpleName, include the generic arity.
9644
9645 2004-08-24  Martin Baulig  <martin@ximian.com>
9646
9647         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
9648         MethodAttributes.HideBySig for operators.
9649
9650 2004-08-23  Martin Baulig  <martin@ximian.com>
9651
9652         Back to the old error reporting system :-)
9653
9654         * report.cs (Message): Removed.
9655         (Report.MessageData, ErrorData, WarningData): Removed.
9656         (Report.Error, Warning): Back to the old system.
9657
9658 2004-08-23  Martin Baulig  <martin@ximian.com>
9659
9660         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
9661
9662         * class.cs (TypeContainer.ParentContainer): New public virtual
9663         method; replaces the explicit interface implementation.
9664         (ClassPart.ParentContainer): Override.
9665
9666 2004-08-23  Martin Baulig  <martin@ximian.com>
9667
9668         * statement.cs (Switch): Added support for constant switches; see
9669         #59428 or test-285.cs.
9670
9671 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9672
9673         Fixed bug #62740.
9674         * statement.cs (GetEnumeratorFilter): Removed useless
9675         logic because C# specs is strict. GetEnumerator must be
9676         public.
9677
9678 2004-08-22  Martin Baulig  <martin@ximian.com>
9679
9680         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9681         a switch and may break, reset the barrier.  Fixes #59867.
9682
9683 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9684
9685         CLS-Compliance speed up (~5% for corlib)
9686
9687         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
9688         New method. Tests container for CLS-Compliant names
9689
9690         * class.cs (TypeContainer.VerifyClsName): New method.
9691         Checks whether container name is CLS Compliant.
9692         (Constructor): Implements IMethodData.
9693
9694         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
9695         low-case table for CLS Compliance test.
9696         (MemberCache.VerifyClsParameterConflict): New method.
9697         Checks method parameters for CS3006 error.
9698
9699         * enum.cs (EnumMember): Is derived from MemberCore.
9700         (Enum.VerifyClsName): Optimized for better performance.
9701
9702 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9703
9704         * report.cs: Renamed Error_T to Error and changed all
9705         references.
9706
9707 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9708
9709         * class.cs (TypeContainer.IndexerArrayList): New inner class
9710         container for indexers.
9711         (TypeContainer.DefaultIndexerName): New constant for default
9712         indexer name. Replaced all "Item" with this constant.
9713         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
9714
9715         * typemanager.cs (TypeManager.default_member_ctor): Cache here
9716         DefaultMemberAttribute constructor.
9717
9718 2004-08-05  Martin Baulig  <martin@ximian.com>
9719
9720         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
9721         Fix bug #59429.
9722
9723 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
9724
9725         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
9726         multi platforms problem.
9727
9728         * compiler.csproj: Included shared files.
9729
9730 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9731
9732         Fix bug 60333, 55971 in the more general way
9733         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9734         Added arg_type argument for constant conversion.
9735         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
9736
9737 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9738
9739         Fix bug #59760
9740         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
9741         OperatorArrayList, MethodCoreArrayList for typecontainer
9742         containers. Changed class member types to these new types.
9743         (MethodArrayList.DefineMembers): Added test for CS0659.
9744
9745 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
9746
9747         * cfold.cs: Synchronize the folding with the code in expression.cs
9748         Binary.DoNumericPromotions for uint operands.
9749
9750         * attribute.cs: Revert patch from Raja, it introduced a regression
9751         while building Blam-1.2.1 (hard to isolate a test case).
9752
9753 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9754
9755         Fix for #55382
9756         * class.cs:
9757         (TypeContainer.Define): Renamed to DefineContainerMembers because of
9758         name collision.
9759         (MethodCore.parent_method): New member. The method we're overriding
9760         if this is an override method.
9761         (MethodCore.CheckBase): Moved from Method class and made common.
9762         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
9763         private.
9764         (MethodCore.CheckForDuplications): New abstract method. For custom
9765         member duplication search in a container
9766         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
9767         method and its return type.
9768         (Event.conflict_symbol): New member. Symbol with same name in the
9769         parent class.
9770
9771         * decl.cs:
9772         (MemberCache.FindMemberWithSameName): New method. The method
9773         is looking for conflict with inherited symbols.
9774
9775 2004-08-04  Martin Baulig  <martin@ximian.com>
9776
9777         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9778
9779         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9780
9781 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9782
9783         * report.cs (Message): New enum for better error, warning reference in
9784         the code.
9785         (MessageData): New inner abstract class. It generally handles printing of
9786         error and warning messages.
9787         Removed unused Error, Warning, Message methods.
9788
9789 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9790
9791         Fix for cs0592-8.cs test
9792         * attribute.cs
9793         (Attributable.ValidAttributeTargets): Made public.
9794         (Attribute.ExplicitTarget): New member for explicit target value.
9795         (Attribute.CheckTargets): Now we translate explicit attribute
9796         target to Target here.
9797
9798 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
9799
9800         * ecore.cs (MethodGroupExpr): new IsBase property.
9801
9802         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
9803
9804         * delegate.cs (DelegateCreation): store a MethodGroupExpr
9805         rather than an instance expr.
9806
9807         (DelegateCreation.Emit): Use the method group rather than
9808         the instance expression. Also, if you have base.Foo as the
9809         method for a delegate, make sure to emit ldftn, not ldftnvirt.
9810
9811         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
9812
9813         (NewDelegate.DoResolve): Only check for the existance of Invoke
9814         if the method is going to be needed. Use MethodGroupExpr.
9815
9816         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
9817
9818         * expression.cs: For pointer arith., make sure to use
9819         the size of the type, not the size of the pointer to
9820         the type.
9821
9822 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9823
9824         Fix for #60722
9825         * class.cs (Class): Added error CS0502 test.
9826
9827 2004-08-03  John Luke  <jluke@cfl.rr.com>
9828             Raja R Harinath  <rharinath@novell.com>
9829
9830         Fix for #60997.
9831         * attribute.cs (Attribute.complained_before): New flag.
9832         (Attribute.ResolveType, Attribute.Resolve),
9833         (Attribute.DefinePInvokeMethod): Set it.
9834         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
9835         
9836 2004-08-03  Martin Baulig  <martin@ximian.com>
9837
9838         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9839         use a user-defined operator; we still need to do numeric
9840         promotions in case one argument is a builtin type and the other
9841         one has an implicit conversion to that type.  Fixes #62322.
9842
9843 2004-08-18  Martin Baulig  <martin@ximian.com>
9844
9845         * class.cs (Method.Define): Use the correct method name when
9846         creating the MethodBuilder for a generic method.
9847
9848 2004-08-17  Martin Baulig  <martin@ximian.com>
9849
9850         * generic.cs (Constraints): Support type parameter constraints.
9851
9852 2004-08-16  Martin Baulig  <martin@ximian.com>
9853
9854         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
9855         (Token.GENERIC_DIMENSION): New token; this is returned if we
9856         encounter an unbound generic type in a typeof() expression.
9857
9858         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
9859         this token is only generated while parsing a typeof() expression.
9860         (typeof_expression): Removed the old unbound_type hack.
9861
9862         * generic.cs (TypeArguments.IsUnbound): New public property.
9863
9864         * decl.cs (MemberName): Added support for unbound types.
9865
9866 2004-08-14  Martin Baulig  <martin@ximian.com>
9867
9868         * typemanager.cs
9869         (TypeManager.IsEqualGenericInstance): New static method.
9870         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
9871         just used to check accessibility, so follow the rules of 26.1.6.        
9872
9873         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
9874         ConstructedType instead of a TypeExpression if we have type arguments.
9875
9876         * cs-parser.jay (typeof_expression): Support unbound generic types.
9877
9878         * ecore.cs (UnboundTypeExpression): New public class.
9879
9880 2004-08-12  Martin Baulig  <martin@ximian.com>
9881
9882         * typemanager.cs (TypeManager.IsNestedChildOf): Use
9883         TypeManager.IsEqual() rather than `=='.
9884
9885         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
9886         generic instances as well.
9887
9888 2004-08-12  Martin Baulig  <martin@ximian.com>
9889
9890         * expression.cs (Invocation.InferType): We can only infer method
9891         type parameters.  Fixes #62647.
9892
9893 2004-08-11  Martin Baulig  <martin@ximian.com>
9894
9895         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
9896         before resolving the base classes.
9897
9898 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
9899
9900         * Makefile: install .mdb file too.
9901
9902 2004-08-05  Martin Baulig  <martin@ximian.com>
9903
9904         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
9905         initializer, the current type is just the TypeBuilder, not the
9906         instantiated generic type.
9907         (FieldExpr.IsFieldInitializer): New public property.
9908
9909 2004-08-04  Martin Baulig  <martin@ximian.com>
9910
9911         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9912
9913         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9914
9915 2004-08-03  Martin Baulig  <martin@ximian.com>
9916
9917         * class.cs (MethodData.Define): If we're an explicit
9918         implementation, remove the generic arity from the type name.
9919
9920 2004-08-03  Martin Baulig  <martin@ximian.com>
9921
9922         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9923         use a user-defined operator; we still need to do numeric
9924         promotions in case one argument is a builtin type and the other
9925         one has an implicit conversion to that type.  Fixes #62322.
9926
9927 2004-08-02  Martin Baulig  <martin@ximian.com>
9928
9929         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
9930         `TypeExpr[]' array.
9931         (TypeContainer.GetClassBases): Return the unexpanded list of
9932         interfaces; we expand them later.
9933         (TypeContainer.DefineType): After creating the TypeBuilder, call
9934         TypeManager.ExpandInterfaces() to get an expanded and resolved
9935         list of interfaces.
9936
9937         * ecore.cs (TypeExpr.GetInterfaces): Removed
9938
9939         * generics.cs (Constraints.InterfaceConstraints): Remove.
9940         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
9941         register the interface constraints.
9942
9943         * typemanager.cs
9944         (TypeManager.AddUserType): Removed the `ifaces' argument.
9945         (TypeManager.AddTypeParameter): Likewise.
9946         (TypeManager.AddUserInterface): Removed, was unused.
9947         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
9948         `TypeExpr[]' array for the interfaces.
9949         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
9950         has been defined, returns a list of the resolved interfaces types.
9951         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
9952         (TypeManager.GetExplicitInterfaces): Likewise.  
9953
9954 2004-08-02  Martin Baulig  <martin@ximian.com>
9955
9956         * expression.cs (Invocation.EmitCall): If we're invoking a method
9957         on a type parameter, use the new `Constrained' prefix opcode.
9958
9959 2004-08-02  Martin Baulig  <martin@ximian.com>
9960
9961         * statement.cs (LocalInfo.Flags): Added `IsThis'.
9962         (LocalInfo.IsThis): New public property.
9963         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
9964
9965 2004-08-01  Martin Baulig  <martin@ximian.com>
9966
9967         * class.cs (TypeContainer.GetClassBases): Don't set the default
9968         here since we may get called from GetPartialBases().
9969         (TypeContainer.DefineType): If GetClassBases() didn't return a
9970         parent, use the default one.
9971
9972 2004-07-30  Martin Baulig  <martin@ximian.com>
9973
9974         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
9975
9976         * class.cs (SourceMethod): New public class, derive from the
9977         symbol writer's ISourceMethod.
9978         (Method): Use the new symbol writer API.
9979
9980         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
9981         as argument and use the new symbol writer.
9982
9983         * location.cs
9984         (SourceFile): Implement the symbol writer's ISourceFile.
9985         (Location.SymbolDocument): Removed.
9986         (Location.SourceFile): New public property.
9987
9988         * symbolwriter.cs: Use the new symbol writer API.
9989
9990 2004-07-30  Raja R Harinath  <rharinath@novell.com>
9991
9992         * Makefile (install-local): Remove.  Functionality moved to
9993         executable.make.
9994
9995 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
9996
9997         * Makefile: Install mcs.exe.config file together with mcs.exe.
9998         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
9999         correct runtime version.
10000         
10001 2004-07-25  Martin Baulig  <martin@ximian.com>
10002
10003         * class.cs
10004         (TypeContainer.RegisterOrder): Removed, this was unused.
10005         (TypeContainer, interface_order): Removed.
10006         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
10007         TypeContainer as argument since we can also be called with a
10008         `PartialContainer' for a partial class/struct/interface.
10009         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
10010         of checking whether we're an `Interface' - we could be a
10011         `PartialContainer'.
10012         (PartialContainer.Register): Override; call
10013         AddClass()/AddStruct()/AddInterface() on our parent.
10014
10015         * cs-parser.jay (interface_member_declaration): Add things to the
10016         `current_container', not the `current_class'.
10017
10018         * rootcontext.cs (RegisterOrder): The overloaded version which
10019         takes an `Interface' was unused, removed.
10020
10021         * typemanager.cs (TypeManager.LookupInterface): Return a
10022         `TypeContainer', not an `Interface'.
10023         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
10024         contain a `PartialContainer' for an interface, so check it's
10025         `Kind' to figure out what it is.
10026
10027 2004-07-25  Martin Baulig  <martin@ximian.com>
10028
10029         * class.cs (Class.DefaultTypeAttributes): New public constant.
10030         (Struct.DefaultTypeAttributes): Likewise.
10031         (Interface.DefaultTypeAttributes): Likewise.
10032         (PartialContainer.TypeAttr): Override this and add the
10033         DefaultTypeAttributes.
10034
10035 2004-07-25  Martin Baulig  <martin@ximian.com>
10036
10037         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
10038         we can just use the `Parent' field instead.
10039
10040 2004-07-25  Martin Baulig  <martin@ximian.com>
10041
10042         * class.cs (TypeContainer.Emit): Renamed to EmitType().
10043
10044 2004-07-25  Martin Baulig  <martin@ximian.com>
10045
10046         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
10047         our parts before defining any methods.
10048         (TypeContainer.VerifyImplements): Make this virtual.
10049         (ClassPart.VerifyImplements): Override and call VerifyImplements()
10050         on our PartialContainer.
10051
10052 2004-07-25  Martin Baulig  <martin@ximian.com>
10053
10054         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
10055
10056         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
10057         argument, we can just use the `Parent' field instead.
10058
10059         * class.cs
10060         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
10061         (MemberBase.DoDefine): Likewise.
10062
10063 2004-07-24  Martin Baulig  <martin@ximian.com>
10064
10065         * decl.cs (MemberCore.Parent): New public field.
10066         (DeclSpace.Parent): Moved to MemberCore.
10067
10068         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
10069         (MemberBase.ctor): Added TypeContainer argument, pass it to our
10070         parent's .ctor.
10071         (FieldBase, Field, Operator): Likewise.
10072         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
10073         (EventField, Event): Likewise.
10074
10075 2004-07-23  Martin Baulig  <martin@ximian.com>
10076
10077         * class.cs (PartialContainer): New public class.
10078         (ClassPart): New public class.
10079         (TypeContainer): Added support for partial classes.
10080         (TypeContainer.GetClassBases): Splitted some of the functionality
10081         out into GetNormalBases() and GetPartialBases().
10082
10083         * cs-tokenizer.cs (Token.PARTIAL): New token.
10084         (Tokenizer.consume_identifier): Added some hacks to recognize
10085         `partial', but only if it's immediately followed by `class',
10086         `struct' or `interface'.
10087
10088         * cs-parser.jay: Added support for partial clases.
10089
10090 2004-07-23  Martin Baulig  <martin@ximian.com>
10091
10092         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
10093         a `DeclSpace' and also made it readonly.
10094         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
10095         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
10096         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
10097
10098         * cs-parser.jay: Pass the `current_class', not the
10099         `current_container' (at the moment, this is still the same thing)
10100         to a new Method, Property, Event, Indexer or Constructor.
10101
10102 2004-07-23  Martin Baulig  <martin@ximian.com>
10103
10104         * cs-parser.jay (CSharpParser): Added a new `current_class' field
10105         and removed the `current_interface' one.
10106         (struct_declaration, class_declaration, interface_declaration):
10107         Set `current_class' to the newly created class/struct/interface;
10108         set their `Bases' and call Register() before parsing their body.
10109
10110 2004-07-23  Martin Baulig  <martin@ximian.com>
10111
10112         * class.cs (Kind): New public enum.
10113         (TypeContainer): Made this class abstract.
10114         (TypeContainer.Kind): New public readonly field.
10115         (TypeContainer.CheckDef): New public method; moved here from
10116         cs-parser.jay.
10117         (TypeContainer.Register): New public abstract method.
10118         (TypeContainer.GetPendingImplementations): New public abstract
10119         method.
10120         (TypeContainer.GetClassBases): Removed the `is_class' and
10121         `is_iface' parameters.
10122         (TypeContainer.DefineNestedTypes): Formerly known as
10123         DoDefineType().
10124         (ClassOrStruct): Made this class abstract.
10125
10126         * tree.cs (RootTypes): New public type. 
10127
10128 2004-07-20  Martin Baulig  <martin@ximian.com>
10129
10130         * tree.cs (Tree.RecordNamespace): Removed.
10131         (Tree.Namespaces): Removed.
10132
10133         * rootcontext.cs (RootContext.IsNamespace): Removed.
10134
10135         * cs-parser.jay (namespace_declaration): Just create a new
10136         NamespaceEntry here.
10137
10138 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
10139
10140         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
10141         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
10142         entry to make sure it runs in the correct runtime version.
10143         
10144 2004-07-18  Martin Baulig  <martin@ximian.com>
10145
10146         * generic.cs (ConstructedType.CheckConstraints): Improved
10147         constraints checking.
10148
10149 2004-07-18  Martin Baulig  <martin@ximian.com>
10150
10151         * expression.cs (Invocation.BetterMethod): Call
10152         TypeManager.TypeToCoreType() on all types and removed my previous
10153         hack; we're already doig the right thing here.
10154
10155 2004-07-17  Martin Baulig  <martin@ximian.com>
10156
10157         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
10158
10159 2004-07-16  Martin Baulig  <martin@ximian.com>
10160
10161         * iterators.cs: Added generics support.
10162
10163 2004-07-16  Martin Baulig  <martin@ximian.com>
10164
10165         * iterators.cs: Rewrote this.  We're now using one single Proxy
10166         class for both the IEnumerable and the IEnumerator interface and
10167         `Iterator' derives from Class so we can use the high-level API.
10168
10169         * class.cs (TypeContainer.AddIterator): New method.
10170         (TypeContainer.DoDefineType): New protected virtual method, which
10171         is called from DefineType().
10172         (TypeContainer.DoDefineMembers): Call DefineType() and
10173         DefineMembers() on all our iterators.
10174         (TypeContainer.Emit): Call Emit() on all our iterators.
10175         (TypeContainer.CloseType): Call CloseType() on all our iterators.
10176
10177         * codegen.cs (EmitContext.CurrentIterator): New public field.
10178
10179 2004-07-15  Martin Baulig  <martin@ximian.com>
10180
10181         * typemanager.cs
10182         (TypeManager.not_supported_exception_type): New type.   
10183
10184 2004-07-14  Martin Baulig  <martin@ximian.com>
10185
10186         * typemanager.cs
10187         (TypeManager.generic_ienumerable_type): New type.
10188         (TypeManager.generic_ienumerator_type): New type.
10189
10190         * rootcontext.cs
10191         (RootContext.interfaces_first_stage): Added
10192         "System.Collections.Generic.IEnumerator`1" and
10193         "System.Collections.Generic.IEnumerable`1".     
10194
10195 2004-07-14  Martin Baulig  <martin@ximian.com>
10196
10197         * iterators.cs: Use real error numbers.
10198
10199 2004-07-14  Martin Baulig  <martin@ximian.com>
10200
10201         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
10202         requires this to be a System.Collection.IEnumerable and not a
10203         class implementing that interface.
10204         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
10205
10206 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
10207
10208         * class.cs: Fixed previous fix, it broke some error tests.
10209
10210 2004-07-12  Martin Baulig  <martin@ximian.com>
10211
10212         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
10213         Fixes #61293.
10214
10215 2004-07-14  Martin Baulig  <martin@ximian.com>
10216
10217         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
10218         an exclamation mark (!) for the generic arity to reflect the
10219         latest spec changes; ie. use "System.Collections.Generic.IList`1".
10220
10221 2004-07-13  Martin Baulig  <martin@ximian.com>
10222
10223         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
10224         specifiers being part of a type argument.
10225
10226 2004-07-13  Martin Baulig  <martin@ximian.com>
10227
10228         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
10229         name for generic types.
10230
10231 2004-07-13  Martin Baulig  <martin@ximian.com>
10232
10233         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
10234         bit to fix #60119.
10235
10236 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
10237
10238         * assign.cs (LocalTemporary): Add new argument: is_address,If
10239         `is_address' is true, then the value that we store is the address
10240         to the real value, and not the value itself.
10241         
10242         * ecore.cs (PropertyExpr): use the new local temporary
10243         stuff to allow us to handle X.Y += z (where X is a struct)
10244
10245 2004-07-08  Martin Baulig  <martin@ximian.com>
10246
10247         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
10248         not always return, just like we're doing in Using.Resolve().
10249
10250 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
10251
10252         * cs-parser.jay (fixed_statement): flag this as Pinned.
10253
10254 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
10255
10256         * typemanager.cs (TypeManager): Removed MakePinned method, this
10257         mechanism is replaced with the .NET 2.x compatible mechanism of
10258         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
10259
10260         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
10261         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
10262         `IsFixed' property which has a different meaning.
10263
10264 2004-07-02  Raja R Harinath  <rharinath@novell.com>
10265
10266         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
10267         visible from inside a nested class, not just the names of the
10268         immediately enclosing class.
10269         Fix for bug #60730.
10270
10271 2004-06-24  Raja R Harinath  <rharinath@novell.com>
10272
10273         * expression.cs (BetterConversion): Remove buggy special-case
10274         handling of "implicit constant expression conversions".  At this
10275         point, we already know that the conversion is possible -- we're
10276         only checking to see which is better.
10277
10278 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10279
10280         * cs-parser.jay: Added error CS0210 test.
10281
10282 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10283
10284         * cs-parser.jay: Added error CS0134 test.
10285
10286 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10287
10288         Fix bug #52507
10289         * cs-parser.jay: Added error CS0145 test.
10290
10291 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10292
10293         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
10294
10295 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
10296         
10297         * expression.cs (StackAlloc.Resolve): The argument may not
10298         be a constant; deal with this case.
10299         
10300 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
10301
10302         * attribute.cs (IndexerName_GetIndexerName): Renamed to
10303         GetIndexerAttributeValue.
10304         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
10305
10306         * class.cs (Indexer.Define): Added error tests for CS0415,
10307         CS0609.
10308
10309 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
10310
10311         * attribute.cs (Attribute.Resolve): Keep field code in sync with
10312         property code.
10313
10314 2004-06-23  Martin Baulig  <martin@ximian.com>
10315
10316         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
10317         neither return nor throw, reset the barrier as well.  Fixes #60457.
10318
10319 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
10320
10321         * class.cs : EventAttributes is now set to None by default.
10322           This fixes bug #60459.
10323
10324 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10325
10326         Fix bug #60219
10327         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10328         Don't throw exception but return null (it's sufficient now).
10329
10330 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10331
10332         * typemanager.cs (GetArgumentTypes): Faster implementation.
10333
10334 2004-06-18  Martin Baulig  <martin@ximian.com>
10335
10336         * attribute.cs (Attribute.Resolve): Check whether we're an
10337         EmptyCast which a Constant child.  Fixes #60333.
10338
10339 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
10340
10341         * statement.cs (EmitCollectionForeach): Account for the fact that
10342         not all valuetypes are in areas which we can take the address of.
10343         For these variables, we store to a temporary variable. Also, make
10344         sure that we dont emit a `callvirt' on a valuetype method.
10345
10346 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10347
10348         * expression.cs (StackAlloc.DoReSolve): Added test for
10349         negative parameter (CS0247).
10350
10351 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10352
10353         Fix bug #59792
10354         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
10355
10356 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10357
10358         Fix bug #59781
10359         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
10360         ulong.
10361
10362 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10363
10364         Fix bug #58254 & cs1555.cs, cs1556.cs
10365         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
10366
10367 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10368
10369         * cs-parser.jay: Added error CS1669 test for indexers.
10370
10371 2004-06-18  Martin Baulig  <martin@ximian.com>
10372
10373         * generics.cs (GenericMethod.ctor): Don't take an Attributes
10374         argument.  Fixes #60441.
10375
10376 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
10377         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
10378         The name needs to have the actual name of the method in order
10379         for other tests (such as the one in OverloadResolve for Invoke
10380         on a delegate) to work. As well, it does not really help
10381         error reporting because the method group had multiple methods.
10382         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
10383         Make profiling work.
10384         
10385 2004-06-13  Martin Baulig  <martin@ximian.com>
10386
10387         * cs-parser.jay: Don't allow generic attributes.
10388
10389 2004-06-13  Martin Baulig  <martin@ximian.com>
10390
10391         * class.cs (MemberBase.DoDefineBase): New protected method.
10392         (MemberBase.DoDefine): Compute the `flags' in the new
10393         DoDefineBase() which must be called first.
10394         (Method.Define): Call DoDefineBase() first so we have the flags
10395         when defining the generic method.
10396
10397         * cs-parser.jay (interface_method_declaration): Support generic methods.
10398
10399 2004-06-13  Martin Baulig  <martin@ximian.com>
10400
10401         * decl.cs (TypeName): Removed.
10402         (MemberName): Removed TypeName and MemberNow; now we just have
10403         MemberName.
10404
10405         * cs-parser.jay: Don't distinguish between type arguments and type
10406         parameters in the grammar and simplified the rules a bit.  The
10407         reduce/reduce conflicts are now gone (except the one we inherited
10408         from mcs).
10409
10410 2004-06-11  Martin Baulig  <martin@ximian.com>
10411
10412         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
10413         call this twice: for params and varargs methods.
10414
10415 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10416
10417         * class.cs:
10418         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
10419
10420 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10421
10422         * attribute.cs (Attribute.GetValidTargets): Made public.
10423
10424         * class.cs: 
10425         (AbstractPropertyEventMethod): New class for better code sharing.
10426         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
10427         CS1667 report.
10428         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
10429
10430 2004-06-09  Martin Baulig  <martin@ximian.com>
10431
10432         * cs-parser.jay: Removed a reduce/reduce conflict.
10433
10434 2004-06-03  Martin Baulig  <martin@ximian.com>
10435
10436         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
10437         GetSimpleName() and return a SimpleName.
10438
10439         * ecore.cs (SimpleName.Arguments): New public field.
10440         (SimpleName): Added overloaded ctor which takes an additional
10441         TypeArguments argument.
10442         (SimpleName.SimpleNameResolve): Added support for generic methods.
10443         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
10444         formerly in MemberAccess.DoResolve(), but we also need it in
10445         SimpleNameResolve().
10446
10447         * expression.cs (MemberAccess.DoResolve): Use the new
10448         MethodGroupExpr.ResolveGeneric().       
10449
10450 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10451
10452         * decl.cs: If possible, use lookuptypedirect here. We can only do
10453         this if there is no `.' after the namespace. Avoids using
10454         LookupType, which does lots of slow processing.
10455         (FindNestedType) New method, does what it says :-).
10456         * namespace.cs: use LookupTypeDirect.
10457         * rootcontext.cs: use membercache, if possible.
10458         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10459
10460 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10461
10462         * expression.cs:
10463         According to the spec, 
10464
10465         In a member access of the form E.I, if E is a single identifier,
10466         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10467         field, property, localvariable, or parameter with the same type as
10468         the meaning of E as a type-name (§3.8), then both possible
10469         meanings of E are permitted.
10470
10471         We did not check that E as a simple-name had the same type as E as
10472         a type name.
10473
10474         This trivial check gives us 5-7% on bootstrap time.
10475
10476 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10477
10478         * expression.cs (Invocation.OverloadResolve): Avoid the
10479         use of hashtables and boxing here by allocating on demand.
10480
10481 2004-05-30  Martin Baulig  <martin@ximian.com>
10482
10483         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10484         we're doing a silent lookup.  Don't try to lookup nested types in
10485         TypeManager.object_type (thanks to Ben Maurer).
10486
10487 2004-05-30  Martin Baulig  <martin@ximian.com>
10488
10489         Committing a patch from Ben Maurer.
10490
10491         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10492
10493 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10494
10495         * convert.cs: add a trivial cache for overload operator resolution.
10496
10497 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10498
10499         * attribute.cs
10500         (AttributeTester.GetObsoleteAttribute): Returns instance of
10501         ObsoleteAttribute when type is obsolete.
10502
10503         * class.cs
10504         (TypeContainer.VerifyObsoleteAttribute): Override.
10505         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10506         (MethodCode.VerifyObsoleteAttribute): Override.
10507         (MemberBase.VerifyObsoleteAttribute): Override.
10508
10509         * decl.cs
10510         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10511         and report proper error.
10512
10513         *delegate.cs
10514         (Delegate.VerifyObsoleteAttribute): Override.
10515
10516         * ecore.cs
10517         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10518         and report proper error.
10519         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10520
10521         * enum.cs
10522         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10523         and enum member.
10524
10525         * expression.cs
10526         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10527         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10528         Added test for ObsoleteAttribute.
10529
10530         * statement.cs
10531         (Catch): Derived from Statement.
10532
10533 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10534
10535         * decl.cs: If possible, use lookuptypedirect here. We can only do
10536         this if there is no `.' after the namespace. Avoids using
10537         LookupType, which does lots of slow processing.
10538         (FindNestedType) New method, does what it says :-).
10539         * namespace.cs: use LookupTypeDirect.
10540         * rootcontext.cs: use membercache, if possible.
10541         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10542
10543 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10544
10545         * expression.cs:
10546         According to the spec, 
10547
10548         In a member access of the form E.I, if E is a single identifier,
10549         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10550         field, property, localvariable, or parameter with the same type as
10551         the meaning of E as a type-name (§3.8), then both possible
10552         meanings of E are permitted.
10553
10554         We did not check that E as a simple-name had the same type as E as
10555         a type name.
10556
10557         This trivial check gives us 5-7% on bootstrap time.
10558
10559 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10560
10561         Fixed bug #59071 & cs0160.cs
10562         * statement.cs (Try.Resolve): Check here whether order of catch
10563         clauses matches their dependencies.
10564
10565 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10566
10567         Fixed bug #58624
10568         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10569         unsafe type.
10570
10571 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10572
10573         * expression.cs (Invocation.OverloadResolve): Avoid the
10574         use of hashtables and boxing here by allocating on demand.
10575
10576 2004-05-30  Martin Baulig  <martin@ximian.com>
10577
10578         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10579         we're doing a silent lookup.  Don't try to lookup nested types in
10580         TypeManager.object_type (thanks to Ben Maurer).
10581
10582 2004-05-30  Martin Baulig  <martin@ximian.com>
10583
10584         Committing a patch from Ben Maurer.
10585
10586         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10587
10588 2004-05-29  Martin Baulig  <martin@ximian.com>
10589
10590         * class.cs (IMethodData.ShouldIgnore): New method.
10591
10592         * typemanager.cs (TypeManager.MethodFlags): Don't take a
10593         `Location' argument, we don't need it anywhere.  Use
10594         `IMethodData.ShouldIgnore ()' instead of
10595         `MethodData.GetMethodFlags ()'.
10596         (TypeManager.AddMethod): Removed.
10597         (TypeManager.AddMethod2): Renamed to AddMethod.
10598
10599 2004-05-29  Martin Baulig  <martin@ximian.com>
10600
10601         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
10602
10603         * convert.cs (Convert.ImplicitReferenceConversion): If we're
10604         converting from a class type S to an interface type and we already
10605         have an object on the stack, don't box it again.  Fixes #52578.
10606
10607 2004-05-29  Martin Baulig  <martin@ximian.com>
10608
10609         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10610         Added support for `params' parameters.  Fixes #59267.
10611
10612 2004-05-29  Martin Baulig  <martin@ximian.com>
10613
10614         * literal.cs (NullPointer): Provide a private .ctor which sets
10615         `type' to TypeManager.object_type.  Fixes #59048.
10616
10617 2004-05-29  Martin Baulig  <martin@ximian.com>
10618
10619         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
10620         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
10621
10622         * ecore.cs (EventExpr.instance_expr): Make the field private.
10623
10624 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
10625
10626         Fixed bug #50080 & cs0214-2.cs
10627         * expression.cs (Cast.DoResolve): Check unsafe context here.
10628         
10629         * statement.cs (Resolve.DoResolve): Likewise.
10630
10631 2004-05-26  Martin Baulig  <martin@ximian.com>
10632
10633         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
10634
10635         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
10636         (RootContext.LookupType): Pass down the `silent' flag.
10637
10638 2004-05-25  Martin Baulig  <martin@ximian.com>
10639
10640         * expression.cs
10641         (MethodGroupExpr.IdenticalTypeName): New public property.
10642         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
10643         expression actually refers to a type.
10644
10645 2004-05-25  Martin Baulig  <martin@ximian.com>
10646
10647         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
10648         for #56176 and made it actually work.
10649
10650 2004-05-25  Martin Baulig  <martin@ximian.com>
10651
10652         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
10653         (FieldExpr, PropertyExpr): Override and implement
10654         CacheTemporaries.  Fixes #52279.
10655
10656 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
10657
10658         * location.cs: In the new compiler listing a file twice is a
10659         warning, not an error.
10660
10661 2004-05-24  Martin Baulig  <martin@ximian.com>
10662
10663         * enum.cs (Enum.DefineType): For the `BaseType' to be a
10664         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
10665
10666 2004-05-24  Martin Baulig  <martin@ximian.com>
10667
10668         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
10669         walking the `using' list.  Fixes #53921.
10670
10671 2004-05-24  Martin Baulig  <martin@ximian.com>
10672
10673         * const.cs (Const.LookupConstantValue): Added support for
10674         EmptyCast's; fixes #55251.
10675
10676 2004-05-24  Martin Baulig  <martin@ximian.com>
10677
10678         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
10679         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
10680         which does the CS0135 check.  The reason is that we first need to
10681         check whether the variable actually exists.
10682
10683 2004-05-24  Martin Baulig  <martin@ximian.com>
10684
10685         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
10686         than RootContext.LookupType() to find the explicit interface
10687         type.  Fixes #58584.
10688
10689 2004-05-24  Raja R Harinath  <rharinath@novell.com>
10690
10691         * Makefile: Simplify.  Use executable.make.
10692         * mcs.exe.sources: New file.  List of sources of mcs.exe.
10693
10694 2004-05-24  Anders Carlsson  <andersca@gnome.org>
10695
10696         * decl.cs:
10697         * enum.cs:
10698         Use the invariant culture when doing String.Compare for CLS case
10699         sensitivity.
10700         
10701 2004-05-23  Martin Baulig  <martin@ximian.com>
10702
10703         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
10704         don't have any dots.  Fixes #52622, added cs0246-8.cs.
10705
10706         * namespace.cs (NamespaceEntry.Lookup): Likewise.
10707
10708 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10709
10710         * class.cs (MemberBase.Define): Reuse MemberType member for 
10711         resolved type. Other methods can use it too.
10712
10713 2004-05-23  Martin Baulig  <martin@ximian.com>
10714
10715         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
10716         the variable also exists in the current block (otherwise, we need
10717         to report a CS0103).  Fixes #58670.
10718
10719 2004-05-23  Martin Baulig  <martin@ximian.com>
10720
10721         * flowanalysis.cs (Reachability.Reachable): Compute this
10722         on-the-fly rather than storing it as a field.
10723
10724 2004-05-23  Martin Baulig  <martin@ximian.com>
10725
10726         * flowanalysis.cs (Reachability.And): Manually compute the
10727         resulting `barrier' from the reachability.      
10728        
10729 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10730
10731         Fix bug #57835
10732         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
10733         instance of ObsoleteAttribute when symbol is obsolete.
10734
10735         * class.cs
10736         (IMethodData): Extended interface for ObsoleteAttribute support.
10737
10738 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10739
10740         * attribute.cs: Fix bug #55970
10741
10742 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10743
10744         Fix bug #52705
10745         * attribute.cs
10746         (GetObsoleteAttribute): New method. Creates the instance of
10747         ObsoleteAttribute.
10748         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
10749         ObsoleteAttribute when member is obsolete.
10750         (AttributeTester.Report_ObsoleteMessage): Common method for
10751         Obsolete error/warning reporting.
10752
10753         * class.cs
10754         (TypeContainer.base_classs_type): New member for storing parent type.
10755
10756         * decl.cs
10757         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
10758         for this MemberCore.
10759
10760 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10761
10762         * attribute.cs, const.cs: Fix bug #58590
10763
10764 2004-05-21  Martin Baulig  <martin@ximian.com>
10765
10766         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
10767         out parameters if the end of the method is unreachable.  Fixes
10768         #58098. 
10769
10770 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10771
10772         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
10773         Hari was right, why extra method.
10774
10775 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10776
10777         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
10778
10779 2004-05-20  Martin Baulig  <martin@ximian.com>
10780
10781         * delegate.cs: Convert this file to Unix mode - like the original
10782         version in mcs is.
10783
10784 2004-05-20  Martin Baulig  <martin@ximian.com>
10785
10786         * attribute.cs: Convert this file to Unix mode - like the original
10787         version in mcs is.
10788
10789 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
10790
10791        Fix bug #58688 (MCS does not report error when the same attribute
10792        is assigned twice)
10793
10794        * attribute.cs (Attribute.Emit): Distinction between null and default.
10795
10796 2004-05-19  Raja R Harinath  <rharinath@novell.com>
10797
10798        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
10799        of a top-level attribute without an attribute target.
10800        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
10801        Make non-static.
10802        (Attribute.Conditional_GetConditionName), 
10803        (Attribute.Obsolete_GetObsoleteMessage): Update.
10804        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
10805        part of ScanForIndexerName.
10806        (Attribute.CanIgnoreInvalidAttribute): New function.
10807        (Attribute.ScanForIndexerName): Move to ...
10808        (Attributes.ScanForIndexerName): ... here.
10809        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
10810        (Attributes.Search): New internal variant that can choose not to
10811        complain if types aren't resolved.  The original signature now
10812        complains.
10813        (Attributes.GetClsCompliantAttribute): Use internal variant, with
10814        complaints suppressed.
10815        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
10816        only if it not useful.
10817        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
10818        top-level for attributes that are shared between the assembly
10819        and a top-level class.
10820        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
10821        * class.cs: Update to reflect changes.
10822        (DefineIndexers): Fuse loops.
10823        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
10824        a couple more variants of attribute names.
10825
10826 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
10827
10828         Fix bug #52585 (Implemented explicit attribute declaration)
10829
10830         * attribute.cs:
10831         (Attributable.ValidAttributeTargets): New abstract method. It gets
10832         list of valid attribute targets for explicit target declaration.
10833         (Attribute.Target): It holds target itself.
10834         (AttributeSection): Removed.
10835         (Attribute.CheckTargets): New method. It checks whether attribute
10836         target is valid for the current element.
10837
10838         * class.cs:
10839         (EventProperty): New class. For events that are declared like
10840         property (with add and remove accessors).
10841         (EventField): New class. For events that are declared like field.
10842         class.cs
10843
10844         * cs-parser.jay: Implemented explicit attribute target declaration.
10845
10846         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
10847         Override ValidAttributeTargets.
10848
10849         * parameter.cs:
10850         (ReturnParameter): Class for applying custom attributes on 
10851         the return type.
10852         (ParameterAtribute): New class. Class for applying custom
10853         attributes on the parameter type.
10854
10855 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
10856
10857         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
10858         definitions. 
10859
10860         (Method): Allow UNSAFE here.
10861
10862         * modifiers.cs: Support unsafe reporting.
10863
10864 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
10865
10866         * decl.cs: Fix bug #58478.
10867
10868 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10869
10870         * statement.cs: When checking for unreachable code on an EmptyStatement,
10871         set the location. Fixes bug #58488.
10872
10873 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
10874
10875         * driver.cs: Add -pkg handling.
10876
10877         From Gonzalo: UseShelLExecute=false
10878
10879 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
10880
10881         * attribute.cs:
10882         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
10883         for attribute.
10884         (Attribute.IsClsCompliaceRequired): Moved to base for better
10885         accesibility.
10886         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
10887         when attribute is AttributeUsageAttribute.
10888         (Attribute.GetValidTargets): Simplified.
10889         (Attribute.GetAttributeUsage): New method returns AttributeUsage
10890         attribute for this type.
10891         (Attribute.ApplyAttributes): Method renamed to Emit and make
10892         non-static.
10893         (GlobalAttributeSection): New class for special handling of global
10894         attributes (assembly, module).
10895         (AttributeSection.Emit): New method.
10896
10897         * class.cs: Implemented Attributable abstract methods.
10898         (MethodCore.LabelParameters): Moved to Parameter class.
10899         (Accessor): Is back simple class.
10900         (PropertyMethod): Implemented Attributable abstract class.
10901         (DelegateMethod): Implemented Attributable abstract class.
10902         (Event): New constructor for disctintion between normal Event
10903         and Event with accessors.
10904
10905         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
10906
10907         * codegen.cs, const.cs, decl.cs, delegate.cs:
10908         (CommonAssemblyModulClass): Implemented Attributable abstract class
10909         and simplified.
10910
10911         * enum.cs: Implement IAttributeSupport interface.
10912         (EnumMember): New class for emum members. Implemented Attributable
10913         abstract class
10914
10915         * parameter.cs:
10916         (ParameterBase): Is abstract.
10917         (ReturnParameter): New class for easier [return:] attribute handling.
10918
10919         * typemanager.cs: Removed builder_to_attr.
10920
10921 2004-05-11  Raja R Harinath  <rharinath@novell.com>
10922
10923         Fix bug #57151.
10924         * attribute.cs (Attribute.GetPositionalValue): New function.
10925         * class.cs (TypeContainer.VerifyMembers): New function.
10926         (TypeContainer.Emit): Use it.
10927         (ClassOrStruct): New base class for Class and Struct.
10928         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
10929         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
10930         class.
10931         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
10932         then each non-static field should have a FieldOffset attribute.
10933         Otherwise, none of the fields should have a FieldOffset attribute.
10934         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
10935         and FieldOffset attributes.
10936         * typemanager.cs (TypeManager.struct_layout_attribute_type)
10937         (TypeManager.field_offset_attribute_type): New core types.
10938         (TypeManager.InitCoreTypes): Initialize them.
10939
10940 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
10941
10942         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
10943         Return correct type.
10944         From bug #58270.
10945
10946 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
10947
10948         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
10949         be implicitly converted to ulong.
10950         
10951         * expression.cs: The logic for allowing operator &, | and ^ worked
10952         was wrong, it worked before because we did not report an error in
10953         an else branch.  Fixes 57895.
10954
10955         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
10956         allow volatile fields to be reference types.
10957
10958 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
10959
10960         * driver.cs: Add support for /debug-
10961
10962 2004-05-07  Raja R Harinath  <rharinath@novell.com>
10963
10964         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
10965         Add a 'complain' parameter to silence errors.
10966         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
10967         silently overlooked type-resolutions.
10968         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
10969         to reflect changes.
10970         (Attributes.Search): New function.
10971         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
10972         (Attributes.GetAttributeFullName): Remove hack.
10973         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
10974         Update to reflect changes.
10975         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10976         Use Attributes.Search instead of nested loops.
10977
10978 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
10979
10980         * decl.cs:
10981         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
10982         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
10983         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
10984
10985         * report.cs: (Report.Warning): Renamed to Warning_T because of
10986         parameter collision.
10987
10988 2004-05-05  Raja R Harinath  <rharinath@novell.com>
10989
10990         * expression.cs (MemberAccess.ResolveMemberAccess):
10991         Exit with non-zero status after Report.Error.
10992         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
10993         Likewise.
10994         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
10995
10996 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
10997
10998         * support.cs: Don't hang when the file is empty.
10999
11000 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11001
11002         * support.cs: In SeekableStreamReader, compute the preamble size of the
11003           underlying stream. Position changes should take into account that initial
11004           count of bytes.
11005
11006 2004-05-03  Todd Berman  <tberman@sevenl.net>
11007
11008         * driver.cs: remove unused GetSysVersion function.
11009
11010 2004-05-03  Todd Berman  <tberman@sevenl.net>
11011
11012         * driver.cs: Remove the hack from saturday, as well as the hack
11013         from jackson (LoadAssemblyFromGac), also adds the CWD to the
11014         link_paths to get that bit proper.
11015
11016 2004-05-01  Todd Berman  <tberman@sevenl.net>
11017
11018         * driver.cs: Try a LoadFrom before a Load, this checks the current
11019         path. This is currently a bug in mono that is be fixed, however, this
11020         provides a workaround for now. This will be removed when the bug
11021         is fixed.
11022
11023 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
11024
11025         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11026         incomplete key pairs (#57941).
11027
11028 2004-05-01  Todd Berman  <tberman@sevenl.net>
11029
11030         * driver.cs: Remove '.' from path_chars, now System.* loads properly
11031         from the GAC
11032
11033 2004-04-30  Jackson Harper  <jackson@ximian.com>
11034
11035         * codegen.cs: Open keys readonly.
11036         
11037 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11038
11039         * typemanager.cs: don't report cyclic struct layout when a struct
11040         contains 2 or more fields of the same type. Failed for Pango.AttrShape
11041         which has 2 Pango.Rectangle fields.
11042
11043 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11044
11045         * expression.cs: Handle IntPtr comparisons with IL code
11046         rather than a method call.
11047
11048 2004-04-29  Martin Baulig  <martin@ximian.com>
11049
11050         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
11051         the list of PropertyInfo's in class hierarchy and find the
11052         accessor.  Fixes #56013.
11053
11054 2004-04-29  Martin Baulig  <martin@ximian.com>
11055
11056         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
11057
11058 2004-04-29  Martin Baulig  <martin@ximian.com>
11059
11060         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11061
11062         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
11063
11064 2004-04-29  Martin Baulig  <martin@ximian.com>
11065
11066         * class.cs (ConstructorInitializer.Resolve): Check whether the
11067         parent .ctor is accessible.  Fixes #52146.
11068
11069 2004-04-29  Martin Baulig  <martin@ximian.com>
11070
11071         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11072
11073         * statement.cs (Using.EmitLocalVariableDecls): Use
11074         TypeManager.idisposable_type, not typeof (IDisposable).
11075         (Foreach.EmitCollectionForeach): Added support for valuetypes.
11076
11077 2004-04-29  Martin Baulig  <martin@ximian.com>
11078
11079         * class.cs (Event.Define): Don't emit the field and don't set
11080         RTSpecialName and SpecialName for events on interfaces.  Fixes
11081         #57703. 
11082
11083 2004-04-29  Raja R Harinath  <rharinath@novell.com>
11084
11085         Refactor Attribute.ApplyAttributes.
11086         * attribute.cs (Attributable): New base class for objects that can
11087         have Attributes applied on them.
11088         (Attribute): Make AttributeUsage fields public.
11089         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
11090         (Attribute.IsInternalCall): New property.
11091         (Attribute.UsageAttr): Convert to a public read-only property.
11092         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
11093         (Attribute.ResolveType, Attribute.Resolve)
11094         (Attribute.ScanForIndexerName): Update to reflect changes.
11095         (Attribute.CheckAttributeTarget): Re-format.
11096         (Attribute.ApplyAttributes): Refactor, to various
11097         Attributable.ApplyAttributeBuilder methods.
11098         * decl.cs (MemberCore): Make Attributable.
11099         * class.cs (Accessor): Make Attributable.
11100         (MethodData.ApplyAttributes): Use proper attribute types, not
11101         attribute names.
11102         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
11103         (TypeContainer.ApplyAttributeBuilder)
11104         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
11105         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
11106         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
11107         (Operator.ApplyAttributeBuilder): New factored-out methods.
11108         * const.cs (Const.ApplyAttributeBuilder): Likewise.
11109         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
11110         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
11111         * parameter.cs (ParameterBase): New Attributable base class
11112         that can also represent Return types.
11113         (Parameter): Update to the changes.
11114
11115 2004-04-29  Jackson Harper  <jackson@ximian.com>
11116
11117         * driver.cs: Prefer the corlib system version when looking for
11118         assemblies in the GAC. This is still a hack, but its a better hack
11119         now.
11120         
11121 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
11122
11123         * decl.cs, enum.cs: Improved error 3005 reporting.
11124   
11125         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
11126         (related_symbols): New private member for list of symbols
11127         related to reported error/warning.
11128         
11129         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
11130
11131 2004-04-29  Martin Baulig  <martin@ximian.com>
11132
11133         * ecore.cs (Expression.Constantify): If we're an enum and
11134         TypeManager.TypeToCoreType() doesn't give us another type, use
11135         t.UnderlyingSystemType.  Fixes #56178.  
11136
11137 2004-04-29  Martin Baulig  <martin@ximian.com>
11138
11139         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
11140         interfaces and for each interface, only add members directly
11141         declared in that interface.  Fixes #53255.
11142
11143 2004-04-28  Martin Baulig  <martin@ximian.com>
11144
11145         * expression.cs (ConditionalLogicalOperator): Use a temporary
11146         variable for `left' to avoid that we evaluate it more than once;
11147         bug #52588.
11148
11149 2004-04-28  Martin Baulig  <martin@ximian.com>
11150
11151         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
11152         `void[]' (CS1547).
11153
11154 2004-04-28  Martin Baulig  <martin@ximian.com>
11155
11156         * statement.cs (LocalInfo.Resolve): Check whether the type is not
11157         void (CS1547).
11158
11159         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
11160         whether the type is not void (CS1547).
11161
11162 2004-04-28  Martin Baulig  <martin@ximian.com>
11163
11164         * expression.cs (Unary.DoResolveLValue): Override this and report
11165         CS0131 for anything but Operator.Indirection.
11166
11167 2004-04-28  Martin Baulig  <martin@ximian.com>
11168
11169         Committing a patch from Ben Maurer; see bug #50820.
11170
11171         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11172         check for classes.
11173
11174         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11175         classes.        
11176
11177 2004-04-28  Martin Baulig  <martin@ximian.com>
11178
11179         Committing a patch from Ben Maurer; see bug #50820.
11180
11181         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11182         check for classes.
11183
11184         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11185         classes.        
11186
11187 2004-04-28  Martin Baulig  <martin@ximian.com>
11188
11189         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
11190         (Block.AddLabel): Call DoLookupLabel() to only search in the
11191         current block.
11192
11193 2004-04-28  Martin Baulig  <martin@ximian.com>
11194
11195         * cfold.cs (ConstantFold.BinaryFold): Added special support for
11196         comparing StringConstants and NullLiterals in Equality and Inequality.
11197
11198 2004-04-28  Jackson Harper  <jackson@ximian.com>
11199
11200         * driver.cs: Attempt to load referenced assemblies from the
11201         GAC. This is the quick and dirty version of this method that
11202         doesnt take into account versions and just takes the first
11203         canidate found. Will be good enough for now as we will not have more
11204         then one version installed into the GAC until I update this method.
11205
11206 2004-04-28  Martin Baulig  <martin@ximian.com>
11207
11208         * typemanager.cs (TypeManager.CheckStructCycles): New public
11209         static method to check for cycles in the struct layout.
11210
11211         * rootcontext.cs (RootContext.PopulateTypes): Call
11212         TypeManager.CheckStructCycles() for each TypeContainer.
11213         [Note: We only need to visit each type once.]
11214
11215 2004-04-28  Martin Baulig  <martin@ximian.com>
11216
11217         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
11218
11219         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
11220         success and added `out object value'.  Use a `bool resolved' field
11221         to check whether we've already been called rather than
11222         `ConstantValue != null' since this breaks for NullLiterals.
11223
11224 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11225
11226         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
11227         setting of this flag, since the 'set' method may be non-public.
11228
11229 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11230
11231         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
11232         check on current_vector.Block.
11233
11234 2004-04-27  Martin Baulig  <martin@ximian.com>
11235
11236         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
11237         a field initializer.  Fixes #56459.
11238
11239 2004-04-27  Martin Baulig  <martin@ximian.com>
11240
11241         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
11242         we're not attempting to use an indexer.  Fixes #52154.
11243
11244 2004-04-27  Martin Baulig  <martin@ximian.com>
11245
11246         * statement.cs (Return): Don't create a return label if we don't
11247         need it; reverts my change from January 20th.  Thanks to Ben
11248         Maurer for this.
11249
11250 2004-04-27  Martin Baulig  <martin@ximian.com>
11251
11252         According to the spec, `goto' can only leave a nested scope, but
11253         never enter it.
11254
11255         * statement.cs (Block.LookupLabel): Only lookup in the current
11256         block, don't recurse into parent or child blocks.
11257         (Block.AddLabel): Check in parent and child blocks, report
11258         CS0140/CS0158 if we find a duplicate.
11259         (Block): Removed this indexer for label lookups.
11260         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
11261         this already does the error reporting for us.
11262
11263         * flowanalysis.cs
11264         (FlowBranching.UsageVector.Block): New public variable; may be null.
11265         (FlowBranching.CreateSibling): Added `Block' argument.
11266         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
11267         label for the target of a `goto' and check whether we're not
11268         leaving a `finally'.
11269
11270 2004-04-27  Martin Baulig  <martin@ximian.com>
11271
11272         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11273         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
11274         just for returns).
11275
11276 2004-04-27  Martin Baulig  <martin@ximian.com>
11277
11278         * statement.cs (Block.AddLabel): Also check for implicit blocks
11279         and added a CS0158 check.
11280
11281 2004-04-27  Martin Baulig  <martin@ximian.com>
11282
11283         * flowanalysis.cs (FlowBranchingLoop): New class.
11284         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
11285         UsageVector's instead of an ArrayList.
11286         (FlowBranching.Label): Likewise.
11287         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
11288         (FlowBranching.AddBreakVector): New method.
11289
11290 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
11291
11292         * attribute.cs: Small regression fix: only convert the type if we
11293         the type is different, fixes System.Drawing build.
11294
11295 2004-04-27  Martin Baulig  <martin@ximian.com>
11296
11297         * attribute.cs (Attribute.Resolve): If we have a constant value
11298         for a named field or property, implicity convert it to the correct
11299         type.
11300
11301 2004-04-27  Raja R Harinath  <rharinath@novell.com>
11302
11303         * statement.cs (Block.Block): Implicit blocks share
11304         'child_variable_names' fields with parent blocks.
11305         (Block.AddChildVariableNames): Remove.
11306         (Block.AddVariable): Mark variable as "used by a child block" in
11307         every surrounding block.
11308         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
11309         been used in a child block, complain about violation of "Invariant
11310         meaning in blocks" rule.
11311         * cs-parser.jay (declare_local_variables): Don't use
11312         AddChildVariableNames.
11313         (foreach_statement): Don't create an implicit block: 'foreach'
11314         introduces a scope.
11315
11316 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
11317
11318         * convert.cs (ImplicitNumericConversion): 0 is also positive when
11319         converting from 0L to ulong.  Fixes 57522.
11320
11321 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11322
11323         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
11324         derived class hides via 'new' keyword field from base class (test-242.cs).
11325         TODO: Handle this in the more general way.
11326         
11327         * class.cs (CheckBase): Ditto.
11328
11329 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11330
11331         * decl.cs (caching_flags): New member for storing cached values
11332         as bit flags.
11333         (MemberCore.Flags): New enum where bit flags for caching_flags
11334         are defined.
11335         (MemberCore.cls_compliance): Moved to caching_flags.
11336         (DeclSpace.Created): Moved to caching_flags.
11337
11338         * class.cs: Use caching_flags instead of DeclSpace.Created
11339         
11340 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
11341
11342         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
11343         if we are only a derived class, not a nested class.
11344
11345         * typemanager.cs: Same as above, but do this at the MemberLookup
11346         level (used by field and methods, properties are handled in
11347         PropertyExpr).   Allow for the qualified access if we are a nested
11348         method. 
11349
11350 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
11351
11352         * class.cs: Refactoring.
11353         (IMethodData): New inteface; Holds links to parent members
11354         to avoid member duplication (reduced memory allocation).
11355         (Method): Implemented IMethodData interface.
11356         (PropertyBase): New inner classes for get/set methods.
11357         (PropertyBase.PropertyMethod): Implemented IMethodData interface
11358         (Event): New inner classes for add/remove methods.
11359         (Event.DelegateMethod): Implemented IMethodData interface.
11360
11361         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
11362         EmitContext (related to class.cs refactoring).
11363
11364 2004-04-21  Raja R Harinath  <rharinath@novell.com>
11365
11366         * delegate.cs (Delegate.VerifyApplicability): If the number of
11367         arguments are the same as the number of parameters, first try to
11368         verify applicability ignoring  any 'params' modifier on the last
11369         parameter.
11370         Fixes #56442.
11371
11372 2004-04-08  Martin Baulig  <martin@ximian.com>
11373
11374         Merged latest changes into gmcs.  Please keep this comment in
11375         here, it makes it easier for me to see what changed in MCS since
11376         the last time I merged.
11377
11378 2004-04-16  Raja R Harinath  <rharinath@novell.com>
11379
11380         * class.cs (TypeContainer.AddIndexer): Use
11381         'ExplicitInterfaceName' to determine if interface name was
11382         explicitly specified.  'InterfaceType' is not initialized at this time.
11383         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
11384         Indexers array is already in the required order.  Initialize
11385         'IndexerName' only if there are normal indexers.
11386         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
11387         (TypeContainer.Emit): Emit DefaultMember attribute only if
11388         IndexerName is initialized.
11389         Fixes #56300.
11390
11391 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
11392
11393         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
11394         Fixes #57007
11395
11396 2004-04-15  Raja R Harinath  <rharinath@novell.com>
11397
11398         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
11399         attributes.
11400         Fix for #56456.
11401
11402         * attribute.cs (Attribute.Resolve): Check for duplicate named
11403         attributes.
11404         Fix for #56463.
11405
11406 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
11407
11408         * iterators.cs (MarkYield): track whether we are in an exception,
11409         and generate code accordingly.  Use a temporary value to store the
11410         result for our state.
11411
11412         I had ignored a bit the interaction of try/catch with iterators
11413         since their behavior was not entirely obvious, but now it is
11414         possible to verify that our behavior is the same as MS .NET 2.0
11415
11416         Fixes 54814
11417
11418 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
11419
11420         * iterators.cs: Avoid creating temporaries if there is no work to
11421         do. 
11422
11423         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
11424         Enumerations, use TypeManager.EnumToUnderlying and call
11425         recursively. 
11426
11427         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
11428         bug #57013
11429
11430         (This.Emit): Use EmitContext.EmitThis to emit our
11431         instance variable.
11432
11433         (This.EmitAssign): Ditto.
11434
11435         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
11436         codepaths, we will move all the functionality into
11437         Mono.CSharp.This 
11438
11439         (FieldExpr.EmitAssign): Ditto.
11440
11441         This fixes several hidden bugs that I uncovered while doing a code
11442         review of this today.
11443
11444         * codegen.cs (EmitThis): reworked so the semantics are more clear
11445         and also support value types "this" instances.
11446
11447         * iterators.cs: Changed so that for iterators in value types, we
11448         do not pass the value type as a parameter.  
11449
11450         Initialization of the enumerator helpers is now done in the caller
11451         instead of passing the parameters to the constructors and having
11452         the constructor set the fields.
11453
11454         The fields have now `assembly' visibility instead of private.
11455
11456 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
11457
11458         * expression.cs (Argument.Resolve): Check if fields passed as ref
11459         or out are contained in a MarshalByRefObject.
11460
11461         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
11462         another compiler type.
11463
11464 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11465
11466         * class.cs (Indexer.Define): use the new name checking method.
11467         Also, return false on an error.
11468         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11469         (is_identifier_[start/part]_character): make static.
11470
11471 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11472
11473         * expression.cs (Binary.ResolveOperator): Do no append strings
11474         twice: since we can be invoked more than once (array evaluation)
11475         on the same concatenation, take care of this here.  Based on a fix
11476         from Ben (bug #56454)
11477
11478 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11479
11480         * codegen.cs: Fix another case where CS1548 must be reported (when 
11481         delay-sign isn't specified and no private is available #56564). Fix
11482         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11483         error when MCS is used on the MS runtime and we need to delay-sign 
11484         (which seems unsupported by AssemblyBuilder - see #56621).
11485
11486 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11487
11488         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11489         (TypeManager.ComputeNamespaces): Faster implementation for
11490         Microsoft runtime.
11491
11492         * compiler.csproj: Updated AssemblyName to mcs.
11493
11494 2004-05-11  Jackson Harper  <jackson@ximian.com>
11495
11496         * Makefile: Preserve MONO_PATH
11497         
11498 2004-05-11  Jackson Harper  <jackson@ximian.com>
11499
11500         * Makefile: Use mono and mcs to build gmcs
11501         
11502 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11503
11504         * codegen.cs: Add patch from Robert Shade
11505         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11506         sync with mcs.
11507
11508 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11509
11510         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11511         incomplete key pairs (#57941).
11512
11513 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11514
11515         * codegen.cs: Fix another case where CS1548 must be reported (when 
11516         delay-sign isn't specified and no private is available #56564). Fix
11517         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11518         error when MCS is used on the MS runtime and we need to delay-sign 
11519         (which seems unsupported by AssemblyBuilder - see #56621).
11520
11521 2004-04-29  Jackson Harper  <jackson@ximian.com>
11522
11523         * Makefile: Set MONO_PATH to use the bootstrap corlib
11524         * driver.cs: Check the GAC for referenced assemblies.
11525                 
11526 2004-04-29  Martin Baulig  <martin@ximian.com>
11527
11528         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11529
11530 2004-04-07  Martin Baulig  <martin@ximian.com>
11531
11532         * expression.cs (Binary.ResolveOperator): Added special case for
11533         Equality/Inequality between a type parameter and a null literal.
11534
11535 2004-04-07  Martin Baulig  <martin@ximian.com>
11536
11537         * convert.cs: Check null literal -> type parameter conversions.
11538
11539 2004-04-07  Martin Baulig  <martin@ximian.com>
11540
11541         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11542         `class' and `struct' constraints.
11543
11544 2004-04-07  Martin Baulig  <martin@ximian.com>
11545
11546         * generic.cs (SpecialConstraint): New public enum.
11547         (Constraints.Resolve): Added support for the `class' and `struct'
11548         constraints.
11549
11550         * cs-parser.jay (type_parameter_constraint): Added support for the
11551         `class' and `struct' constraints.
11552
11553 2004-04-07  Martin Baulig  <martin@ximian.com>
11554
11555         * support.cs (GenericConstraints): Replaced `Types' by
11556         `ClassConstraint' and `InterfaceConstraints'; added
11557         `HasClassConstraint'.   
11558
11559 2004-04-07  Martin Baulig  <martin@ximian.com>
11560
11561         * generic.cs
11562         (Constraints.InterfaceConstraints): New public property.
11563         (Constraints.Types): Make this property public
11564         (TypeParameter): Implement IMemberContainer.
11565         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11566         instead of a TypeBuilder/MethodBuilder; pass the interface
11567         constraints to TypeManager.AddTypeParameter().
11568         (TypeParameter.DefineType): Just take an EmitContext and no
11569         TypeBuilder/MethodBuilder.  Use the new public API.
11570
11571         * typemanager.cs (TypeManager.AddTypeParameter): Added
11572         `TypeExpr[]' argument; add the interfaces to the
11573         `builder_to_ifaces' hash.
11574         (TypeManager.LookupMemberContainer): For
11575         GenericTypeParameterBuilders, get the TypeParameter from the
11576         `builder_to_type_param'.
11577         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11578         the TypeParameter and call FindMembers on it.
11579
11580 2004-04-07  Martin Baulig  <martin@ximian.com>
11581
11582         * class.cs
11583         (MethodCore.GenericMethod): Moved this field here from Method.
11584         (MethodCore.IsDuplicateImplementation): Take the number of type
11585         parameters into account if we're a generic method.
11586
11587         * expression.cs (Invocation.InferTypeArguments): Don't return true
11588         if `arguments' is null; we still need to check whether we actually
11589         don't need to infer anything in this case.
11590         (MemberAccess): Merged the functionality from GenericMemberAccess
11591         into this class.
11592
11593         * generic.cs (GenericMemberAccess): Removed.
11594
11595 2004-04-05  Martin Baulig  <martin@ximian.com>
11596
11597         * decl.cs (MemberCore): For generic classes, interfaces and
11598         structs, `Name' now includes the number of type parameters
11599         ("Stack!1.Node!1").
11600         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
11601         encode the number of type arguments in the type name.
11602
11603         * expression.cs (Expression.MemberLookup): Removed the
11604         `num_type_args' argument; we now encode the number of type
11605         arguments in the type name.
11606
11607         * ecore.cs (SimpleName): Encode the number of type arguments in
11608         the type name itself.
11609
11610         * generic.cs (ConstructedType): Likewise.
11611
11612         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
11613         `MemberName'; we now include the number of type parameters in the
11614         type name.
11615
11616         * typemanager.cs (TypeManager.CheckGeneric): Removed.
11617         (TypeManager.MemberLookup): Removed the
11618         `num_type_args' argument; we now encode the number of type
11619         arguments in the type name.     
11620
11621 2004-04-03  Martin Baulig  <martin@ximian.com>
11622
11623         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
11624         (MemberCore.MemberName): Moved here from MemberBase.
11625         (DeclSpace.SetParameterInfo): Just take the constraints as an
11626         ArrayList; we already have the type parameters in our
11627         `MemberName'; also do the CS0080 reporting here.
11628
11629         * cs-parser.jay (struct_declaration): Use `member_name' instead of
11630         `IDENTIFIER opt_type_parameter_list'; when constructing our
11631         `MemberName', it'll already include our type parameters.
11632         (class_declaration, interface_declaration): Likewise.
11633         (delegate_declaration): Likewise.
11634         (MakeName): Take a MemberName and return a MemberName.
11635         The following two changes are required to avoid shift/reduce conflicts:
11636         (member_name): Don't include a TypeName anymore; ie. this is now
11637         just 'IDENTIFIER opt_type_parameter_list'.
11638         (property_declaration, event_declaration): Use a
11639         `namespace_or_type_name' instead of a `member_name'.            
11640
11641 2004-04-03  Martin Baulig  <martin@ximian.com>
11642
11643         * decl.cs (MemberName): Renamed to `TypeName' and created a new
11644         `MemberName' class.
11645         (TypeName): Formerly known as MemberName.
11646
11647         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
11648         instead of a `MemberName'.
11649
11650         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
11651         (member_name): New rule; create a MemberName.
11652
11653 2004-04-02  Martin Baulig  <martin@ximian.com>
11654
11655         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
11656         (CS0305 and CS0308).
11657
11658 2004-04-02  Martin Baulig  <martin@ximian.com>
11659
11660         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
11661         support for nested types.
11662
11663 2004-04-02  Martin Baulig  <martin@ximian.com>
11664
11665         * ecore.cs (IAlias): New public interface.
11666         (TypeExpr, TypeExpression): Implement IAlias.
11667         (TypeAliasExpression): New public class.
11668
11669         * namespace.cs (Namespace): Implement IAlias.
11670         (Namespace.Lookup): Return an IAlias instead on an object.
11671         (Namespace.DefineName): Take an IAlias instead of an object.
11672         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
11673         an object.
11674         (NamespaceEntry.UsingAlias): Take a Membername instead of an
11675         Expression.
11676         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
11677         object.
11678         (NamespaceEntry.Lookup): Likewise.
11679
11680         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
11681         instead of a Type.      
11682
11683         * decl.cs (DeclSpace): Implement IAlias.
11684         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
11685
11686         * generic.cs (ConstructedType): Improved error checking.
11687
11688 2004-04-02  Martin Baulig  <martin@ximian.com>
11689
11690         * convert.cs: Added type parameter conversions.
11691
11692         * ecore.cs
11693         (UnboxCast.Emit): Emit an `unbox.any' for type params.
11694         (ClassCast.Emit): If the source type is a type parameter, box it.
11695         If the target type is a type parameter, emit an `unbox.any'
11696         instead of a `classcast'.1      
11697
11698 2004-04-01  Martin Baulig  <martin@ximian.com>
11699
11700         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
11701
11702 2004-04-01  Martin Baulig  <martin@ximian.com>
11703
11704         * generic.cs (ConstructedType.CheckConstraints): Use
11705         Convert.ImplicitStandardConversionExists(); user-defined implicit
11706         conversions are not allowed according to the spec.
11707
11708 2004-03-30  Martin Baulig  <martin@ximian.com>
11709
11710         * expression.cs (New): Added support for type parameters.
11711
11712         * typemanager.cs
11713         (TypeManager.activator_type): New public static field.
11714         (TypeManager.activator_create_instance): Likewise.
11715
11716 2004-03-30  Martin Baulig  <martin@ximian.com>
11717
11718         * typemanager.cs (TypeManager.HasConstructorConstraint): New
11719         public method.
11720
11721 2004-03-30  Martin Baulig  <martin@ximian.com>
11722
11723         * generic.cs (ConstructedType.CheckConstraints): Actually follow
11724         the spec here: the argument type must be convertible to the
11725         constraints.
11726
11727 2004-03-30  Martin Baulig  <martin@ximian.com>
11728
11729         * generic.cs
11730         (TypeParameter.Define, TypeParameter.DefineMethod): Call
11731         TypeManager.AddTypeParameter().
11732         (ConstructedType.CheckConstraints): Re-enable this and actually
11733         check whether we have a constructor constraint.
11734
11735         * typemanager.cs
11736         (TypeManager.builder_to_type_param): New static field.
11737         (TypeManager.AddTypeParameter): New static method.
11738         (TypeManager.LookupTypeParameter): New public method.
11739
11740 2004-03-30  Martin Baulig  <martin@ximian.com>
11741
11742         * generic.cs (TypeParameter.DefineType): Return a boolean and use
11743         the new API to actually define the constructor constraint.
11744
11745         * typemanager.cs
11746         (TypeManager.new_constraint_attr_type): New static field.
11747         (TypeManager.InitCoreTypes): Initialize it.
11748
11749 2004-03-30  Martin Baulig  <martin@ximian.com>
11750
11751         * generic.cs (Constraints): Completed error checking, use correct
11752         error numbers.
11753
11754 2004-03-29  Martin Baulig  <martin@ximian.com>
11755
11756         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
11757
11758         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11759         public version which takes a `ParameterData pd' instead of an
11760         `ArrayList args'.
11761
11762 2004-03-29  Martin Baulig  <martin@ximian.com>
11763
11764         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
11765         not a MethodInfo.       
11766
11767 2004-03-29  Martin Baulig  <martin@ximian.com>
11768
11769         * expression.cs (Argument.ResolveMethodGroup): If we're a
11770         ConstructedType, call GetMemberAccess() on it.  
11771
11772 2004-03-29  Martin Baulig  <martin@ximian.com>
11773
11774         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
11775         (MethodCore.CheckGenericOverride): When overriding a generic
11776         method, check whether the constraints match.
11777
11778         * support.cs (GenericConstraints): New public interface.
11779         (ParameterData.GenericConstraints): New public method.
11780
11781         * parameter.cs (Parameter.Resolve): Check whether we're a generic
11782         method parameter and compute our constraints if appropriate.
11783         (Parameter.GenericConstraints): New public property.
11784
11785         * generic.cs (Constraints): Implement GenericConstraints.
11786
11787 2004-03-29  Martin Baulig  <martin@ximian.com>
11788
11789         * decl.cs (MemberCache.FindMemberToOverride): Use
11790         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
11791
11792 2004-03-29  Martin Baulig  <martin@ximian.com>
11793
11794         * generic.cs (GenericMethod.Define): Resolve our type parameters.
11795
11796 2004-03-29  Martin Baulig  <martin@ximian.com>
11797
11798         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
11799         not allowed on non-generic declarations").
11800
11801 2004-03-29  Martin Baulig  <martin@ximian.com>
11802
11803         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11804         public version of this method.
11805
11806         * class.cs (MethodCore.IsDuplicateImplementation): Use
11807         Invocation.InferTypeArguments() to check this.
11808
11809 2004-03-29  Martin Baulig  <martin@ximian.com>
11810
11811         * convert.cs: Use TypeManager.IsDelegateType() instead of
11812         comparing types correctly.
11813
11814 2004-03-29  Martin Baulig  <martin@ximian.com>
11815
11816         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
11817         types directly to make it work for generic instances.
11818
11819         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
11820
11821 2004-03-29  Martin Baulig  <martin@ximian.com>
11822
11823         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
11824         support for arrays.     
11825
11826 2004-03-24  Martin Baulig  <martin@ximian.com>
11827
11828         * decl.cs (DeclSpace.FindType): Also use
11829         TypeManager.CheckGeneric() for types from the using clauses.
11830
11831 2004-03-23  Martin Baulig  <martin@ximian.com>
11832
11833         * expression.cs (Invocation.OverloadResolve): Added `bool
11834         may_fail' argument and use it instead of the Location.IsNull() hack.
11835
11836 2004-03-23  Martin Baulig  <martin@ximian.com>
11837
11838         * expression.cs (Invocation.InferType): Use correct type inference
11839         rules here.     
11840
11841 2004-03-23  Martin Baulig  <martin@ximian.com>
11842
11843         * ecore.cs (MethodGroupExpr.Name): Use
11844         TypeManager.CSharpSignature() instead of just the name.
11845
11846         * expression.cs (Invocation.OverloadResolve): Provide better error
11847         reporting.
11848         (Invocation.DoResolve): OverloadResolve() never returns null
11849         without reporting an error, so removed the error -6 reporting here.
11850
11851 2004-03-23  Martin Baulig  <martin@ximian.com>
11852
11853         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
11854         generic methods.
11855
11856         * cs-parser.jay (delegate_declaration): Support generic delegates.
11857
11858         * delegate.cs: Support generic delegates.
11859
11860 2004-03-22  Martin Baulig  <martin@ximian.com>
11861
11862         * expression.cs (Invocation.InferParamsTypeArguments): New static
11863         method; does type inference for params arguments.
11864
11865 2004-03-21  Martin Baulig  <martin@ximian.com>
11866
11867         * typemanager.cs (TypeManager.IsGenericMethod): New public static
11868         method; checks whether a method is a generic method.    
11869
11870         * expression.cs (Invocation.InferTypeArguments): New static method;
11871         infer type arguments for generic method invocation.
11872
11873         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
11874         property; we set this to true if we're resolving a generic method
11875         invocation and the user specified type arguments, ie. we're not
11876         doing type inference.
11877
11878 2004-03-20  Martin Baulig  <martin@ximian.com>
11879
11880         * class.cs (MethodData.DeclaringType): New public property.
11881         (MethodData.Define): Set DeclaringType here.
11882         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
11883         instead of OperatorMethodBuilder.DeclaringType.
11884
11885 2004-03-20  Martin Baulig  <martin@ximian.com>
11886
11887         * cs-tokenizer.cs (xtoken): Return a special
11888         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
11889
11890         * cs-parser.jay (default_value_expression): Switch to the new
11891         syntax (14.5.13).
11892
11893 2004-03-19  Martin Baulig  <martin@ximian.com>
11894
11895         * decl.cs (MemberName): New class.  We use this to "construct"
11896         namespace_or_type_name's.
11897
11898         * generics.cs (TypeArguments.GetDeclarations): New public method;
11899         returns the type arguments as a string[] and reports a CS0081 if
11900         one of them is not an identifier.
11901
11902         * class.cs (MemberBase): The .ctor now takes the name as a
11903         MemberName instead of a string.
11904         (MemberBase.ExplicitInterfaceName): Changed type from string to
11905         Expression.
11906         (MemberBase.DoDefine): If we're an explicit implementation, the
11907         InterfaceType may be a generic instance.
11908
11909         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
11910         (namespace_name): Call MemberName.GetName () to transform the
11911         MemberName into a string and ensure we don't have any type
11912         arguments.
11913         (type_name): Call MemberName.GetTypeExpression() to transfrom the
11914         MemberName into an expression.
11915         (method_header): Use namespace_or_type_name instead of member_name.     
11916
11917 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
11918
11919         * rootcontext.cs: Add new types to the boot resolution.
11920
11921         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
11922         MulticastDelegate is not allowed.
11923
11924         * typemanager.cs: Add new types to lookup: System.TypedReference
11925         and ArgIterator.
11926
11927         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
11928         check for TypedReference or ArgIterator, they are not allowed. 
11929
11930         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
11931         makes us properly catch 1510 in some conditions (see bug 56016 for
11932         details). 
11933
11934 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
11935
11936         * CryptoConvert.cs: update from corlib version
11937         with endian fixes.
11938
11939 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
11940
11941         * class.cs (Indexer.Define): Check indexername declaration
11942
11943 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
11944
11945         * attribute.cs (IsClsCompliant): Fixed problem with handling
11946         all three states (compliant, not-compliant, undetected).
11947
11948 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
11949
11950         * attribute.cs (Attribute): Location is now public.
11951         (Resolve): Store resolved arguments (pos_values) in attribute class.
11952         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
11953         (GetClsCompliantAttributeValue): New method that gets
11954         CLSCompliantAttribute value.
11955         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
11956         if exists else null.
11957         (AttributeTester): New class for CLS-Compliant verification routines.
11958
11959         * class.cs (Emit): Add CLS-Compliant verification.
11960         (Method.GetSignatureForError): Implemented.
11961         (Constructor.GetSignatureForError): Implemented
11962         (Constructor.HasCompliantArgs): Returns if constructor has
11963         CLS-Compliant arguments.
11964         (Constructor.Emit): Override.
11965         (Construcor.IsIdentifierClsCompliant): New method; For constructors
11966         is needed to test only parameters.
11967         (FieldBase.GetSignatureForError): Implemented.
11968         (TypeContainer): New member for storing base interfaces.
11969         (TypeContainer.FindMembers): Search in base interfaces too.
11970
11971         * codegen.cs (GetClsComplianceAttribute): New method that gets
11972         assembly or module CLSCompliantAttribute value.
11973         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
11974         for assembly.
11975         (ModuleClass.Emit): Add error 3012 test.
11976
11977         * const.cs (Emit): Override and call base for CLS-Compliant tests.
11978
11979         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
11980         state for all decl types.
11981         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
11982         if CLS-Compliant tests are required.
11983         (IsClsCompliaceRequired): New method. Analyze whether code
11984         must be CLS-Compliant.
11985         (IsExposedFromAssembly): New method. Returns true when MemberCore
11986         is exposed from assembly.
11987         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
11988         value or gets cached value.
11989         (HasClsCompliantAttribute): New method. Returns true if MemberCore
11990         is explicitly marked with CLSCompliantAttribute.
11991         (IsIdentifierClsCompliant): New abstract method. This method is
11992         used to testing error 3005.
11993         (IsIdentifierAndParamClsCompliant): New method. Common helper method
11994         for identifier and parameters CLS-Compliant testing.
11995         (VerifyClsCompliance): New method. The main virtual method for
11996         CLS-Compliant verifications.
11997         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
11998         null. I don't know why is null (too many public members !).
11999         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
12000         and get value of first CLSCompliantAttribute that found.
12001
12002         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
12003         (VerifyClsCompliance): Override and add extra tests.
12004
12005         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
12006         clscheck- disable CLS-Compliant verification event if assembly is has
12007         CLSCompliantAttribute(true).
12008
12009         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
12010         ApllyAttribute is now called in emit section as in the other cases.
12011         Possible future Emit integration.
12012         (IsIdentifierClsCompliant): New override.
12013         (VerifyClsCompliance): New override.
12014         (GetEnumeratorName): Returns full enum name.
12015
12016         * parameter.cs (GetSignatureForError): Implemented.
12017
12018         * report.cs (WarningData): New struct for Warning message information.
12019         (LocationOfPreviousError): New method.
12020         (Warning): New method. Reports warning based on the warning table.
12021         (Error_T): New method. Reports error based on the error table.
12022
12023         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
12024         verifications are done here.
12025
12026         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
12027
12028         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
12029         CLSCompliantAttribute.
12030         (all_imported_types): New member holds all imported types from other
12031         assemblies.
12032         (LoadAllImportedTypes): New method fills static table with exported types
12033         from all referenced assemblies.
12034         (Modules): New property returns all assembly modules.
12035
12036 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
12037
12038         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
12039         throwing a parser error.
12040
12041         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
12042         which removes the hardcoded get_/set_ prefixes for properties, as
12043         IL allows for the properties to be named something else.  
12044
12045         Bug #56013
12046
12047         * expression.cs: Do not override operand before we know if it is
12048         non-null.  Fix 56207
12049
12050 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12051
12052         * typemanager.cs: support for pinned variables.
12053
12054 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12055
12056         * decl.cs, typemanager.cs: Avoid using an arraylist
12057         as a buffer if there is only one result set.
12058
12059 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12060
12061         * expression.cs: Make sure you cant call a static method
12062         with an instance expression, bug #56174.
12063
12064 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
12065
12066         * class.cs (IsDuplicateImplementation): Improve error reporting to
12067         flag 663 (method only differs in parameter modifier).
12068
12069         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
12070         in preprocessor directives.
12071
12072         * location.cs (LookupFile): Allow for the empty path.
12073
12074         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
12075         better approach for some of that patch, but its failing with the
12076         CharSet enumeration.  For now try/catch will do.
12077
12078         * typemanager.cs: Do not crash if a struct does not have fields.
12079         Fixes 56150.
12080
12081 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12082
12083         * expression.cs: cs0213, cant fix a fixed expression.
12084         fixes 50231.
12085
12086 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12087
12088         * cs-parser.jay: detect invalid embeded statements gracefully.
12089         bug #51113.
12090
12091 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12092
12093         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
12094         As a regex:
12095         s/
12096         the invocation type may not be a subclass of the tye of the item/
12097         The type of the item must be a subclass of the invocation item.
12098         /g
12099
12100         Fixes bug #50820.
12101
12102 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
12103
12104         * attribute.cs: Added methods to get a string and a bool from an
12105         attribute. Required to information from AssemblyKeyFileAttribute,
12106         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
12107         * codegen.cs: Modified AssemblyName creation to include support for
12108         strongnames. Catch additional exceptions to report them as CS1548.
12109         * compiler.csproj: Updated include CryptoConvert.cs.
12110         * compiler.csproj.user: Removed file - user specific configuration.
12111         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
12112         Mono.Security assembly. The original class is maintained and tested in
12113         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
12114         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
12115         like CSC 8.0 (C# v2) supports.
12116         * Makefile: Added CryptoConvert.cs to mcs sources.
12117         * rootcontext.cs: Added new options for strongnames.
12118
12119 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
12120
12121         * driver.cs: For --expect-error, report error code `2'
12122         if the program compiled with no errors, error code `1' if
12123         it compiled with an error other than the one expected.
12124
12125 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
12126
12127         * compiler.csproj: Updated for Visual Studio .NET 2003.
12128         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
12129         * compiler.sln: Updated for Visual Studio .NET 2003.
12130
12131 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
12132
12133         * expression.cs: Fix bug #47234. We basically need to apply the
12134         rule that we prefer the conversion of null to a reference type
12135         when faced with a conversion to 'object' (csc behaviour).
12136
12137 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12138
12139         * statement.cs: Shorter form for foreach, eliminates
12140         a local variable. r=Martin.
12141
12142 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12143
12144         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
12145         checks if we can use brtrue/brfalse to test for 0.
12146         * expression.cs: use the above in the test for using brtrue/brfalse.
12147         cleanup code a bit.
12148
12149 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12150
12151         * expression.cs: Rewrite string concat stuff. Benefits:
12152
12153         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
12154         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
12155         rather than a concat chain.
12156
12157         * typemanager.cs: Add lookups for more concat overloads.
12158
12159 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12160
12161         * expression.cs: Emit shorter il code for array init.
12162
12163         newarr
12164         dup
12165         // set 1
12166
12167         // set 2
12168
12169         newarr
12170         stloc.x
12171
12172         ldloc.x
12173         // set 1
12174
12175         ldloc.x
12176         // set 2
12177
12178 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
12179
12180         * statement.cs: Before, two switch blocks would be merged if the
12181         total size of the blocks (end_item - begin_item + 1) was less than
12182         two times the combined sizes of the blocks.
12183
12184         Now, it will only merge if after the merge at least half of the
12185         slots are filled.
12186
12187         fixes 55885.
12188
12189 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
12190
12191         * class.cs : csc build fix for GetMethods(). See bug #52503.
12192
12193 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
12194
12195         * expression.cs: Make sure fp comparisons work with NaN.
12196         This fixes bug #54303. Mig approved this patch a long
12197         time ago, but we were not able to test b/c the runtime
12198         had a related bug.
12199
12200 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
12201
12202         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
12203
12204 2004-03-19  Martin Baulig  <martin@ximian.com>
12205
12206         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
12207         two overloads may unify for some type parameter substitutions and
12208         report a CS0408 if appropriate.
12209
12210 2004-03-19  Martin Baulig  <martin@ximian.com>
12211
12212         * class.cs (MemberCore.IsDuplicateImplementation): Report the
12213         error here and not in our caller.
12214
12215 2004-03-19  Martin Baulig  <martin@ximian.com>
12216
12217         * interface.cs: Completely killed this file.
12218         (Interface): We're now a TypeContainer and live in class.cs.
12219
12220         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
12221         argument; we're now also called for interfaces.
12222         (TypeContainer.DefineMembers): Allow this method being called
12223         multiple times.
12224         (TypeContainer.GetMethods): New public method; formerly known as
12225         Interface.GetMethod().  This is used by PendingImplementation.
12226         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
12227         it's now private and non-static.
12228         (Interface): Moved this here; it's now implemented similar to
12229         Class and Struct.
12230         (Method, Property, Event, Indexer): Added `bool is_interface'
12231         argument to their .ctor's.
12232         (MemberBase.IsInterface): New public field.
12233
12234         * cs-parser.jay: Create normal Method, Property, Event, Indexer
12235         instances instead of InterfaceMethod, InterfaceProperty, etc.
12236         (opt_interface_base): Removed; we now use `opt_class_base' instead.
12237         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
12238
12239 2004-03-19  Martin Baulig  <martin@ximian.com>
12240
12241         * class.cs (MethodCore.IsDuplicateImplementation): New private
12242         method which does the CS0111 checking.
12243         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
12244         Use IsDuplicateImplementation().
12245
12246 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
12247
12248         * decl.cs (FindMemberToOverride): New method to find the correct
12249         method or property to override in the base class.
12250         * class.cs
12251             - Make Method/Property use the above method to find the
12252               version in the base class.
12253             - Remove the InheritableMemberSignatureCompare as it is now
12254               dead code.
12255
12256         This patch makes large code bases much faster to compile, as it is
12257         O(n) rather than O(n^2) to do this validation.
12258
12259         Also, it fixes bug 52458 which is that nested classes are not
12260         taken into account when finding the base class member.
12261
12262         Reviewed/Approved by Martin.
12263
12264 2004-03-17  Martin Baulig  <martin@ximian.com>
12265
12266         * expression.cs (MemberAccess.DoResolve): Take the parent's number
12267         of type arguments into account; use the `real_num_type_args'
12268         approach like in DoResolveAsTypeStep().
12269
12270         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
12271         nested types.
12272
12273 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
12274
12275         * interface.cs: In all interface classes removed redundant
12276         member initialization.
12277
12278 2004-03-16  Martin Baulig  <martin@ximian.com>
12279
12280         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12281
12282 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12283
12284         * decl.cs (DefineTypeAndParents): New helper method to define a
12285         type's containers before the type itself is defined;  This is a
12286         bug exposed by the recent changes to Windows.Forms when an
12287         implemented interface was defined inside a class that had not been
12288         built yet.   
12289
12290         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
12291
12292         (Check): Loop correctly to report errors modifiers
12293         (UNSAFE was not in the loop, since it was the same as TOP).
12294
12295         * interface.cs: Every interface member now takes a ModFlags,
12296         instead of a "is_new" bool, which we set on the base MemberCore. 
12297
12298         Every place where we called "UnsafeOk" in the interface, now we
12299         call the proper member (InterfaceMethod.UnsafeOK) instead to get
12300         the unsafe settings from the member declaration instead of the
12301         container interface. 
12302
12303         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
12304
12305         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12306         `set_indexer_name' to the pending bits (one per type).
12307
12308         We fixed a bug today that was picking the wrong method to
12309         override, since for properties the existing InterfaceMethod code
12310         basically ignored the method name.  Now we make sure that the
12311         method name is one of the valid indexer names.
12312
12313 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
12314  
12315         * support.cs (SeekableStreamReader): Keep track of stream byte
12316         positions and don't mix them with character offsets to the buffer.
12317
12318         Patch from Gustavo Giráldez
12319
12320 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
12321
12322         * interface.cs (InterfaceSetGetBase): Removed double member
12323         initialization, base class does it as well.
12324
12325 2004-03-13  Martin Baulig  <martin@ximian.com>
12326
12327         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
12328         when compiling corlib.
12329
12330 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
12331
12332         * convert.cs (ExplicitConversion): We were reporting an error on
12333         certain conversions (object_type source to a value type, when the
12334         expression was `null') before we had a chance to pass it through
12335         the user defined conversions.
12336
12337         * driver.cs: Replace / and \ in resource specifications to dots.
12338         Fixes 50752
12339
12340         * class.cs: Add check for duplicate operators.  Fixes 52477
12341
12342 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
12343
12344         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
12345         that are in the middle of the statements, not only at the end.
12346         Fixes #54987
12347
12348         * class.cs (TypeContainer.AddField): No longer set the
12349         `HaveStaticConstructor' flag, now we call it
12350         `UserDefineStaticConstructor' to diferentiate the slightly
12351         semantic difference.
12352
12353         The situation is that we were not adding BeforeFieldInit (from
12354         Modifiers.TypeAttr) to classes that could have it.
12355         BeforeFieldInit should be set to classes that have no static
12356         constructor. 
12357
12358         See:
12359
12360         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
12361
12362         And most importantly Zoltan's comment:
12363
12364         http://bugzilla.ximian.com/show_bug.cgi?id=44229
12365
12366         "I think beforefieldinit means 'it's ok to initialize the type sometime 
12367          before its static fields are used', i.e. initialization does not need
12368          to be triggered by the first access to the type. Setting this flag
12369          helps the JIT to compile better code, since it can run the static
12370          constructor at JIT time, and does not need to generate code to call it
12371          (possibly lots of times) at runtime. Unfortunately, mcs does not set
12372          this flag for lots of classes like String. 
12373          
12374          csc sets this flag if the type does not have an explicit static 
12375          constructor. The reasoning seems to be that if there are only static
12376          initalizers for a type, and no static constructor, then the programmer
12377          does not care when this initialization happens, so beforefieldinit
12378          can be used.
12379          
12380          This bug prevents the AOT compiler from being usable, since it 
12381          generates so many calls to mono_runtime_class_init that the AOT code
12382          is much slower than the JITted code. The JITted code is faster, 
12383          because it does not generate these calls if the vtable is type is
12384          already initialized, which is true in the majority of cases. But the
12385          AOT compiler can't do this."
12386
12387 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
12388
12389         * class.cs (MethodData.Emit): Refactor the code so symbolic
12390         information is generated for destructors;  For some reasons we
12391         were taking a code path that did not generate symbolic information
12392         before. 
12393
12394 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12395
12396         * class.cs: Create a Constructor.CheckBase method that
12397         takes care of all validation type code. The method
12398         contains some code that was moved from Define.
12399
12400         It also includes new code that checks for duplicate ctors.
12401         This fixes bug #55148.
12402
12403 2004-03-09  Joshua Tauberer <tauberer@for.net>
12404
12405         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
12406         a { ... }-style array creation invokes EmitStaticInitializers
12407         which is not good for reference-type arrays.  String, decimal
12408         and now null constants (NullCast) are not counted toward
12409         static initializers.
12410
12411 2004-03-05  Martin Baulig  <martin@ximian.com>
12412
12413         * location.cs (SourceFile.HasLineDirective): New public field;
12414         specifies whether the file contains or is referenced by a "#line"
12415         directive.
12416         (Location.DefineSymbolDocuments): Ignore source files which
12417         either contain or are referenced by a "#line" directive.        
12418
12419 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
12420
12421         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
12422         direct access to our parent, so check the method inline there.
12423
12424 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12425
12426         * expression.cs (Invocation.EmitCall): Miguel's last commit
12427         caused a regression. If you had:
12428
12429             T t = null;
12430             t.Foo ();
12431
12432         In Foo the implict this would be null.
12433
12434 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
12435
12436         * expression.cs (Invocation.EmitCall): If the method is not
12437         virtual, do not emit a CallVirt to it, use Call.
12438
12439         * typemanager.cs (GetFullNameSignature): Improve the method to
12440         cope with ".ctor" and replace it with the type name.
12441
12442         * class.cs (ConstructorInitializer.Resolve): Now the method takes
12443         as an argument the ConstructorBuilder where it is being defined,
12444         to catch the recursive constructor invocations.
12445
12446 2004-03-16  Martin Baulig  <martin@ximian.com>
12447
12448         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
12449         ConstructedType, call ResolveType() on it to get the type rather
12450         than just using `expr.Type'.
12451
12452 2004-03-16  Martin Baulig  <martin@ximian.com>
12453
12454         * generics.cs (ConstructedType.GetMemberAccess): Take the
12455         EmitContext instead on the TypeExpr and use
12456         ec.TypeContainer.CurrentType/ec.ContainerType.
12457
12458 2004-03-16  Martin Baulig  <martin@ximian.com>
12459
12460         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
12461         parameters before aliases.
12462
12463 2004-03-16  Martin Baulig  <martin@ximian.com>
12464
12465         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12466         New oublic function; checks whether two generic instances may become
12467         equal under some instantiations (26.3.1).
12468
12469         * class.cs (TypeContainer.Define): Call
12470         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12471         error.
12472
12473 2004-03-16  Martin Baulig  <martin@ximian.com>
12474
12475         * class.cs (TypeContainer.GetClassBases): Moved
12476         Error_TypeParameterAsBase() here and also check whether the base
12477         class is not an attribute.
12478
12479 2004-03-16  Martin Baulig  <martin@ximian.com>
12480
12481         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12482
12483 2004-03-16  Martin Baulig  <martin@ximian.com>
12484
12485         * class.cs (Error_TypeParameterAsBase): Use correct error number
12486         here (CS0689).  
12487
12488 2004-03-16  Martin Baulig  <martin@ximian.com>
12489
12490         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12491         for generics.
12492
12493         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12494         error reporting.
12495
12496 2004-03-15  Martin Baulig  <martin@ximian.com>
12497
12498         * typemanager.cs (TypeManager.GetFullName): New public method.
12499         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12500         argument; only return members with the correct number of type
12501         arguments.
12502         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12503         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12504         whether the number of type arguments matches.
12505
12506         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12507         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12508
12509         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12510         field; it's set by the protected .ctor when we're actually a
12511         GenericMemberAccess.
12512         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12513         arguments and pass it to MemberLookupFinal ().
12514
12515         * ecore.cs (Expression.MemberLookup): Added `int
12516         num_type_arguments' argument; only return members with the correct
12517         number of type arguments.
12518         (Expression.MemberLookupFailed): Check whether the MemberLookup
12519         failed because we did not have the correct number of type
12520         arguments; report CS0305 in this case.
12521
12522         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12523         `e.ResolveAsTypeTerminal()' already did so.
12524
12525 2004-03-15  Martin Baulig  <martin@ximian.com>
12526
12527         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12528         we're a ConstructedType; in this case, the caller must report an
12529         error (for instance CS0131).
12530
12531         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12532         (TypeArguments.Resolve): Actually report errors here.
12533
12534 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12535
12536         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12537         `set_indexer_name' to the pending bits (one per type).
12538
12539         We fixed a bug today that was picking the wrong method to
12540         override, since for properties the existing InterfaceMethod code
12541         basically ignored the method name.  Now we make sure that the
12542         method name is one of the valid indexer names.
12543
12544 2004-03-15  Martin Baulig  <martin@ximian.com>
12545
12546         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12547         for generic instances.
12548
12549 2004-03-13  Martin Baulig  <martin@ximian.com>
12550
12551         * class.cs (TypeContainer.DefineType): Call
12552         TypeManager.AddUserType() immediately after creating the
12553         TypeBuilder; pass all type parameters when creating the
12554         CurrentType.
12555
12556         * decl.cs (DeclSpace.FindNestedType): New public method.
12557         (DeclSpace.FindType): Added `int num_type_args' argument; only
12558         return types with the correct number of type parameters.
12559         (DeclSpace.CountTypeParams): New public property.
12560
12561         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12562         the number of type parameters; defaults to zero.
12563
12564         * generic.cs (TypeArguments.Count): New public property.
12565         (ConstructedType.DoResolveAsTypeStep): First call
12566         ds.FindNestedType() to find out whether we're nested in the
12567         current generic type; in this case, we inherit all type parameters
12568         from the current class.
12569
12570         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12571         num_type_args' argument.
12572         (RootContext.LookupType): Added overloaded version which takes the
12573         number of type arguments; only return types with the correct
12574         number of type arguments.
12575
12576         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12577         checks whether `Type t' has `int num_type_args'.
12578
12579 2004-03-13  Martin Baulig  <martin@ximian.com>
12580
12581         * generic.cs (GenericMethod.DefineType): New method; calls
12582         DefineType() on all the type parameters.
12583
12584         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12585         (MethodData.Define): If we're a generic method, call
12586         GenericMethod.DefineType() to define the type parameters.       
12587
12588 2004-03-10  Martin Baulig  <martin@ximian.com>
12589
12590         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12591         instead of IsAssignableFrom.    
12592
12593 2004-03-10  Martin Baulig  <martin@ximian.com>
12594
12595         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
12596
12597         * support.cs (ParameterData.HasArrayParameter): New property.
12598         (ReflectionParameters.ctor): Take a MethodBase instead of a
12599         ParameterInfo[].  If we have any type parameters, get the generic
12600         method definition and ask it whether we have variable arguments.
12601
12602 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
12603
12604         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
12605         routines to check if a type is an enumerable/enumerator allow
12606         classes that implement the IEnumerable or IEnumerator interfaces.
12607
12608         * class.cs (Property, Operator): Implement IIteratorContainer, and
12609         implement SetYields.
12610
12611         (Property.Define): Do the block swapping for get_methods in the
12612         context of iterators.   We need to check if Properties also
12613         include indexers or not.
12614
12615         (Operator): Assign the Block before invoking the
12616         OperatorMethod.Define, so we can trigger the Iterator code
12617         replacement. 
12618
12619         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
12620         Property and Operator classes are not created when we parse the
12621         declarator but until we have the block completed, so we use a
12622         singleton SimpleIteratorContainer.Simple to flag whether the
12623         SetYields has been invoked.
12624
12625         We propagate this setting then to the Property or the Operator to
12626         allow the `yield' to function.
12627
12628 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
12629
12630         * codegen.cs: Implemented attribute support for modules.
12631         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
12632         Assembly/Module functionality.
12633
12634         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
12635         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
12636         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
12637
12638 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
12639
12640         * interface.cs (FindMembers): The operation is performed on all base
12641         interfaces and not only on the first. It is required for future CLS Compliance patch.
12642
12643 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12644
12645         * statement.cs, codegen.cs:
12646         This patch deals with patterns such as:
12647
12648         public class List : IEnumerable {
12649
12650                 public MyEnumerator GetEnumerator () {
12651                         return new MyEnumerator(this);
12652                 }
12653
12654                 IEnumerator IEnumerable.GetEnumerator () {
12655                         ...
12656                 }
12657                 
12658                 public struct MyEnumerator : IEnumerator {
12659                         ...
12660                 }
12661         }
12662
12663         Before, there were a few things we did wrong:
12664         1) we would emit callvirt on a struct, which is illegal
12665         2) we emited ldarg when we needed to emit ldarga
12666         3) we would mistakenly call the interface methods on an enumerator
12667         type that derived from IEnumerator and was in another assembly. For example:
12668
12669         public class MyEnumerator : IEnumerator
12670
12671         Would have the interface methods called, even if there were public impls of the
12672         method. In a struct, this lead to invalid IL code.
12673
12674 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
12675
12676         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
12677           renamed to Emit.
12678
12679         * delegate.cs (Define): Fixed crash when delegate type is undefined.
12680
12681 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
12682
12683         * cs-parser.jay: Fix small regression: we were not testing V2
12684         compiler features correctly.
12685
12686         * interface.cs: If the emit context is null, then create one
12687
12688 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
12689
12690         * decl.cs (GetSignatureForError): New virtual method to get full name
12691           for error messages.
12692
12693         * attribute.cs (IAttributeSupport): New interface for attribute setting.
12694           Now it is possible to rewrite ApplyAttributes method to be less if/else.
12695
12696         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
12697           Duplicated members and code in these classes has been removed.
12698           Better encapsulation in these classes.
12699
12700 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
12701
12702         * assign.cs (Assign.DoResolve): When dealing with compound
12703         assignments, there is a new rule in ECMA C# 2.4 (might have been
12704         there before, but it is documented here) that states that in:
12705
12706         a op= b;
12707
12708         If b is of type int, and the `op' is a shift-operator, then the
12709         above is evaluated as:
12710
12711         a = (int) a op b 
12712
12713         * expression.cs (Binary.ResolveOperator): Instead of testing for
12714         int/uint/long/ulong, try to implicitly convert to any of those
12715         types and use that in pointer arithmetic.
12716
12717         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
12718         method to print information for from the type, not from the
12719         null-method we were given.
12720
12721 2004-02-01  Duncan Mak  <duncan@ximian.com>
12722
12723         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
12724         parsing for cmd, fixes bug #53694.
12725
12726 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
12727
12728         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
12729         in the member name duplication tests. Property and operator name duplication
12730         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
12731
12732 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
12733
12734         * interface.cs (PopulateMethod): Fixed crash when interface method
12735         returns not existing type (error test cs0246-3.cs).
12736
12737 2004-02-02  Ravi Pratap M <ravi@ximian.com>
12738
12739         * cs-parser.jay (interface_accessors): Re-write actions to also
12740         store attributes attached to get and set methods. Fix spelling
12741         while at it.
12742
12743         (inteface_property_declaration): Modify accordingly.
12744
12745         (InterfaceAccessorInfo): New helper class to store information to pass
12746         around between rules that use interface_accessors.
12747
12748         * interface.cs (Emit): Apply attributes on the get and set
12749         accessors of properties and indexers too.
12750
12751         * attribute.cs (ApplyAttributes): Modify accordingly to use the
12752         right MethodBuilder when applying attributes to the get and set accessors.
12753
12754 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
12755
12756         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
12757
12758 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
12759
12760         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
12761
12762 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
12763
12764         * cs-parser.jay: Remove YIELD token, instead use the new grammar
12765         changes that treat `yield' specially when present before `break'
12766         or `return' tokens.
12767
12768         * cs-tokenizer.cs: yield is no longer a keyword.
12769
12770 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
12771
12772         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
12773         setting for default constructors.
12774         For default constructors are almost every time set wrong Modifier. The
12775         generated IL code has been alright. But inside mcs this values was
12776         wrong and this was reason why several of my CLS Compliance tests
12777         failed.
12778
12779 2004-02-27  Martin Baulig  <martin@ximian.com>
12780
12781         * generics.cs (ConstructedType.ResolveType): Make the nested type
12782         stuff actually work.
12783
12784 2004-02-25  Martin Baulig  <martin@ximian.com>
12785
12786         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
12787         property; returns the type parameters just from the current type,
12788         ie. with the ones from outer classes.
12789         (DeclSpace.LookupGeneric): First search in the current class, then
12790         in outer classes.
12791         (DeclSpace.initialize_type_params): When hiding a type parameter
12792         from an outer class, put it into the `type_param_list' anyways.
12793
12794         * expression.cs (MemberAccess.expr): Made this field protected.
12795
12796         * class.cs (TypeContainer.Define): The `CurrentType' just contains
12797         the type parameters from the current class.
12798
12799         * generic.cs (ConstructedType.ResolveType): Support nested generic
12800         types by taking the type parameters which we inherit from outer
12801         classes into account.
12802         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
12803         support for nested generic types.
12804
12805 2004-02-23  Martin Baulig  <martin@ximian.com>
12806
12807         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
12808         field and check whether we're nested inside a generic type.
12809         (DeclSpace.ResolveType): If we're resolving to a generic type
12810         definition, create a ConstructedType and return its resolved type.
12811         (DeclSpace.initialize_type_params): New private method;
12812         initializes the `type_param_list' field from the type parameters
12813         from this and all enclosing classes.
12814         (DeclSpace.TypeParameters): Call initialize_type_params() unless
12815         we're already initialized.
12816
12817 2004-02-23  Martin Baulig  <martin@ximian.com>
12818
12819         * class.cs (Method.Define): Create the generic method before
12820         calling DoDefine().
12821         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
12822         the TypeContainer one); we use this for generic methods.
12823
12824         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
12825         parent's TypeBuilder.
12826
12827 2004-02-18  Martin Baulig  <martin@ximian.com>
12828
12829         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
12830         to check for equality.
12831
12832 2004-02-05  Martin Baulig  <martin@ximian.com>
12833
12834         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
12835         `ec.TypeContainer.CurrentType', use it instead of
12836         `ec.ContainerType' to check whether we're in the type's ctor.
12837
12838 2004-01-29  Martin Baulig  <martin@ximian.com>
12839
12840         * expression.cs (Invocation.DoResolve): If we're a
12841         `ConstructedType', then we're actually a generic method, so
12842         rewrite the expr as a GenericMemberAccess.
12843
12844         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
12845         here; manually parse it into a string.
12846
12847 2004-01-28  Martin Baulig  <martin@ximian.com>
12848
12849         * typemanager.cs (TypeManager.IsEqual): New static method.
12850         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
12851         check for equality instead of using `=='.
12852
12853 2004-01-26  Martin Baulig  <martin@ximian.com>
12854
12855         * decl.cs (DeclSpace.CurrentType): New public field.
12856
12857         * expression.cs (This.ResolveBase): If we have an
12858         `ec.TypeContainer.CurrentType', use it instead of
12859         `ec.ContainerType'.
12860
12861         * class.cs (TypeContainer.DefineType): If we're a generic type,
12862         create the `CurrentType' (unresolved).
12863         (TypeContainer.GenericType): New private field.
12864         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
12865         it and store it in `GenericType' before creating the MemberCache.
12866         (TypeContainer.GetMembers): If we have a `GenericType', call
12867         TypeManager.FindMembers() on it.
12868
12869         * interface.cs (Interface.GenericType): New private field.
12870         (Interface.DefineType): If we're a generic type, create the
12871         `CurrentType' (unresolved).
12872         (Interface.DefineMembers): If we have a `CurrentType', resolve it
12873         and store it in `GenericType' before creating the MemberCache.
12874         (Interface.GetMembers): If we have a `GenericType', call
12875         TypeManager.FindMembers() on it.
12876
12877 2004-01-22  Martin Baulig  <martin@ximian.com>
12878
12879         * cs-parser.jay (namespace_or_type_name): Return an Expression,
12880         not a QualifiedIdentifier.  This is what `type_name_expression'
12881         was previously doing.
12882         (type_name_expression): Removed; the code is now in
12883         `namespace_or_type_name'.
12884         (qualified_identifier): Removed, use `namespace_or_type_name'
12885         instead.
12886         (QualifiedIdentifier): Removed this class.      
12887
12888 2004-01-22  Martin Baulig  <martin@ximian.com>
12889
12890         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
12891         not a string as alias name.
12892
12893 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
12894
12895         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
12896         #52730 bug, and instead compute correctly the need to use a
12897         temporary variable when requesting an address based on the
12898         static/instace modified of the field and the constructor.
12899  
12900 2004-01-21  Martin Baulig  <martin@ximian.com>
12901
12902         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
12903         class and namespace before looking up aliases.  Fixes #52517.
12904
12905 2004-01-21  Martin Baulig  <martin@ximian.com>
12906
12907         * flowanalysis.cs (UsageVector.Merge): Allow variables being
12908         assinged in a 'try'; fixes exception4.cs.
12909
12910 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12911         * class.cs : Implemented parameter-less constructor for TypeContainer
12912
12913         * decl.cs: Attributes are now stored here. New property OptAttributes
12914
12915         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
12916
12917         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
12918
12919 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12920
12921         * typemanager.cs (CSharpSignature): Now reports also inner class name.
12922           (CSharpSignature): New method for indexer and property signature.
12923
12924 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12925
12926         * pending.cs (IsVirtualFilter): Faster implementation.
12927
12928 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12929
12930         * typemanager.cs: Avoid inclusion of same assembly more than once.
12931
12932 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12933
12934         * cs-parser.jay: Fixed problem where the last assembly attribute
12935           has been applied also to following declaration (class, struct, etc.)
12936           
12937 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12938
12939         * class.cs: Added error CS0538, CS0539 reporting.
12940         Fixed crash on Microsoft runtime when field type is void.
12941
12942         * cs-parser.jay: Added error CS0537 reporting.
12943
12944         * pending.cs: Added error CS0535 reporting.
12945         Improved error report for errors CS0536, CS0534.
12946
12947 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
12948
12949         Merge a few bits from the Anonymous Method MCS tree.
12950
12951         * statement.cs (ToplevelBlock): New class for toplevel methods,
12952         will hold anonymous methods, lifted variables.
12953
12954         * cs-parser.jay: Create toplevel blocks for delegates and for
12955         regular blocks of code. 
12956
12957 2004-01-20  Martin Baulig  <martin@ximian.com>
12958
12959         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
12960         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
12961         and `NeedExplicitReturn'; added `IsLastStatement'.
12962         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
12963         have a `ReturnLabel' or we're not unreachable.
12964
12965         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
12966         child's reachability; don't just override ours with it.  Fixes
12967         #58058 (lluis's example).
12968         (FlowBranching): Added public InTryOrCatch(), InCatch(),
12969         InFinally(), InLoop(), InSwitch() and
12970         BreakCrossesTryCatchBoundary() methods.
12971
12972         * statement.cs (Return): Do all error checking in Resolve().
12973         Unless we are the last statement in a top-level block, always
12974         create a return label and jump to it.
12975         (Break, Continue): Do all error checking in Resolve(); also make
12976         sure we aren't leaving a `finally'.
12977         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
12978         statement in a top-level block.
12979         (Block.Flags): Added `IsDestructor'.
12980         (Block.IsDestructor): New public property.
12981
12982 2004-01-20  Martin Baulig  <martin@ximian.com>
12983
12984         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
12985
12986 2004-01-20  Martin Baulig  <martin@ximian.com>
12987
12988         * statement.cs (Statement.ResolveUnreachable): New public method.
12989         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
12990         (Block.Resolve): Resolve unreachable statements.
12991
12992 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
12993
12994         * expression.cs: We need to fix the case where we do
12995         not have a temp variable here.
12996
12997         * assign.cs: Only expression compound assignments need
12998         temporary variables.
12999
13000 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13001
13002         * flowanalysis.cs: Reduce memory allocation in a few ways:
13003           - A block with no variables should not allocate a bit
13004             vector for itself.
13005           - A method with no out parameters does not need any tracking
13006             for assignment of the parameters, so we need not allocate
13007             any data for it.
13008           - The arrays:
13009                 public readonly Type[] VariableTypes;
13010                 public readonly string[] VariableNames;
13011             Are redundant. The data is already stored in the variable
13012             map, so we need not allocate another array for it.
13013           - We need to add alot of checks for if (params | locals) == null
13014             due to the first two changes.
13015
13016 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
13017
13018         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
13019         implement IMemoryLocation, we store a copy on a local variable and
13020         take the address of it.  Patch from Benjamin Jemlich
13021
13022         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
13023         to use a special "type_name_expression" rule which reduces the
13024         number of "QualifiedIdentifier" classes created, and instead
13025         directly creates MemberAccess expressions.
13026
13027 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
13028
13029         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
13030         that fixes #52853.  Null literal assignment to ValueType
13031
13032         * class.cs (MethodData.Emit): Instead of checking the name of the
13033         method to determine if its a destructor, create a new derived
13034         class from Method called Destructor, and test for that.  
13035
13036         * cs-parser.jay: Create a Destructor object instead of a Method.  
13037
13038         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
13039
13040         Fixes: 52933
13041
13042 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
13043
13044         * expression.cs (Binary.ResolveOperator): Perform an implicit
13045         conversion from MethodGroups to their delegate types on the
13046         Addition operation.
13047
13048         * delegate.cs: Introduce a new class DelegateCreation that is the
13049         base class for `NewDelegate' and `ImplicitDelegateCreation',
13050         factor some code in here.
13051
13052         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
13053         conversion from MethodGroups to compatible delegate types. 
13054
13055         * ecore.cs (Expression.Resolve): Do not flag error 654
13056         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
13057         we allow conversions from MethodGroups to delegate types now.
13058
13059         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
13060         assignments in v2 either.
13061
13062 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
13063
13064         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
13065         static read-only fields in ctors.
13066
13067         Applied patch from Benjamin Jemlich 
13068
13069         * expression.cs (UnaryMutator): Avoid leaking local variables. 
13070
13071 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
13072
13073         * cs-tokenizer.cs (IsCastToken): Allow the various native types
13074         here to return true, as they can be used like this:
13075
13076                 (XXX) int.MEMBER ()
13077
13078         Fixed 49836 and all the other dups
13079
13080 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
13081
13082         * driver.cs: Implement /win32res and /win32icon.
13083
13084 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
13085
13086         * cs-parser.jay: Add a rule to improve error handling for the
13087         common mistake of placing modifiers after the type.
13088
13089 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
13090
13091         * cs-parser.jay (interface_event_declaration): Catch
13092         initialization of events on interfaces, and report cs0068
13093
13094         * cs-parser.jay (interface_event_declaration): Catch
13095         initialization of events. 
13096
13097         * ecore.cs: Better report missing constructors.
13098
13099         * expression.cs (Binary.ResolveOperator): My previous bug fix had
13100         the error reporting done in the wrong place.  Fix.
13101
13102         * expression.cs (Binary.ResolveOperator): Catch the 
13103         operator + (E x, E y) error earlier, and later allow for implicit
13104         conversions in operator +/- (E e, U x) from U to the underlying
13105         type of E.
13106
13107         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
13108         52596, if the container class is abstract, the default constructor
13109         is protected otherwise its public (before, we were always public).
13110
13111         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
13112         fixed statement.
13113
13114         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
13115         Jemlich that fixes bug #52597, MCS was generating invalid code for
13116         idisposable structs.   Thanks to Ben for following up with this
13117         bug as well.
13118
13119 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
13120
13121         * driver.cs: Allow assemblies without code to be generated, fixes
13122         52230.
13123
13124 2004-01-07  Nick Drochak <ndrochak@gol.com>
13125
13126         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
13127
13128 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
13129
13130         * cs-parser.jay: Add rules to improve error reporting if fields or
13131         methods are declared at the namespace level (error 116)
13132
13133         * Add rules to catch event add/remove
13134
13135 2004-01-04  David Sheldon <dave-mono@earth.li>
13136
13137   * expression.cs: Added matching ")" to error message for 
13138   CS0077
13139
13140 2004-01-03 Todd Berman <tberman@gentoo.org>
13141
13142         * ecore.cs, attribute.cs:
13143         Applying fix from #52429.
13144
13145 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13146
13147         * ecore.cs, expression.cs, statement.cs:
13148         Total rewrite of how we handle branching. We
13149         now handle complex boolean expressions with fewer
13150         jumps. As well if (x == 0) no longer emits a ceq.
13151
13152         if (x is Foo) is much faster now, because we generate
13153         better code.
13154
13155         Overall, we get a pretty big improvement on our benchmark
13156         tests. The code we generate is smaller and more readable.
13157
13158         I did a full two-stage bootstrap. The patch was reviewed
13159         by Martin and Miguel.
13160
13161 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13162
13163         * cs-parser.jay: Make primary_expression not take a QI.
13164         we dont need this because the member_access rule covers
13165         us here. So we replace the rule with just IDENTIFIER.
13166
13167         This has two good effects. First, we remove a s/r conflict.
13168         Second, we allocate many fewer QualifiedIdentifier objects.
13169
13170 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13171
13172         * attribute.cs: Handle MarshalAs attributes as pseudo, and
13173         set the correct information via SRE. This prevents
13174         hanging on the MS runtime. Fixes #29374.
13175
13176 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13177
13178         * convert.cs: correctly handle conversions to value types
13179         from Enum and ValueType as unboxing conversions.
13180
13181         Fixes bug #52569. Patch by Benjamin Jemlich.
13182
13183 2004-01-02  Ravi Pratap  <ravi@ximian.com>
13184
13185         * expression.cs (BetterConversion): Prefer int -> uint
13186         over int -> ulong (csc's behaviour). This fixed bug #52046.
13187
13188 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13189
13190         * decl.cs (MemberCache.FindMembers): now returns a
13191         MemberInfo [].
13192
13193         * typemanager.cs: In general, go with with ^^.
13194         (CopyNewMethods): take an IList.
13195         (RealMemberLookup): Only allocate an arraylist
13196         if we copy from two sets of methods.
13197
13198         This change basically does two things:
13199         1) Fewer array lists allocated due to CopyNewMethods.
13200         2) the explicit cast in MemberList costed ALOT.
13201
13202 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
13203
13204         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
13205         a hashtable to avoid needless string allocations when an identifier is
13206         used more than once (the common case).
13207
13208 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13209
13210         * pending.cs: MS's TypeBuilder.GetInterfaces ()
13211         is broken, it will not return anything. So, we
13212         have to use the information we have in mcs to
13213         do the task.
13214
13215         * typemanager.cs: Add a cache for GetInterfaces,
13216         since this will now be used more often (due to ^^)
13217
13218         (GetExplicitInterfaces) New method that gets the
13219         declared, not effective, interfaces on a type
13220         builder (eg, if you have interface IFoo, interface
13221         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
13222         { IBar }.
13223
13224         This patch makes MCS able to bootstrap itself on
13225         Windows again.
13226
13227 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13228
13229         * expression.cs: Remove the Nop's that Miguel put
13230         in by mistake.
13231
13232 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13233
13234         * report.cs, codegen.cs: Give the real stack trace to
13235         the error when an exception is thrown.
13236
13237 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13238
13239         * decl.cs: only allocate hashtables for ifaces if 
13240         it is an iface!
13241
13242 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13243
13244         * expression.cs: fix the error from cs0121-2.cs
13245         (a parent interface has two child interfaces that
13246         have a function with the same name and 0 params
13247         and the function is called through the parent).
13248
13249 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13250
13251         * class.cs, rootcontext.cs, typmanager.cs: do not
13252         leak pointers.
13253
13254 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13255
13256         * codegen.cs: remove stack for the ec flow branching.
13257         It is already a linked list, so no need.
13258
13259 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
13260
13261         * Makefile: Allow custom profiler here.
13262
13263 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13264
13265         * typemanager.cs (LookupType):
13266           - Use a static char [], because split takes
13267             a param array for args, so it was allocating
13268             every time.
13269           - Do not store true in a hashtable, it boxes.
13270
13271 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13272
13273         * flowanalysis.cs: bytify common enums.
13274
13275 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13276
13277         * modifiers.cs: Add a new set of flags for the
13278         flags allowed on explicit interface impls.
13279         * cs-parser.jay: catch the use of modifiers in
13280         interfaces correctly.
13281         * class.cs: catch private void IFoo.Blah ().
13282
13283         All related to bug #50572.
13284
13285 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13286
13287         * decl.cs: Rewrite the consistant accessability checking.
13288         Accessability is not linear, it must be implemented in
13289         a tableish way. Fixes #49704.
13290
13291 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13292
13293         * expression.cs: Handle negation in a checked context.
13294         We must use subtraction from zero. Fixes #38674.
13295
13296 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13297
13298         * class.cs: Ignore static void main in DLLs.
13299         * rootcontext.cs: Handle the target type here,
13300         since we are have to access it from class.cs
13301         * driver.cs: account for the above.
13302
13303 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13304
13305         * report.cs: Give line numbers and files if available.
13306
13307 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
13308
13309         * driver.cs: Implement /addmodule.
13310
13311         * typemanager.cs:  Change 'modules' field so it now contains Modules not
13312         ModuleBuilders.
13313
13314 2003-12-20  Martin Baulig  <martin@ximian.com>
13315
13316         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
13317         (FieldBase.IsAssigned): Removed this field.
13318         (FieldBase.SetAssigned): New public method.
13319         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
13320
13321 2003-12-20  Martin Baulig  <martin@ximian.com>
13322
13323         * expression.cs (LocalVariableReference.DoResolve): Don't set
13324         `vi.Used' if we're called from DoResolveLValue().
13325
13326         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
13327         returns the usage vector it just merged into the current one -
13328         pass this one to UsageWarning().
13329         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
13330         of the `EmitContext', don't call this recursively on our children.
13331
13332 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
13333
13334         * driver.cs: Implement /target:module.
13335
13336 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
13337
13338         * support.cs (CharArrayHashtable): New helper class.
13339
13340         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
13341         char arrays, not strings, so we can avoid creating a string in
13342         consume_identifier if the identifier is a keyword.
13343
13344 2003-12-16  Martin Baulig  <martin@ximian.com>
13345
13346         * statement.cs (LocalInfo.Assigned): Removed this property.
13347         (LocalInfo.Flags): Removed `Assigned'.
13348         (LocalInfo.IsAssigned): New public method; takes the EmitContext
13349         and uses flow analysis.
13350         (Block.UsageWarning): Made this method private.
13351         (Block.Resolve): Call UsageWarning() if appropriate.
13352
13353         * expression.cs (LocalVariableReference.DoResolve): Always set
13354         LocalInfo.Used here.
13355
13356 2003-12-13  Martin Baulig  <martin@ximian.com>
13357
13358         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
13359         any value here; we're now using flow analysis to figure out
13360         whether a statement/block returns a value.
13361
13362 2003-12-13  Martin Baulig  <martin@ximian.com>
13363
13364         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
13365         working again.
13366         (FlowBranching.MergeFinally): Don't call
13367         `branching.CheckOutParameters()' here, this is called in
13368         MergeTopBlock().
13369         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
13370         when adding the `finally' vector.       
13371
13372 2003-12-13  Martin Baulig  <martin@ximian.com>
13373
13374         * flowanalysis.cs
13375         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
13376         actually work and also fix #48962.
13377
13378 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13379
13380         * decl.cs: Do not check System.Object for nested types,
13381         since we know it does not have any. Big bang for buck:
13382
13383         BEFORE:
13384            Run 1:   8.35 seconds
13385            Run 2:   8.32 seconds
13386            corlib:  17.99 seconds
13387         AFTER:
13388            Run 1:   8.17 seconds
13389            Run 2:   8.17 seconds
13390            corlib:  17.39 seconds
13391
13392 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
13393
13394         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
13395         time we are returning 0 members, so we save alot here.
13396
13397 2003-12-11  Martin Baulig  <martin@ximian.com>
13398
13399         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
13400         `MergeChild()', also just take the `FlowBranching' as argument;
13401         call Merge() on it and return the result.
13402         (FlowBranching.Merge): We don't need to do anything if we just
13403         have one sibling.
13404
13405 2003-12-11  Martin Baulig  <martin@ximian.com>
13406
13407         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
13408         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
13409         Maurer for this idea.
13410
13411 2003-12-11  Martin Baulig  <martin@ximian.com>
13412
13413         * flowanalysis.cs (MergeResult): This class is now gone; we now
13414         use the `UsageVector' for this.  The reason for this is that if a
13415         branching just has one sibling, we don't need to "merge" them at
13416         all - that's the next step to do.
13417         (FlowBranching.Merge): We now return a `UsageVector' instead of a
13418         `MergeResult'.
13419
13420 2003-12-11  Martin Baulig  <martin@ximian.com>
13421
13422         Reworked flow analyis and made it more precise and bug-free.  The
13423         most important change is that we're now using a special `Reachability'
13424         class instead of having "magic" meanings of `FlowReturns'.  I'll
13425         do some more cleanups and optimizations and also add some more
13426         documentation this week.
13427
13428         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
13429         largely reworked this class.
13430         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
13431         the new `Reachability' class instead of having "magic" values here.
13432         (FlowBranching): We're now using an instance of `Reachability'
13433         instead of having separate `Returns', `Breaks' etc. fields.
13434
13435         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
13436         based on flow analysis; ignore the return value of block.Emit ().
13437
13438 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
13439
13440         * driver.cs typemanager.cs: Find the mono extensions to corlib even
13441         if they are private.
13442
13443 2003-12-09  Martin Baulig  <martin@ximian.com>
13444
13445         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
13446         call them directly on the UsageVector.
13447
13448 2003-12-09  Martin Baulig  <martin@ximian.com>
13449
13450         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
13451         Changed return type from `FlowReturns' to `Reachability'.
13452
13453 2003-12-09  Martin Baulig  <martin@ximian.com>
13454
13455         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
13456         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
13457         `Reachable' fields with a single `Reachability' one.
13458
13459 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13460
13461         * class.cs (FindMembers): Remove foreach's.
13462
13463         Bootstrap times:
13464
13465         BEFORE
13466                 Run 1:   8.74 seconds
13467                 Run 2:   8.71 seconds
13468
13469         AFTER
13470                 Run 1:   8.64 seconds
13471                 Run 2:   8.58 seconds
13472
13473
13474 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13475
13476         * cs-parser.jay:
13477         * gen-treedump.cs:
13478         * statement.cs:
13479         This patch does a few things:
13480                 1. EmptyStatement is now a singleton, so it is never reallocated.
13481                 2. All blah is EmptyStatement constructs have been changed to
13482                    blah == EmptyStatement.Value, which is much faster and valid
13483                    now that EmptyStatement is a singleton.
13484                 3. When resolving a block, rather than allocating a new array for
13485                    the non-empty statements, empty statements are replaced with
13486                    EmptyStatement.Value
13487                 4. Some recursive functions have been made non-recursive.
13488         Mainly the performance impact is from (3), however (1) and (2) are needed for
13489         this to work. (4) does not make a big difference in normal situations, however
13490         it makes the profile look saner.
13491
13492         Bootstrap times:
13493
13494         BEFORE
13495         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13496         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13497         Total memory allocated: 56397 KB
13498
13499         AFTER
13500         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13501         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13502         Total memory allocated: 55666 KB
13503
13504 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13505
13506         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13507         than the hashtable in a hashtable version
13508
13509         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13510         we always end up concating a string. This results in a huge perf
13511         loss, because many strings have to be tracked by the GC. In this
13512         patch, we first use a hashtable that works with two keys, so that
13513         the strings do not need to be concat'ed.
13514
13515         Bootstrap times:
13516         BEFORE
13517                 Run 1:   8.74 seconds
13518                 Run 2:   8.71 seconds
13519
13520         AFTER
13521                 Run 1:   8.65 seconds
13522                 Run 2:   8.56 seconds
13523
13524 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13525
13526         * Makefile: Add a new target `do-time' that does a quick and simple
13527         profile, leaving easy to parse output.
13528
13529 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13530
13531         * codegen.cs (Init): Create the dynamic assembly with 
13532         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13533
13534 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13535
13536         * support.cs: Make the PtrHashtable use only one
13537         instance of its comparer.
13538
13539 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13540
13541         * typemanager.cs: Fix lookup of GetNamespaces.
13542
13543 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13544
13545         * expression.cs: Removed redundant line.
13546
13547         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13548         ArrayLists, use for loops with bounds.  
13549
13550         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13551         arraylist.
13552
13553         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13554         arraylists, use for loop with bounds.
13555
13556         The above three changes give us a 0.071 second performance
13557         improvement out of 3.294 seconds down to 3.223.  On my machine
13558         the above changes reduced the memory usage by 1,387 KB during
13559         compiler bootstrap.
13560
13561         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13562         QualifiedIdentifiers.  Before we created a new string through
13563         concatenation, and mostly later on, the result would be
13564         manipulated by DecomposeQI through string manipulation.
13565
13566         This reduced the compiler memory usage for bootstrapping from
13567         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13568         compile times in 0.05 seconds.
13569
13570 2003-11-28  Dick Porter  <dick@ximian.com>
13571
13572         * support.cs: Do string compares with the Invariant culture.
13573
13574         * rootcontext.cs: 
13575         * gen-treedump.cs: 
13576         * expression.cs: 
13577         * driver.cs: 
13578         * decl.cs: 
13579         * codegen.cs: 
13580         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13581         the comparison is done with the Invariant culture.
13582
13583 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13584
13585         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13586         GetEnumerator method.
13587
13588         (ProbeCollectionType): Iterate starting at the most specific type
13589         upwards looking for a GetEnumerator
13590
13591         * expression.cs: Shift count can be up to 31 for int/uint and 63
13592         for long/ulong.
13593
13594 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
13595
13596         * statement.cs (Block.LookupLabel): Also look for the label on the
13597         children blocks.  Use a hash table to keep track of visited
13598         nodes. 
13599
13600         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
13601         we actually did transform the other operand, otherwise fall back
13602         to the common codepath that casts to long.
13603
13604         * cs-tokenizer.cs: Use the same code pattern as the int case.
13605         Maybe I should do the parsing myself, and avoid depending on the
13606         Parse routines to get this done.
13607
13608 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
13609
13610         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13611         which fixes bug 51347.  This time test it.
13612
13613         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
13614         attributes for example can not tell the difference between these.
13615         The difference was only a syntax feature of the language. 
13616
13617         * attribute.cs: Apply attributes to delegates.
13618
13619         * delegate.cs: Call the apply attributes method.
13620
13621 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
13622
13623         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
13624         comparing 0 vs Byte.MinValue, not the value
13625
13626         (ImplicitConversionRequired): When reporting a conversion error,
13627         use error 31 to print out the constant error instead of the
13628         simpler 29.
13629
13630         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13631         which fixes bug 51347.
13632
13633 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
13634
13635         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
13636         which fixes the -warnaserror command line option.
13637
13638 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
13639
13640         * cfold.cs (DoNumericPromotions): During constant folding of
13641         additions on UIntConstant, special case intconstants with
13642         IntConstants like we do on the expression binary operator. 
13643
13644 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
13645
13646         * convert.cs (ImplicitReferenceConversion): We were missing a case
13647         (System.Enum are not value types or class types, so we need to
13648         classify them separatedly).
13649
13650         * driver.cs: We do not support error 2007.
13651
13652 2003-11-12 Jackson Harper <jackson@ximian.com>
13653
13654         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
13655         system directory. Also use the full file name so users can
13656         libraries names mscorlib-o-tron.dll in a non system dir.
13657         
13658 2004-01-04  David Sheldon <dave-mono@earth.li>
13659
13660         * expression.cs: Added matching ")" to error message for CS0077.
13661
13662 2003-12-19  Martin Baulig  <martin@ximian.com>
13663
13664         * typemanager.cs (TypeManager.IsEqualGenericType): New public
13665         static method; see documentation in the method.
13666         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
13667
13668         * convert.cs (Convert.ImplicitReferenceConversion,
13669         Convert.ImplicitReferenceConversionExists): Add support for
13670         generic type declarations; see gen-36.cs.
13671
13672 2003-12-19  Martin Baulig  <martin@ximian.com>
13673
13674         * pending.cs (Pending.InterfaceMethod): Use
13675         `Type.IsAssignableFrom()' instead of `=='.
13676
13677 2003-12-18  Martin Baulig  <martin@ximian.com>
13678
13679         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
13680         byref types first.
13681
13682         * convert.cs (Convert.ImplicitStandardConversionExists): Use
13683         `expr_type.Equals (target_type)' instead of `=='.
13684
13685 2003-12-08  Martin Baulig  <martin@ximian.com>
13686
13687         * generics.cs (Constraints.Types): Removed.
13688         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
13689         to Type's.
13690         (Constraints.ResolveTypes): New public method; resolves the
13691         TypeExpr's to Type's.
13692         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
13693         longer takes the constraints.
13694         (TypeParameter.DefineMethod): Likewise.
13695         (TypeParameter.DefineType): New public method.  Calls
13696         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
13697         the constraints.
13698
13699 2003-12-08  Martin Baulig  <martin@ximian.com>
13700
13701         * convert.cs (Convert.ImplicitConversionStandard): Use
13702         `expr_type.Equals (target_type)' instead of `=='.
13703
13704 2003-12-08  Martin Baulig  <martin@ximian.com>
13705
13706         * typemanager.cs (TypeManager.GetReferenceType): Call
13707         `Type.MakeByRefType ()'.
13708
13709 2003-12-08  Martin Baulig  <martin@ximian.com>
13710
13711         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
13712         just has some special meaning in some situations.  For instance,
13713         it is allowed to use `where' as the name of a variable etc.
13714
13715 2003-12-04  Martin Baulig  <martin@ximian.com>
13716
13717         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13718         `Type.MakeArrayType()' for array types.
13719
13720 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
13721
13722         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
13723         debugging message.
13724
13725         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
13726         corlib to compile.
13727
13728 2003-11-16  Martin Baulig  <martin@ximian.com>
13729
13730         * codegen.cs (EmitContext.IsGeneric): Removed.
13731
13732         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
13733         ResolveGeneric() on the DeclSpace.
13734
13735 2003-11-16  Martin Baulig  <martin@ximian.com>
13736
13737         * generic.cs (TypeArguments.Resolve):
13738         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
13739         `ResolveType()' on it to get the Type.
13740
13741 2003-11-15  Martin Baulig  <martin@ximian.com>
13742
13743         * generic.cs (ConstructedType.GetInterfaces): Override this.
13744
13745 2003-11-14  Martin Baulig  <martin@ximian.com>
13746
13747         * interface.cs (Interface.DefineType): Define all type parameters
13748         before adding the interfaces we inherit.
13749
13750 2003-11-11  Martin Baulig  <martin@ximian.com>
13751
13752         * generic.cs (ConstructedType.ResolveType): Always call
13753         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
13754
13755 2003-11-10  Martin Baulig  <martin@ximian.com>
13756
13757         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
13758         (TypeManager.InitCoreTypes): Initialize them here, but instead of
13759         calling `ResolveType()' on them, directly assign their `Type'.
13760
13761 2003-11-08  Martin Baulig  <martin@ximian.com>
13762
13763         * generic.cs (ConstructedType): Override `IsClass' etc.
13764
13765 2003-11-08  Martin Baulig  <martin@ximian.com>
13766
13767         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
13768         return value and the `out parent' parameter.
13769         (TypeContainer.DefineType): Moved the CS0644 check into
13770         GetClassBases().  Don't pass the interface types to the
13771         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
13772         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
13773
13774         * ecore.cs (TypeExpr.IsAttribute): New property.
13775         (TypeExpr.GetInterfaces): New method.
13776
13777         * interface.cs (Interface.GetInterfaceTypeByName): Return a
13778         TypeExpr instead of a Type.
13779         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
13780         (Interface.DefineType): Don't pass the interface types to the
13781         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
13782         them later and then call `TypeBulider.AddInterfaceImplementation()'.
13783
13784         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
13785         instead of a `Type[]'.
13786         (TypeManager.RegisterBuilder): Likewise.
13787         (TypeManager.AddUserInterface): Likewise.
13788         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
13789         `Type[]' and also return a `TypeExpr[]'.
13790         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
13791
13792 2003-11-08  Martin Baulig  <martin@ximian.com>
13793
13794         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
13795         Expression.     
13796
13797 2003-11-08  Martin Baulig  <martin@ximian.com>
13798
13799         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
13800         TypeManager.ResolveExpressionTypes().
13801
13802         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
13803         instead of an Expression.
13804         (TypeExpr): This is now an abstract base class for `TypeExpression'.
13805         (TypeExpression): New public class; formerly known as `TypeExpr'.
13806
13807         * expression.cs (ComposedCast): Derive from TypeExpr.
13808
13809         * typemanager.cs (TypeManager.system_*_expr): These are now
13810         TypExpr's instead of Expression's.
13811         (TypeManager.ResolveExpressionTypes): New public static function;
13812         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
13813         of them.        
13814
13815 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
13816
13817         * expression.cs (New.DoResolve): Do not dereference value that
13818         might be a null return.
13819
13820         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
13821         sure that the constant value has the right type.  Fixes an
13822         unreported bug, similar to 50425.
13823
13824         * const.cs (Const.LookupConstantValue): Call
13825         ImplicitStandardConversionExists before doing a conversion to
13826         avoid havng the TypeManager.ChangeType do conversions.
13827
13828         Reduced the number of casts used
13829
13830         (Const.ChangeType): New routine to enable reuse of the constant
13831         type changing code from statement.
13832
13833         * typemanager.cs (ChangeType): Move common initialization to
13834         static global variables.
13835
13836         Fixes #50425.
13837
13838         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
13839         every value type to go through, even if it was void.  Fix that. 
13840
13841         * cs-tokenizer.cs: Use is_identifier_start_character on the start
13842         character of the define, and the is_identifier_part_character for
13843         the rest of the string.
13844
13845 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
13846
13847         * expression.cs (UnaryMutator.EmitCode): When I updated
13848         LocalVariableReference.DoResolve, I overdid it, and dropped an
13849         optimization done on local variable references.
13850
13851 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
13852
13853         * ecore.cs: Convert the return from Ldlen into an int.
13854
13855 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
13856
13857         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
13858         the accessibility, this is a special case for toplevel non-public
13859         classes (internal for instance).
13860
13861 2003-10-20  Nick Drochak <ndrochak@gol.com>
13862
13863         * ecore.cs: Fix typo and build.  Needed another right paren.
13864
13865 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
13866
13867         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
13868         `internal' case regular and protected, but not allowing protected
13869         to be evaluated later.  Bug 49840
13870
13871 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
13872
13873         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
13874         to kb.Nlast, and not the kb.nFirst to isolate the switch
13875         statement.
13876
13877         Extract the underlying type, so enumerations of long/ulong are
13878         treated like long/ulong.
13879
13880 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
13881
13882         * expression.cs (New): Overload the meaning of RequestedType to
13883         track the possible creation of the NewDelegate type, since
13884         DoResolve is invoked more than once for new constructors on field
13885         initialization.
13886
13887         See bugs: #48800 and #37014
13888
13889         * cs-parser.jay (declare_local_constants): Take an arraylist
13890         instead of a single constant.
13891
13892         (local_constant_declaration): It should take a
13893         constant_declarators, not a constant_declarator.  Fixes 49487
13894
13895         * convert.cs: Fix error report.
13896
13897 2003-10-13 Jackson Harper <jackson@ximian.com>
13898
13899         * typemanager.cs (TypeToCoreType): Add float and double this fixes
13900         bug #49611
13901         
13902 2003-11-03  Martin Baulig  <martin@ximian.com>
13903
13904         * expression.cs (ArrayAccess.GetStoreOpcode): Added
13905         `out bool has_type_arg'; if set, we need to pass the type to
13906         ig.Emit().
13907         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
13908         Stelem_Any/Ldelem_Any for generic parameters.   
13909
13910 2003-11-02  Martin Baulig  <martin@ximian.com>
13911
13912         * expression.cs (Invocation.EmitCall): Use
13913         `TypeManager.IsValueType()' to check whether it's a value type.
13914         Don't set `struct_call' when calling a method on a type parameter.
13915
13916 2003-11-02  Martin Baulig  <martin@ximian.com>
13917
13918         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
13919         and removed the TypeBuilder argument.
13920
13921         * typemanager.cs (TypeManager.IsValueType): Return
13922         `t.IsGenericParameter || t.IsValueType'.
13923
13924 2003-10-25  Martin Baulig  <martin@ximian.com>
13925
13926         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
13927         call ConstructedType.Resolve() on it.
13928
13929         * generic.cs (ConstructedType.Resolve): Set `type' on success.
13930
13931 2003-10-25  Martin Baulig  <martin@ximian.com>
13932
13933         * class.cs (TypeContainer.GetClassBases): Changed
13934         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
13935         CS8214 reporting here.
13936         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
13937         instead of a `Type' for our parent.  In case of a recursive
13938         declaration (see tests/gen-23.cs for an example), our parent is a
13939         ConstructedType and it doesn't have its type set.  So, first
13940         create our own TypeBuilder, then call constructed.Resolve() to get
13941         the parent's type and finally TypeBuilder.SetParent() it.
13942
13943         * ecore.cs (TypeExpr.Name): New public virtual property.
13944
13945         * generic.cs
13946         (ConstructedType): We're now a TypeExpr and not just an Expression.
13947         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
13948         arguments here; this is done later.
13949         (ConstructedType.Resolve): New public method to resolve the type
13950         arguments and bind them.
13951
13952 2003-10-21  Martin Baulig  <martin@ximian.com>
13953
13954         * convert.cs: Use `TypeManager.IsValueType' instead of
13955         'type.IsValueType' everywhere.
13956
13957         * typemanager.cs (TypeManager.IsValueType): Return true for type
13958         parameters.  The reason for this is that we need to box a type
13959         parameter when converting it to a reference type.
13960
13961         * cs-parser.jay: Added support for default value expressions.
13962
13963         * generics.cs (DefaultValueExpression): New public class.       
13964
13965 2003-10-17  Martin Baulig  <martin@ximian.com>
13966
13967         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
13968         TypeContainer so we can also use this for Interfaces.
13969         (TypeParameter.Resolve): Likewise.
13970
13971         * interface.cs (Interface.DefineType): Added support for generic
13972         interfaces.
13973
13974         * cs-parser.jay: Added support for generic structs and interfaces.
13975
13976 2003-10-17  Martin Baulig  <martin@ximian.com>
13977
13978         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
13979         call generic methods :-)
13980
13981 2003-10-16  Martin Baulig  <martin@ximian.com>
13982
13983         * cs-parser.jay (namespace_or_type_name): Only create a
13984         GenericMemberAccess if we actually have type arguments.
13985
13986 2003-10-13  Martin Baulig  <martin@ximian.com>
13987
13988         * class.cs (Method.Define): If we're a generic method, call
13989         TypeBuilder.DefineGenericMethod () before resolving
13990         the parameters.
13991         (MethodData): Added .ctor which takes an additional MethodBuilder
13992         argument; this is used for generic methods.
13993         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
13994         we already have a MethodBuilder.
13995
13996 2003-10-10  Martin Baulig  <martin@ximian.com>
13997
13998         * class.cs (Method): Added .ctor which takes a `GenericMethod'
13999         instead of a `DeclSpace'.  This is used for generic methods.
14000
14001         * cs-parser.jay (method_header): Added support for generic
14002         methods; create a `GenericMethod' instance and pass it to the
14003         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
14004         parameters and locals.
14005
14006         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
14007         since we already have the location.  Check whether we're a generic
14008         type declaration or a generic method and create the correct type
14009         parameter.
14010
14011         * generic.cs (TypeParameter.DefineMethod): New public method.
14012         (GenericMethod): New public class; derives from DeclSpace and is
14013         used for generic methods.       
14014
14015 2003-10-09  Martin Baulig  <martin@ximian.com>
14016
14017         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
14018         to the .ctor.
14019         (MethodCore.DoDefineParameters): Removed the TypeContainer
14020         argument; use the DeclSpace which was passed to the .ctor instead.
14021         (MethodCore.CheckParameter): Take a DeclSpace instead of a
14022         TypeContainer; we only need a DeclSpace here.
14023
14024 2003-10-09  Martin Baulig  <martin@ximian.com>
14025
14026         * class.cs (MethodData): Added additional `DeclSpace ds' argument
14027         to the .ctor.
14028         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
14029         EmitContext's .ctor.    
14030
14031 2003-10-09  Martin Baulig  <martin@ximian.com>
14032
14033         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
14034         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
14035         AsAccessible(), moved them as well.
14036
14037         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
14038
14039 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
14040
14041         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
14042         generation for >=, as spotted by Paolo, bug 48679.  
14043         Patch from David Waite.
14044
14045         * cs-tokenizer.cs: Add handling for #pragma.
14046
14047         * cs-parser.jay: Allow for both yield and yield return in the
14048         syntax.  The anti-cobolization of C# fight will go on!
14049
14050         * class.cs (TypeBuilder.DefineType): Catch error condition here
14051         (Parent.DefineType erroring out and returning null).
14052
14053         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
14054         coping with enumerations variables, we were mistakenly processing
14055         them as a regular value type instead of built-in types.  Fixes the
14056         bug #48063
14057
14058         * typemanager.cs (IsBuiltinOrEnum): New method.
14059
14060 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
14061
14062         * cs-parser.jay: Upgrade: yield now needs the return clause.
14063
14064 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
14065
14066         * cs-parser.jay : Renamed yyName to yyNames related to jay.
14067
14068 2003-09-29  Martin Baulig  <martin@ximian.com>
14069
14070         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
14071         inflated generic methods.
14072
14073         * generics.cs (ConstructedType): Distinguish between open and
14074         closed constructed types; correctly resolve the arguments.
14075
14076 2003-09-22  Martin Baulig  <martin@ximian.com>
14077
14078         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
14079         all type arguments meet their constraints.
14080
14081 2003-09-19  Martin Baulig  <martin@ximian.com>
14082
14083         * decl.cs (MemberCache.SetupCacheForInterface): Take a
14084         `MemberCache parent' argument.  Normally, an interface doesn't
14085         have a parent type except System.Object, but we use this in gmcs
14086         for generic type parameters.
14087
14088 2003-09-18  Martin Baulig  <martin@ximian.com>
14089
14090         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
14091         on `type.IsInterface'; don't check whether the type has a parent
14092         to determine whether it's an interface.
14093
14094 2003-09-17  Martin Baulig  <martin@ximian.com>
14095
14096         * generic.cs (ConstructedType.ToString): Always use `name' as the
14097         type name.
14098
14099 2003-09-15  Martin Baulig  <martin@ximian.com>
14100
14101         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
14102
14103         * generic.cs (Constraints.Resolve): New public method; this is
14104         called to resolve the constraint types and to check whether all
14105         the constraints are correct.
14106         (Constraints.Types): New public property.
14107         (TypeParameter.Resolve): New public method; resolves all the
14108         type's constraints.
14109
14110         * class.cs (TypeContainer.DefineType): Call
14111         TypeParameter.Resolve() before actually defining the type.
14112
14113 2003-09-15  Martin Baulig  <martin@ximian.com>
14114
14115         * class.cs (TypeContainer.DefineType): Added an error flag to
14116         avoid reporting duplicate CS0146's ("class definition is
14117         circular.").
14118
14119         * driver.cs (Driver.MainDriver): Abort if
14120         RootContext.ResolveTree() reported any errors.
14121
14122 2003-09-07  Martin Baulig  <martin@ximian.com>
14123
14124         * report.cs (Error, Warning): Added overloaded versions which take
14125         a `params object[] args' and call String.Format().
14126
14127 2003-09-07  Martin Baulig  <martin@ximian.com>
14128
14129         * decl.cs (DeclSpace..ctor): Don't call
14130         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
14131         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
14132         (DeclSpace.RecordDecl): New method.
14133
14134         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
14135
14136 2003-09-02  Ravi Pratap  <ravi@ximian.com>
14137
14138         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
14139         value attributes to be applied to ParameterBuilders.
14140
14141         * class.cs (MethodCore.LabelParameters): Make static and more
14142         generic so that it can be used from other places - like interface
14143         methods, for instance.
14144
14145         * interface.cs (Interface.Emit): Call LabelParameters before
14146         emitting attributes on the InterfaceMethod.
14147
14148 2003-09-07  Martin Baulig  <martin@ximian.com>
14149
14150         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
14151         if the number of type parameters doesn't match.
14152
14153 2003-09-04  Martin Baulig  <martin@ximian.com>
14154
14155         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
14156         for arrays of generic type params (ie. `!0[]').
14157
14158 2003-09-04  Martin Baulig  <martin@ximian.com>
14159
14160         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
14161         for the moment.
14162
14163 2003-09-04  Martin Baulig  <martin@ximian.com>
14164
14165         * decl.cs (DeclSpace.LookupGeneric): New method.
14166         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
14167         moment.
14168
14169         * generic.cs (TypeParameterExpr): Take a TypeParameter as
14170         argument, not just a string.
14171         (TypeParameter.Define): New public method; this is called to
14172         actually define the generic parameter; after this, you can use the
14173         new `Type' property to get the type.
14174
14175 2003-09-04  Martin Baulig  <martin@ximian.com>
14176
14177         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
14178         is now an ArrayList; initialize the result of the `TypeParameters'
14179         property here.
14180         (DeclSpace.GetGenericData): Removed.
14181         (DeclSpace.LookupGeneric): Temporarily removed; we need to
14182         implement this in a different way.
14183         (DeclSpace.GetTypeParameters): Removed; there's now a
14184         `TypeParameters' property.
14185         (DeclSpace.TypeParameters): New public property.
14186
14187         * generic.cs (Constraints): Make this class public.
14188         (TypeParameter): New public class.
14189
14190 2003-09-04  Martin Baulig  <martin@ximian.com>
14191
14192         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
14193         generic parameters.
14194
14195         * class.cs (TypeContainer.DefineType): Call
14196         TypeBuilder.DefineGenericParameter () on all generic parameters if
14197         this is a generic type.
14198
14199 2003-08-28  Martin Baulig  <martin@ximian.com>
14200
14201         * sample-stack.il: Compile this with ilasm: "ilasm /dll
14202         sample-stack.il".
14203
14204         * sample-hello.cs: Compile this with gmcs: "gmcs
14205         /r:sample-stack.dll sample-hello.cs".
14206
14207 2003-08-28  Martin Baulig  <martin@ximian.com>
14208
14209         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
14210         the parameters to the generic type.
14211
14212 2003-08-28  Martin Baulig  <martin@ximian.com>
14213
14214         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
14215
14216 2003-08-28  Martin Baulig  <martin@ximian.com>
14217
14218         * cs-parser.jay (opt_type_argument_list): Use
14219         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
14220         (primary_expression): Replace `qualified_identifier' with `type_name'.
14221         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
14222
14223         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
14224         parser to check whether it is syntactically a type parameter list;
14225         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
14226         this case.
14227
14228 2003-08-26  Martin Baulig  <martin@ximian.com>
14229
14230         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
14231         resolving aliases; fixes #47927.
14232
14233 2003-08-26  Martin Baulig  <martin@ximian.com>
14234
14235         * statement.cs (Using.DoResolve): This is internally emitting a
14236         try/finally clause, so we need to set ec.NeedExplicitReturn if we
14237         do not always return.  Fixes #47681.
14238
14239 2003-08-26  Martin Baulig  <martin@ximian.com>
14240
14241         * decl.cs (MemberCore): Moved WarningNotHiding(),
14242         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
14243         into MemberBase.
14244         (AdditionResult): Make this nested in DeclSpace.
14245         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
14246         argument; call NamespaceEntry.Define() unless we're nested in a
14247         class or struct.
14248
14249         * namespace.cs (Namespace.DefineName): New public function.  This
14250         is called from DeclSpace's .ctor to add 
14251         (Namespace.Lookup): Include DeclSpaces in the lookup.
14252
14253         * class.cs (Operator): Derive from MemberBase, not MemberCore.
14254
14255         * const.cs (Const): Derive from MemberBase, not MemberCore.     
14256
14257 2003-08-25  Martin Baulig  <martin@ximian.com>
14258
14259         * convert.cs (Convert.ExplicitReferenceConversion): When
14260         converting from an interface type to a class, unbox if the target
14261         type is a struct type.  Fixes #47822.
14262
14263 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14264
14265         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
14266         #47854.
14267
14268 2003-08-22  Martin Baulig  <martin@ximian.com>
14269
14270         * class.cs (TypeManager.DefineType): When defining a nested type,
14271         call DefineType() on our parent; fixes #47801.
14272
14273 2003-08-22  Martin Baulig  <martin@ximian.com>
14274
14275         * class.cs (MethodData.Define): While checking if a method is an
14276         interface implementation, improve the test a bit more to fix #47654.
14277
14278 2003-08-22  Martin Baulig  <martin@ximian.com>
14279
14280         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
14281         correctly; fixes #47722.
14282
14283 2003-08-22  Martin Baulig  <martin@ximian.com>
14284
14285         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
14286         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
14287
14288         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
14289
14290 2003-08-22  Martin Baulig  <martin@ximian.com>
14291
14292         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
14293         can only be assigned in static constructors.  Fixes #47161.
14294
14295 2003-08-22  Martin Baulig  <martin@ximian.com>
14296
14297         Rewrote and improved the flow analysis code.
14298
14299         * flowbranching.cs (FlowBranching): Make this class abstract.
14300         (FlowBranching.CreateBranching): New static function to create a
14301         new flow branching.
14302         (FlowBranchingBlock, FlowBranchingException): New classes.
14303         (FlowBranching.UsageVector.Type): New public readonly field.
14304         (FlowBranching.UsageVector.Breaks): Removed the setter.
14305         (FlowBranching.UsageVector.Returns): Removed the setter.
14306         (FlowBranching.UsageVector): Added Break(), Return(),
14307         NeverReachable() and Throw() methods to modify the reachability.
14308         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
14309         done by FlowBranching.Merge().
14310         (FlowBranching.UsageVector.MergeChild): New method; merges the
14311         merge result into the current vector.
14312         (FlowBranching.Merge): New abstract method to merge a branching.
14313
14314 2003-08-12  Martin Baulig  <martin@ximian.com>
14315
14316         * expression.cs (Indirection.CacheTemporaries): Create the
14317         LocalTemporary with the pointer type, not its element type.
14318
14319 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
14320
14321         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
14322         token was a keyword or not.
14323
14324         Add `error' options where an IDENTIFIER was expected;  Provide
14325         CheckToken and CheckIdentifierToken convenience error reporting
14326         functions. 
14327
14328         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
14329
14330         * decl.cs: Rename `NamespaceEntry Namespace' public field into
14331         NameSpaceEntry NameSpaceEntry.
14332
14333         (LookupInterfaceOrClass): Avoid creating a full qualified name
14334         from namespace and name: avoid doing lookups when we know the
14335         namespace is non-existant.   Use new Tree.LookupByNamespace which
14336         looks up DeclSpaces based on their namespace, name pair.
14337
14338         * driver.cs: Provide a new `parser verbose' to display the
14339         exception thrown during parsing.  This is turned off by default
14340         now, so the output of a failure from mcs is more graceful.
14341
14342         * namespace.cs: Track all the namespaces defined in a hashtable
14343         for quick lookup.
14344
14345         (IsNamespace): New method
14346
14347 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
14348
14349         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
14350         we know that we need to concatenate (full typename can never be
14351         null). 
14352
14353         * class.cs: ditto.
14354
14355         * statement.cs: Use a bitfield;  Do not initialize to null things
14356         which are done by the constructor by default.
14357
14358         * cs-parser.jay: bug fix, parameter was 4, not 3.
14359
14360         * expression.cs: Just use the property;
14361
14362         * statement.cs: No need for GetVariableInfo method.
14363
14364 2003-08-08  Martin Baulig  <martin@ximian.com>
14365
14366         * flowanalysis.cs (FlowReturns): This is now nested in the
14367         `FlowBranching' class.
14368         (MyBitVector): Moved this here from statement.cs.
14369         (FlowBranching.SiblingType): New enum type.
14370         (FlowBranching.CreateSibling): Added `SiblingType' argument.
14371
14372 2003-08-07  Martin Baulig  <martin@ximian.com>
14373
14374         * flowanalysis.cs (FlowBranchingType): This is now nested in the
14375         `FlowBranching' class and called `BranchingType'.
14376
14377 2003-08-07  Martin Baulig  <martin@ximian.com>
14378
14379         * flowanalysis.cs: Moved all the control flow analysis code into
14380         its own file.
14381
14382 2003-08-07  Martin Baulig  <martin@ximian.com>
14383
14384         * assign.cs (Assign.DoResolve): `target' must either be an
14385         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
14386         #37319.
14387
14388 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
14389
14390         * expression.cs (BinaryMethod): This kind of expression is created by the
14391         Binary class if it determines that the operator has to be handled
14392         by a method.
14393
14394         (BinaryDelegate): This kind of expression is created if we are
14395         dealing with a + or - operator on delegates.
14396
14397         (Binary): remove method, argumetns, and DelegateOperator: when
14398         dealing with methods, 
14399
14400         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
14401
14402         * statement.cs (Block): use bitfields for the three extra booleans
14403         we had in use.   Remove unused topblock parameter.
14404
14405         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
14406
14407         * assign.cs: Drop extra unneeded tests.
14408
14409 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
14410
14411         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
14412
14413         * statement.cs (Foreach): Use VariableStorage instead of
14414         LocalBuilders.   
14415
14416         * codegen.cs (VariableStorage): New class used by clients that
14417         require a variable stored: locals or fields for variables that
14418         need to live across yield.
14419
14420         Maybe provide a convenience api for EmitThis+EmitLoad?
14421
14422         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
14423         these bad boys.
14424
14425 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
14426
14427         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
14428         RemapParameterLValue): New methods that are used to turn a
14429         precomputed FieldInfo into an expression like this:
14430
14431                 instance.FieldInfo
14432
14433         The idea is to use this instead of making LocalVariableReference
14434         have more than one meaning.
14435
14436         * cs-parser.jay: Add error production to BASE.
14437
14438         * ecore.cs: Deal with TypeManager.GetField returning null, which
14439         is now a valid return value.
14440
14441         (FieldExprNoAddress): New expression for Fields whose address can
14442         not be taken.
14443
14444         * expression.cs (LocalVariableReference): During the resolve
14445         phases, create new expressions if we are in a remapping context.
14446         Remove code that dealt with remapping here.
14447
14448         (ParameterReference): same.
14449
14450         (ProxyInstance): New expression, like the `This' expression, but
14451         it is born fully resolved.  We know what we are doing, so remove
14452         the errors that are targeted to user-provided uses of `this'.
14453
14454         * statement.cs (Foreach): our variable is now stored as an
14455         Expression;  During resolution, follow the protocol, dont just
14456         assume it will return this.
14457
14458 2003-08-06  Martin Baulig  <martin@ximian.com>
14459
14460         * support.cs (SeekableStreamReader.cs): New public class.
14461
14462         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14463         SeekableStreamReader instead of the normal StreamReader.
14464
14465 2003-08-04  Martin Baulig  <martin@ximian.com>
14466
14467         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14468         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14469         deambiguate casts and delegate invocations.
14470         (parenthesized_expression): Use the new tokens to ensure this is
14471         not a cast of method invocation.
14472
14473         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14474         when reading a `)' and Deambiguate_CloseParens () was previously
14475         called.
14476
14477         * expression.cs (ParenthesizedExpression): New class.  This is
14478         just used for the CS0075 test.
14479         (Binary.DoResolve): Check for CS0075.   
14480
14481 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14482
14483         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14484         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14485         reference comparison.
14486
14487         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14488         examine the ReturnType for equality - this is necessary in the
14489         cases of implicit and explicit operators whose signature also
14490         includes the return type.
14491
14492 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14493
14494         * namespace.cs: Cache the result of the namespace computation,
14495         instead of computing it every time.
14496
14497 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14498
14499         * decl.cs: Use a global arraylist that we reuse over invocations
14500         to avoid excesive memory consumption.  Reduces memory usage on an
14501         mcs compile by one meg (45 average).
14502
14503         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14504         private, work around that.
14505
14506 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14507
14508         * literal.cs (IntLiteral): Define Zero and One static literals. 
14509
14510         * cs-parser.jay (integer_literal): use static literals to reduce
14511         memory usage for the most used literals (0, 1 and -1).  211kb
14512         reduced in memory usage.
14513
14514         Replace all calls to `new ArrayList' with `new
14515         ArrayList(4)' which is a good average number for most allocations,
14516         and also requires only 16 bytes of memory for its buffer by
14517         default. 
14518
14519         This reduced MCS memory usage in seven megabytes for the RSS after
14520         bootstrapping.
14521
14522 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14523
14524         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14525         handle params methods the correct way by forming only one
14526         applicable set with params and normal methods in them. Earlier we
14527         were looking at params methods only if we found no normal methods
14528         which was not the correct thing to do.
14529
14530         (Invocation.BetterFunction): Take separate arguments indicating
14531         when candidate and the best method are params methods in their
14532         expanded form.
14533
14534         This fixes bugs #43367 and #46199.
14535
14536         * attribute.cs: Documentation updates.
14537
14538         (CheckAttribute): Rename to CheckAttributeTarget.
14539         (GetValidPlaces): Rename to GetValidTargets.
14540
14541         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14542         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14543
14544         Fixes bug #44468.
14545
14546 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14547
14548         * codegen.cs: Compute IsGeneric correctly.
14549
14550         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14551         resolution. 
14552
14553         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14554         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14555         regressions, and I was chasing more bugs than I required.
14556
14557         * interface.cs: Use expressions for base type names (like classes
14558         and structs have been doing for a while now), and resolve that.
14559         This patch should probably go into head as well.
14560
14561         This makes it one less user of FindType.
14562
14563 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14564
14565         This compiler can not self host currently.  Need to fix that.
14566         
14567         * Makefile: compile to `gmcs.exe'
14568
14569         * driver.cs: Turn on v2 by default on gmcs.
14570
14571         * generic.cs (ConstructedType): Does no longer take a container
14572         type argument;  That will be taken care of later.
14573
14574         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14575         Use SimpleName to resolve for now, so we can continue the work on
14576         the parser, until we get Type.GetType that understands generics.
14577
14578         (ConstructedType.ToString): Implement
14579
14580         (TypeArguments.Resolve): Resolve the child expressions as types. 
14581         
14582         * cs-parser.jay: Rename interface_constraints to
14583         type_parameter_constraints
14584
14585         (namespace_or_type_name): Only use constructed types for the basic
14586         construction, we will deal with identifier<...> later.
14587
14588         (type/type_name): No longer call DecomposeQI, as
14589         namespace_or_type_name is always decoded now.
14590         
14591 2003-07-22  Ravi Pratap  <ravi@ximian.com>
14592
14593         * expression.cs (Invocation.OverloadResolve): Follow the spec more
14594         closely: we eliminate methods in base types when we have an
14595         applicable method in a top-level type.
14596
14597         Please see section 14.5.5.1 for an exact description of what goes
14598         on. 
14599
14600         This fixes bug #45127 and a host of other related to corlib compilation.
14601
14602         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
14603         array is the method corresponding to the top-level type (this is
14604         because of the changes made to icall.c) so we change this
14605         accordingly.
14606
14607         (MethodGroupExpr.Name): This too.
14608
14609         * typemanager.cs (GetElementType): New method which does the right
14610         thing when compiling corlib. 
14611
14612         * everywhere: Make use of the above in the relevant places.
14613
14614 2003-07-22  Martin Baulig  <martin@ximian.com>
14615
14616         * cs-parser.jay (invocation_expression): Moved
14617         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
14618         `cast_expression', but create a InvocationOrCast which later
14619         resolves to either an Invocation or a Cast.
14620
14621         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
14622         method; call this before EmitStatement() to make sure that this
14623         expression can be used as a statement.
14624
14625         * expression.cs (InvocationOrCast): New class; resolves to either
14626         an Invocation or a Cast.
14627
14628         * statement.cs (StatementExpression): Call ResolveStatement() on
14629         the ExpressionStatement before emitting it.
14630
14631 2003-07-21  Martin Baulig  <martin@ximian.com>
14632
14633         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
14634         `ref' and `out' attributes match; fixes #46220.
14635         (MemberAccess.ResolveMemberAccess): You can't reference a type
14636         through an expression; fixes #33180.
14637         (Indexers.GetIndexersForType): Don't return the indexers from
14638         interfaces the class implements; fixes #46502.
14639
14640 2003-07-21  Martin Baulig  <martin@ximian.com>
14641
14642         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
14643         CS0661 checks; fixes bug #30442.
14644
14645 2003-07-21  Martin Baulig  <martin@ximian.com>
14646
14647         * decl.cs (AdditionResult): Added `Error'.
14648
14649         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
14650
14651         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
14652         cs0031.cs actually work.
14653
14654  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14655  
14656         * cs-parser.jay (namespace_name): do not use
14657         namespace_or_type_name, use qualified_identifier, because
14658         namespace_or_type_name will soon return a composed expression
14659         instead of a string.
14660  
14661         (namespace_or_type_name): Instead of returning a string, now this
14662         production returns an expression.
14663  
14664         * codegen.cs (EmitContext): Setup IsGeneric property based on
14665         whether our DeclSpace is generic, our the method is generic.
14666  
14667         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
14668         the method is generic.
14669  
14670         * cs-parser.jay (type_arguments, opt_type_argument_list,
14671         type_parameters, type_parameter_list, opt_type_parameter_list,
14672         type_parameter,, opt_type_parameter_constraints_clauses,
14673         type_parameter_constraints_clauses,
14674         type_parameter_constraint_clause, type_parameter_constraint,
14675         interface_constraints): Add new production
14676  
14677         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
14678         DeclSpace is generic or not.
14679  
14680         (DeclSpace.SetParameterInfo): New routine, used to set the
14681         parameter info for a type.
14682  
14683         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
14684         returns a GenericTypeExpr
14685  
14686         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
14687         generic, lookup the generic argument.
14688  
14689         * attribute.cs: Do not allow TypeParameterExpressions in
14690         Attributes.
14691  
14692         * class.cs: Do not allow the Main method to be defined in a
14693         Generic container.
14694  
14695         * expression.cs (SizeOf): Do not allow generic types to be used as
14696         arguments to sizeof.
14697  
14698         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
14699         it: whether a type is generic or not.  Only works for types we are
14700         currently building for now.
14701         
14702 2003-07-20  Martin Baulig  <martin@ximian.com>
14703
14704         * namespace.cs: Fixed that bug which caused a crash when compiling
14705         the debugger's GUI.
14706
14707 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14708
14709         * typemanager.cs (LookupTypeReflection): Never expose types which
14710         are NotPublic, NestedPrivate, NestedAssembly, or
14711         NestedFamANDAssem.  We used to return these, and later do a check
14712         that would report a meaningful error, but the problem is that we
14713         would not get the real match, if there was a name override.
14714
14715 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
14716
14717         * namespace.cs (Namespace, Name): Do not compute the namespace
14718         name dynamically, compute it in the constructor.  This reduced
14719         memory usage by 1697 KB.
14720
14721         * driver.cs: Use --pause to pause at the end.
14722
14723 2003-07-17  Peter Williams  <peter@newton.cx>
14724
14725         * Makefile: Change the name of the test target so that it doesn't
14726         conflict with the recursive test target.
14727
14728 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
14729
14730         * expression.cs (LocalVariableReference.Emit, EmitAssign,
14731         AddressOf): Do not use EmitThis, that was wrong, use the actual
14732         this pointer.
14733
14734 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
14735
14736         * class.cs (MethodData.Define): While checking if a method is an
14737         interface implementation, improve the test: If we are not public
14738         (use new test here: use the computed MethodAttributes directly,
14739         instead of the parsed modifier flags) check if the `implementing'
14740         method comes from an interface or not.
14741
14742         * pending.cs (VerifyPendingMethods): Slightly better error
14743         message.
14744
14745         * makefile: add test target that does the mcs bootstrap.
14746
14747 2003-07-16  Ravi Pratap  <ravi@ximian.com>
14748
14749         * interface.cs (Define): Do nothing here since there are no
14750         members to populate etc. Move the attribute emission out of here
14751         since this was just totally the wrong place to put it. Attribute
14752         application happens during the 'Emit' phase, not in the 'Define'
14753         phase.
14754
14755         (Emit): Add this method and move the attribute emission here
14756
14757         * rootcontext.cs (EmitCode): Call the Emit method on interface
14758         types too.
14759
14760 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14761
14762         * expression.cs (OverloadResolve): Report error only if Location
14763         is not 'Null' which means that there was a probe going on.
14764
14765 2003-07-14  Martin Baulig  <martin@ximian.com>
14766
14767         * expression.cs (ConditionalLogicalOperator): New public class to
14768         implement user defined conditional logical operators.
14769         This is section 14.11.2 in the spec and bug #40505.
14770
14771 2003-07-14  Martin Baulig  <martin@ximian.com>
14772
14773         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
14774
14775 2003-07-14  Martin Baulig  <martin@ximian.com>
14776
14777         * codegen.cs (EmitContext.InFixedInitializer): New public field.
14778
14779         * ecore.cs (IVariable.VerifyFixed): New interface method.
14780
14781         * expression.cs (Unary.ResolveOperator): When resolving the `&'
14782         operator, check whether the variable is actually fixed.  Fixes bug
14783         #36055.  Set a variable definitely assigned when taking its
14784         address as required by the spec.
14785
14786         * statement.cs (LocalInfo.IsFixed): New field.
14787         (LocalInfo.MakePinned): Set `IsFixed' to true.
14788
14789 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14790
14791         * attribute.cs (Attribute.Resolve): While doing a Member lookup
14792         for .ctors, ensure that we only ask for members declared in the
14793         attribute type (BindingFlags.DeclaredOnly).
14794
14795         Fixes bug #43632.
14796
14797         * expression.cs (Error_WrongNumArguments): Report error 1501
14798         correctly the way CSC does.
14799
14800 2003-07-13  Martin Baulig  <martin@ximian.com>
14801
14802         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
14803         lookup on the fully qualified name, to make things like "X.X" work
14804         where "X.X" is a fully qualified type name, but we also have a
14805         namespace "X" in the using list.  Fixes #41975.
14806
14807 2003-07-13  Martin Baulig  <martin@ximian.com>
14808
14809         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
14810         function. If we're a CompoundAssign, we need to create an embedded
14811         CompoundAssign, not an embedded Assign.
14812         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
14813         Fixes #45854.
14814
14815 2003-07-13  Martin Baulig  <martin@ximian.com>
14816
14817         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
14818         work to fix bug #46088.
14819
14820 2003-07-13  Ravi Pratap <ravi@ximian.com>
14821
14822         * class.cs (Operator.Emit): Do not emit attributes here - it is
14823         taken care of by the Method class that we delegate too. This takes
14824         care of bug #45876.
14825
14826 2003-07-10  Martin Baulig  <martin@ximian.com>
14827
14828         * expression.cs (TypeOfVoid): New class.
14829         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
14830
14831 2003-07-10  Martin Baulig  <martin@ximian.com>
14832
14833         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
14834         bug #35957.
14835
14836 2003-07-10  Martin Baulig  <martin@ximian.com>
14837
14838         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
14839         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
14840
14841         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
14842
14843         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
14844
14845 2003-07-10  Martin Baulig  <martin@ximian.com>
14846
14847         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
14848         of decimal.  Fixes #42850.
14849
14850         NOTE: I also fixed the created byte blob, but this doesn't work on
14851         the MS runtime and csc never produces any byte blobs for decimal
14852         arrays.
14853
14854 2003-07-10  Martin Baulig  <martin@ximian.com>
14855
14856         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
14857         structs; fixes #32068.
14858         (Block.AddChildVariableNames): Fixed #44302.
14859
14860 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14861
14862         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
14863
14864 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14865
14866         * attribute.cs: And this test is onger needed.
14867
14868 2003-07-08  Martin Baulig  <martin@ximian.com>
14869
14870         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
14871         inaccessible types.  Fixes #36313.
14872
14873         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
14874
14875         * namespace.cs (NamespaceEntry): Create implicit entries for all
14876         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
14877         implicit entries for N1.N2 and N1.
14878
14879 2003-07-08  Martin Baulig  <martin@ximian.com>
14880
14881         Rewrote the handling of namespaces to fix a lot of the issues
14882         wrt. `using' aliases etc.
14883
14884         * namespace.cs (Namespace): Splitted this class into a
14885         per-assembly `Namespace' and a per-file `NamespaceEntry'.
14886
14887         * typemanager.cs (TypeManager.IsNamespace): Removed.
14888         (TypeManager.ComputeNamespaces): Only compute namespaces from
14889         loaded assemblies here, not the namespaces from the assembly we're
14890         currently compiling.
14891
14892 2003-07-08  Martin Baulig  <martin@ximian.com>
14893
14894         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
14895
14896 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14897
14898         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
14899         already fixed it.  
14900
14901         I thought about the memory savings here, but LookupTypeReflection
14902         is used under already very constrained scenarios.  Compiling
14903         corlib or mcs only exposes one hit, so it would not really reduce
14904         any memory consumption.
14905
14906 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14907
14908         * typemanager.cs: fixes bug #45889 by only adding public types from
14909         other assemblies to the list of known types.
14910
14911 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14912
14913         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
14914         on the type we resolved.
14915
14916 2003-07-05  Martin Baulig  <martin@ximian.com>
14917
14918         * pending.cs (PendingImplementation.ParentImplements): Don't
14919         create the proxy if the parent is abstract.
14920
14921         * class.cs (TypeContainer.DefineIndexers): Process explicit
14922         interface implementations first.  Fixes #37714.
14923
14924 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
14925
14926         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
14927         defined recursively;  but since we modify the input parameters
14928         (left is set to `this' temporarily), we reset this value if the
14929         left_is_explicit is false, which gives the original semantics to
14930         the code.  
14931
14932         * literal.cs (NullPointer): new class used to represent a null
14933         literal in a pointer context.
14934
14935         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
14936         type is a pointer, use a NullPointer object instead of a
14937         NullLiteral.   Closes 43687
14938
14939         (ExplicitConversion): Convert pointer values using
14940         the conv opcode to the proper type.
14941
14942         * ecore.cs (New): change ValueTypeVariable property into a method,
14943         that returns whether the valuetype is suitable for being used.
14944
14945         * expression.cs (Binary.DoNumericPromotions): Only return if we
14946         the int constant was a valid uint, and we can return both left and
14947         right as uints.  If not, we continue processing, to trigger the
14948         type conversion.  This fixes 39018.
14949
14950         * statement.cs (Block.EmitMeta): During constant resolution, set
14951         the CurrentBlock property on the emitcontext, so that we resolve
14952         constants propertly.
14953
14954 2003-07-02  Martin Baulig  <martin@ximian.com>
14955
14956         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
14957         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
14958
14959         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
14960         than emitting it here.
14961
14962         * statement.cs: Fixed some more flow analysis bugs.
14963
14964 2003-07-02  Martin Baulig  <martin@ximian.com>
14965
14966         * class.cs (MethodData.Define): When implementing interface
14967         methods, set Final unless we're Virtual.
14968
14969         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
14970         check work for interface methods.
14971
14972 2003-07-01  Martin Baulig  <martin@ximian.com>
14973
14974         * ecore.cs (EmitContext.This): Replaced this property with a
14975         GetThis() method which takes a Location argument.  This ensures
14976         that we get the correct error location for a CS0188.
14977
14978 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
14979
14980         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
14981         ImplicitStandardConversion.
14982
14983         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
14984
14985 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
14986
14987         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
14988         optimization.
14989
14990 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
14991
14992         * class.cs (Constructor.Define): Turn off initlocals for unsafe
14993         constructors.
14994
14995         (MethodData.Define): Turn off initlocals for unsafe methods.
14996
14997 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
14998
14999         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
15000         complete;  Fixes #37521.
15001
15002         * delegate.cs: Use Modifiers.TypeAttr to compute the
15003         TypeAttributes, instead of rolling our own.  This makes the flags
15004         correct for the delegates.
15005
15006 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
15007
15008         * class.cs (Constructor.Define): Set the private flag for static
15009         constructors as well.
15010
15011         * cs-parser.jay (statement_expression): Set the return value to
15012         null, to avoid a crash when we catch an error.
15013
15014 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
15015
15016         * cs-parser.jay: Applied patch from Jackson that adds support for
15017         extern and unsafe modifiers to destructor declarations.
15018
15019         * expression.cs: Report error 21 if the user is trying to index a
15020         System.Array.
15021
15022         * driver.cs: Add an error message, suggested by the bug report.
15023
15024         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
15025         if we do not have a ": this ()" constructor initializer.  Fixes 45149
15026
15027 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
15028
15029         * namespace.cs: Add some information to reduce FAQs.
15030
15031 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
15032
15033         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
15034         underlying enumeration types.  Fixes #43915.
15035
15036         * expression.cs: Treat ushort/short as legal values to be used in
15037         bitwise operations.
15038
15039 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
15040
15041         * delegate.cs: transfer custom attributes for paramenters from
15042         the delegate declaration to Invoke and BeginInvoke.
15043
15044 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
15045
15046         * attribute.cs: handle custom marshalers and emit marshal info
15047         for fields, too.
15048
15049 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
15050
15051         * makefile.gnu: Added anonymous.cs to the compiler sources.
15052
15053 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
15054
15055         * iterators.cs: Change the name of the proxy class to include two
15056         underscores.
15057
15058         * cs-parser.jay: Update grammar to include anonymous methods.
15059
15060         * anonymous.cs: new file.
15061
15062 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
15063
15064         * class.cs (Field.Define): Add missing test for pointers and
15065         safety. 
15066
15067 2003-05-27  Ravi Pratap  <ravi@ximian.com>
15068
15069         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
15070         we use the stobj opcode.
15071
15072         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
15073         since it wasn't the correct fix. 
15074
15075         It still is puzzling that we are required to use stobj for IntPtr
15076         which seems to be a ValueType.
15077
15078 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
15079
15080         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
15081         during regular simple name resolution.   Now, the trick is that
15082         instead of returning for processing the simplename, we do a
15083         TypeManager.LookupType (ie, a rooted lookup as opposed to a
15084         contextual lookup type).   If a match is found, return that, if
15085         not, return for further composition.
15086
15087         This fixes long-standing 30485.
15088
15089         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15090         using the address to initialize an object, do an Stobj instead of
15091         using the regular Stelem.
15092
15093         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
15094         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
15095         Because if we are a BaseIndexerAccess that value will be true.
15096         Fixes 43643.
15097
15098         * statement.cs (GotoCase.Resolve): Return after reporting an
15099         error, do not attempt to continue. 
15100
15101         * expression.cs (PointerArithmetic.Emit): If our operand is a
15102         long, convert our constants to match the operand before
15103         multiplying.  Convert to I type before adding.   Fixes 43670.
15104
15105 2003-05-14  Ravi Pratap  <ravi@ximian.com>
15106
15107         * enum.cs (ImplicitConversionExists) : Rename to
15108         ImplicitEnumConversionExists to remove ambiguity. 
15109
15110         * ecore.cs (NullCast): New type of cast expression class which
15111         basically is very similar to EmptyCast with the difference being
15112         it still is a constant since it is used only to cast a null to
15113         something else
15114         (eg. (string) null)
15115
15116         * convert.cs (ImplicitReferenceConversion): When casting a null
15117         literal, we return a NullCast.
15118
15119         * literal.cs (NullLiteralTyped): Remove - I don't see why this
15120         should be around anymore.
15121
15122         The renaming (reported was slightly wrong). Corrections:
15123
15124         ConvertImplicitStandard -> ImplicitConversionStandard
15125         ConvertExplicitStandard -> ExplicitConversionStandard
15126
15127         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
15128         before passing them in !
15129
15130         * convert.cs (ImplicitConversionStandard): When comparing for
15131         equal expr and target types, ensure that expr is not a
15132         NullLiteral.
15133
15134         In general, we must not be checking (expr_type ==
15135         target_type) in the top level conversion methods
15136         (ImplicitConversion, ExplicitConversion etc). This checking is
15137         done in the methods that they delegate to.
15138
15139 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
15140
15141         * convert.cs: Move Error_CannotConvertType,
15142         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
15143         ImplicitNumericConversion, ImplicitConversionExists,
15144         ImplicitUserConversionExists, StandardConversionExists,
15145         FindMostEncompassedType, FindMostSpecificSource,
15146         FindMostSpecificTarget, ImplicitUserConversion,
15147         ExplicitUserConversion, GetConversionOperators,
15148         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
15149         TryImplicitIntConversion, Error_CannotConvertImplicit,
15150         ConvertImplicitRequired, ConvertNumericExplicit,
15151         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
15152         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
15153         its own file.
15154
15155         Perform the following renames:
15156
15157         StandardConversionExists -> ImplicitStandardConversionExists
15158         ConvertImplicit -> ImplicitConversion
15159         ConvertImplicitStandard -> ImplicitStandardConversion
15160         TryImplicitIntConversion -> ImplicitIntConversion
15161         ConvertImplicitRequired -> ImplicitConversionRequired
15162         ConvertNumericExplicit -> ExplicitNumericConversion
15163         ConvertReferenceExplicit -> ExplicitReferenceConversion
15164         ConvertExplicit -> ExplicitConversion
15165         ConvertExplicitStandard -> ExplicitStandardConversion
15166
15167 2003-05-19  Martin Baulig  <martin@ximian.com>
15168
15169         * statement.cs (TypeInfo.StructInfo): Made this type protected.
15170         (TypeInfo): Added support for structs having structs as fields.
15171
15172         * ecore.cs (FieldExpr): Implement IVariable.
15173         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
15174         VariableInfo for the field.
15175
15176 2003-05-18  Martin Baulig  <martin@ximian.com>
15177
15178         * expression.cs (This.DoResolve): Report a CS0027 if we're
15179         emitting a field initializer.
15180
15181 2003-05-18  Martin Baulig  <martin@ximian.com>
15182
15183         * expression.cs (This.ResolveBase): New public function.
15184         (This.DoResolve): Check for CS0188.
15185
15186         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
15187         This.Resolve().
15188
15189         * ecore.cs (MethodGroupExpr.DoResolve): Set the
15190         `instance_expression' to null if we don't have any non-static
15191         methods.
15192
15193 2003-05-18  Martin Baulig  <martin@ximian.com>
15194
15195         Reworked the way how local variables and parameters are handled by
15196         the flow analysis code.
15197
15198         * statement.cs (TypeInfo, VariableMap): New public classes.
15199         (VariableInfo): New public class.  This is now responsible for
15200         checking whether a variable has been assigned.  It is used for
15201         parameters and local variables.
15202         (Block.EmitMeta): Take the InternalParameters as argument; compute
15203         the layout of the flow vectors here.
15204         (Block.LocalMap, Block.ParameterMap): New public properties.
15205         (FlowBranching): The .ctor doesn't get the InternalParameters
15206         anymore since Block.EmitMeta() now computes the layout of the flow
15207         vector.
15208         (MyStructInfo): This class is now known as `StructInfo' and nested
15209         in `TypeInfo'; we don't access this directly anymore.
15210
15211         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
15212         property and removed IsAssigned(), IsFieldAssigned(),
15213         SetAssigned() and SetFieldAssigned(); we now call them on the
15214         VariableInfo so we don't need to duplicate this code everywhere.
15215
15216         * expression.cs (ParameterReference): Added `Block block' argument
15217         to the .ctor.
15218         (LocalVariableReference, ParameterReference, This): The new
15219         VariableInfo class is now responsible for all the definite
15220         assignment stuff.
15221
15222         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
15223         IsParameterAssigned, SetParameterAssigned): Removed.
15224
15225 2003-05-18  Martin Baulig  <martin@ximian.com>
15226
15227         * typemanager.cs (InitCoreTypes): Try calling
15228         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
15229         the 3-args-version.  Corlib now also needs our `void_type'.
15230         (GetMethod): Added overloaded version which takes an optional
15231         `bool report_errors' to allow lookups of optional methods.
15232
15233 2003-05-12  Martin Baulig  <martin@ximian.com>
15234
15235         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
15236         only used for locals and not for parameters.
15237
15238 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
15239
15240         * support.cs (InternalParameters.ParameterType): Return the
15241         ExternalType of the parameter.
15242
15243         * parameter.cs (Parameter.ExternalType): drop the two arguments,
15244         they were unused.
15245
15246 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
15247
15248         * class.cs (MethodData.Define): Do not set the `newslot' on
15249         interface members, if they are also flagged as "override".
15250
15251         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
15252         better code for ++i and i++.  This only works for static fields
15253         and local variables.
15254
15255         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
15256         want to pull the DeclSpace out of the builder_to_declspace instead
15257         of the TypeBuilder (like in TypeContainer.FindMembers).
15258
15259         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
15260         instead of LookupTypeContainer.  Fixes the crash on .NET for
15261         looking up interface members.
15262
15263         * const.cs: Create our own emit context during the Definition
15264         stage, so that constants are evaluated in the proper context, when
15265         a recursive definition happens.
15266
15267 2003-05-11  Martin Baulig  <martin@ximian.com>
15268
15269         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
15270         new block for a switch section.
15271         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
15272         the adding/lookup in the switch block.  Fixes #39828.
15273
15274 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
15275
15276         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
15277         functionality: I needed to convert the data after I had performed
15278         the add/sub operation into the operands type size.
15279
15280         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
15281         pass the type for the box operation, otherwise the resulting
15282         object would have been of type object.
15283
15284         (BoxedCast): Add constructor to specify the type to box as.
15285
15286 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
15287
15288         * iterators.cs: I was reusing the `count' variable inadvertently,
15289         take steps to not allow this to happen.
15290
15291 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
15292
15293         * attribute.cs (Attribute.Resolve): Params attributes are encoded
15294         by creating an array at the point where the params starts and
15295         putting all those arguments there, then adjusting the size of the
15296         array.
15297
15298 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
15299
15300         * expression.cs (New.AddressOf): Implement interface
15301         IMemoryLocation.  This is used when the `new' operator is used in
15302         the context of an invocation to a method on a value type.
15303
15304         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
15305         example. 
15306
15307         * namespace.cs: Also check the using aliases here.
15308
15309         * driver.cs: Move the test for using validity after the types have
15310         been entered, so we do a single pass that also includes the using
15311         aliases. 
15312
15313         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
15314         in the regular case.   CreateSiblingForFinally is doing extra
15315         error checking.
15316
15317         * attribute.cs (GetAttributeArgumentExpression): Store the result
15318         on an out value, and use the return value to indicate failure
15319         instead of using null (which is a valid return for Constant.GetValue).
15320
15321         * statement.cs: Perform the analysis flow for the increment
15322         portion after the statement, because this will be the real flow of
15323         execution.  Fixes #42385
15324
15325         * codegen.cs (EmitContext.EmitArgument,
15326         EmitContext.EmitStoreArgument): New helper functions when the
15327         RemapToProxy flag is set.
15328
15329         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
15330         function.
15331
15332         Add support for remapping parameters. 
15333
15334         * iterators.cs: Propagate parameter values;  Store parameter
15335         values in the proxy classes.
15336
15337 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
15338
15339         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
15340         need a proxy reference;  I do not know what I was thinking
15341
15342         * cs-parser.jay (constructor_initializer): catch another error,
15343         and display nice message.
15344
15345         (field_declaration): catch void field declaration
15346         to flag a better error. 
15347
15348         * class.cs (MemberBase.CheckBase): Report an error instead of a
15349         warning if a new protected member is declared in a struct. 
15350         (Field.Define): catch the error of readonly/volatile.
15351
15352         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
15353
15354         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
15355         volatile variable is taken
15356
15357 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
15358
15359         * statement.cs (Fixed.Resolve): Report an error if we are not in
15360         an unsafe context.
15361
15362 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
15363
15364         * typemanager.cs: reuse the code that handles type clashes for
15365         delegates and enumerations.
15366
15367         * class.cs (Report28): Always report.
15368
15369         * expression.cs (EncodeAsAttribute): Allow nulls here.
15370
15371 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
15372
15373         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
15374         the functionality for testing whether an expression is valid for
15375         an attribute here.  Also handle the case of arrays of elements
15376         being stored. 
15377
15378         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
15379         encoding a linear array into an array of objects that are suitable
15380         to be passed to an CustomAttributeBuilder.
15381
15382         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
15383
15384         * ecore.cs: (FieldExpr): Handle field remapping here.
15385
15386         * iteratators.cs: Pass the instance variable (if the method is an
15387         instance method) to the constructors, so we can access the field
15388         variables on the class.
15389
15390         TODO: Test this with structs.  I think the THIS variable on
15391         structs might have to be a pointer, and not a refenrece
15392
15393 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
15394
15395         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
15396         local variables to fields in a proxy class.
15397
15398         * iterators.cs (PopulateProxy): Rename our internal fields to
15399         <XXX>.  
15400         Create a <THIS> field if we are an instance method, so we can
15401         reference our parent container variables.
15402         (MapVariable): Called back from the EmitContext code to enter a
15403         new variable to field mapping into the proxy class (we just create
15404         a FieldBuilder).
15405
15406         * expression.cs
15407         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
15408         for using the remapped locals to fields.
15409
15410         I placed the code here, because that gives the same semantics to
15411         local variables, and only changes the Emit code.
15412
15413         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
15414         statements inside iterators.
15415         (VariableInfo): Add a FieldBuilder for the cases when we are
15416         remapping local variables to fields in a proxy class
15417
15418         * ecore.cs (SimpleNameResolve): Avoid testing two times for
15419         current_block != null.
15420
15421         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
15422         not cope with strings, as it has been moved to the
15423         TableSwitchEmit.  Fixed bug in switch generation.
15424
15425         * expression.cs (New.DoResolve): Provide more context for the user
15426         when reporting an error.
15427
15428         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
15429         pointers. 
15430
15431         * expression.cs (MemberAccess.DoResolve): When we get a type back,
15432         check the permissions for it.  Note than in a type-resolution
15433         context the check was already present in DeclSpace.ResolveType,
15434         but was missing from the MemberAccess.
15435
15436         (ArrayCreation.CheckIndices): warn if the user has
15437         more nested levels of expressions, but there are no more
15438         dimensions specified.  Avoids crash on bug 41906.
15439
15440 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
15441
15442         * statement.cs (Block): replace Implicit bool, for a generic
15443         flags.   
15444         New flag: `Unchecked'.  This is used during the EmitMeta phase
15445         (which is out-of-line with the regular Resolve/Emit process for a
15446         statement, as this is done ahead of time, but still gets a chance
15447         to call constant resolve).
15448
15449         (Block.Flags): new enum for adding a new flag.
15450
15451         (Block.EmitMeta): track the state of unchecked.
15452
15453         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
15454         to enable constant resolution to work there as well.
15455
15456 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
15457
15458         * typemanager.cs (ienumerable_type): Also look up
15459         System.Collections.IEnumerable. 
15460
15461 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
15462
15463         TODO: Test more than one conditional per method.
15464
15465         * class.cs (Indexer.Define): Report the location where the user is
15466         referencing the unsupported feature.
15467
15468         (MethodData): Overload the use of `conditionals' to
15469         minimize the creation of needless ArrayLists.   This saves roughly
15470         212kb on my machine.
15471
15472         (Method): Implement the new IIteratorContainer interface.
15473         (Method.SetYields): Implement the method by setting the ModFlags
15474         to contain METHOD_YIELDS.
15475
15476         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15477         which just got set to null.
15478
15479         * iterators.cs: New file.
15480
15481         (Yield, YieldBreak): New statements.
15482
15483         * statement.cs (Return.Resolve): Flag an error if we are used in
15484         an iterator method.
15485
15486         * codegen.cs (InIterator): New flag set if the code is being
15487         compiled in an iterator method.
15488
15489         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15490         internal modifier, and we just use it to avoid adding extra
15491         fields, as this is seldom used.  
15492
15493         * cs-parser.jay: Add yield_statement (yield and yield break).
15494
15495         * driver.cs: New flag -v2 to turn on version 2 features. 
15496
15497         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15498         hashtable when v2 is enabled.
15499
15500 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15501
15502         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15503         there is already a namespace defined with this name.
15504
15505         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15506         people upgraded their corlibs.
15507
15508         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15509         always use fully qualified types, no need to use the compiler
15510         front end.
15511
15512         (TypeManager.IsNamespace): Use binarysearch.
15513
15514         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15515         AddDelegate): I did not quite use the new IsValid API properly: I
15516         have to pass the short-name and the fullname.  I was passing only
15517         the basename instead of the fullname sometimes. 
15518
15519         (TypeContainer.DefineType): call NamespaceClash.
15520
15521         * interface.cs (Interface.DefineType): use NamespaceClash before
15522         defining the type.
15523
15524         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15525         defining the type.
15526
15527         * enum.cs: (Enum.DefineType): use NamespaceClash before
15528         defining the type.
15529
15530         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15531         speed increase.  First, use the negative_hits cache when we get a
15532         negative.  Second, add the type with its full original name
15533         instead of the new . and + encoded name (reflection uses + to
15534         separate type from a nested type).  Use LookupTypeReflection
15535         directly which bypasses the type->name hashtable (that we already
15536         know does not contain the type.
15537
15538         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15539         location/container type. 
15540
15541         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15542
15543 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15544
15545         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15546
15547         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15548         method is being referenced in the method group from a static
15549         context, and report error 120 if so.
15550
15551         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15552         Error118. 
15553
15554         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15555         is created, we create the A namespace).
15556
15557         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15558         Fixes #41591
15559
15560 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15561
15562         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15563         invocation to ModuleBuilder.GetType with the same values will
15564         return a new type instance, so we need to cache its return
15565         values. 
15566
15567         * expression.cs (Binary.ResolveOperator): Only allow the compare
15568         operators on enums if they are of the same type.
15569
15570         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15571         types of ValueType on their own case.  Before we were giving them
15572         the same treatment as objects.
15573
15574         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15575         fullname.  Short name is used to compare against container name.
15576         Fullname is used to check against defined namespace names.
15577
15578         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15579         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15580
15581         (Method.CheckBase): Call parent.
15582         (MemberBase.CheckBase): Check for protected members on sealed
15583         classes.
15584         (PropertyBase.CheckBase): Call parent.
15585         (Field.Define): Call parent.
15586
15587         * report.cs: Negative error codes are now mapped to 8000 - code,
15588         so that the display is render more nicely.
15589
15590         * typemanager.cs: Do not use try/catch, instead report a regular
15591         error. 
15592
15593         (GetPointerType, GetReferenceType): These methods provide
15594         mechanisms to obtain the T* and T& from a T.  We had the code
15595         previously scattered around the code base, and it also used
15596         TypeManager.LookupType that would go through plenty of caches.
15597         This one goes directly to the type source.
15598
15599         In some places we did the Type.GetType followed by
15600         ModuleBuilder.GetType, but not in others, so this unifies the
15601         processing as well.
15602
15603         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
15604         statements now that we have namespace information.
15605
15606         * typemanager.cs (IsNamespace): New method, returns whether the
15607         string presented is a namespace or not.
15608
15609         (ComputeNamespaces): New public entry point, computes the list of
15610         available namespaces, using the GetNamespaces API call in Mono, or
15611         the slower version in MS.NET.   
15612
15613         Now before we start the semantic analysis phase, we have a
15614         complete list of namespaces including everything that the user has
15615         provided.
15616
15617         Deleted old code to cache namespaces in .nsc files.
15618
15619 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
15620
15621         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
15622         class/struct location definition Location for the implicit
15623         constructor location.
15624
15625         (Operator.Define): Use the location of the operator for the
15626         implicit Method definition.
15627
15628         (Constructor.Emit): use the constructor location for the implicit
15629         base initializer constructor.
15630
15631         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
15632         and the Expression class now contains two new methods:
15633
15634         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
15635         isolate type lookup from the rest of the resolution process.
15636
15637         Since we use Expressions to hold type definitions due to the way
15638         we parse the input we have historically overloaded Resolve to
15639         perform the Type lookups if a special flag is passed.  Now this is
15640         eliminated and two methods take their place. 
15641
15642         The differences in the two methods between xStep and xTerminal is
15643         that xStep is involved in our current lookup system that uses
15644         SimpleNames to compose a name, while xTerminal is used just to
15645         catch the case where the simplename lookup failed.
15646
15647 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
15648
15649         * expression.cs (ResolveMemberAccess): Remove redundant code.
15650         TypeExpr expressions are always born fully resolved.
15651
15652         * interface.cs (PopulateMethod): Do not lookup the types twice.
15653         We were doing it once during SemanticAnalysis and once during
15654         PopulateMethod.
15655
15656         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
15657         in local variable type definitions, were being returned as a
15658         SimpleName (we decomposed everything into a string), that is
15659         because primary_expression was being used instead of a type in the
15660         grammar (reduce/reduce conflicts).
15661
15662         The part that was wrong is that we converted the expression into a
15663         string (an oversimplification in one hand, compounded with primary
15664         expressions doing string concatenation).
15665
15666         So things like:
15667
15668         A.B.C [] x;
15669
15670         Would return "A.B.C[]" as a SimpleName.  This stopped things like
15671         using clauses from working on this particular context.  And a type
15672         was being matched directly against "A.B.C[]".
15673
15674         We now use the correct approach, and allow for ComposedCast to be
15675         part of the unary expression.  So the "A.B.C []" become a composed
15676         cast of "A.B.C" (as a nested group of MemberAccess with a
15677         SimpleName at the end) plus the rank composition "[]". 
15678
15679         Also fixes 35567
15680
15681 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
15682
15683         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
15684         for the access level checking.
15685
15686         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
15687         `TypeContainer container', because I kept getting confused when I
15688         was debugging this code.
15689
15690         * expression.cs (Indexers): Instead of tracking getters/setters,
15691         we now track them in parallel.  We create one arraylist less, but
15692         most importantly it is possible now for the LValue code to find a
15693         matching get for a set.
15694
15695         (IndexerAccess.DoResolveLValue): Update the code.
15696         GetIndexersForType has been modified already to extract all the
15697         indexers from a type.  The code assumed it did not.
15698
15699         Also make the code set the correct return type for the indexer.
15700         This was fixed a long time ago for properties, but was missing for
15701         indexers.  It used to be void_type.
15702
15703         (Binary.Emit): Test first for doubles instead of
15704         floats, as they are more common.
15705
15706         (Binary.EmitBranchable): Use the .un version of the branch opcodes
15707         when dealing with floats and the <=, >= operators.  This fixes bug
15708         #39314 
15709
15710         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
15711         to load the array value by emitting a load on the foreach variable
15712         type.  This was incorrect.  
15713
15714         We now emit the code to load an element using the the array
15715         variable type, and then we emit the conversion operator.
15716
15717         Fixed #40176
15718
15719 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
15720
15721         * attribute.cs: Avoid allocation of ArrayLists in the common case.
15722
15723 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
15724
15725         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
15726         test for protection before we test for signatures. 
15727
15728         (MethodSignature.ToString): implement.
15729
15730         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
15731         to the case where we reduced into a LongConstant.
15732
15733         * decl.cs (CheckAccessLevel): If the type is an array, we can not
15734         depend on whether the information is acurrate, because the
15735         Microsoft runtime will always claim that the array type is public,
15736         regardless of the real state.
15737
15738         If the type is a pointer, another problem happens: the type is
15739         reported as non-public in Microsoft.  
15740
15741         In both cases we have to call CheckAccessLevel recursively with
15742         the underlying type as the argument to be tested.
15743
15744 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
15745
15746         * assign.cs (Assign.Emit): If we are dealing with a compound
15747         assignment expression, we should use the code path that stores the
15748         intermediate result in a temporary value.  This fixes #40903.
15749
15750         *expression.cs (Indirection.ToString): Provide ToString method for
15751         debugging. 
15752
15753 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
15754
15755         * class.cs: Null out fields holding references to Block objects so
15756         they can be garbage collected.
15757
15758         * expression.cs (OverloadResolve): Remove unused local.
15759
15760 2003-04-07  Martin Baulig  <martin@ximian.com>
15761
15762         * codegen.cs (EmitContext.CurrentFile): New public field.
15763         (EmitContext.Mark): Use the CurrentFile to check whether the
15764         location is in the correct file.
15765         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
15766
15767 2003-04-07  Martin Baulig  <martin@ximian.com>
15768
15769         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
15770
15771         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
15772         location.  [FIXME: The location argument which gets passed to this
15773         method is sometimes wrong!]
15774
15775 2003-04-07  Nick Drochak <ndrochak@gol.com>
15776
15777         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
15778
15779 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
15780
15781         * expression.cs (Indirection.EmitAssign): We were using the
15782         temporary, but returning immediately instead of continuing the
15783         EmitAssing flow.
15784
15785 2003-04-06  Martin Baulig  <martin@ximian.com>
15786
15787         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
15788         if it's a nested child, but also deriving from the outer class.
15789         See test 190.cs.
15790
15791         * typemanager.cs (IsNestedChildOf): Make this work if it's a
15792         nested child, but also deriving from the outer class.  See
15793         test-190.cs.
15794         (FilterWithClosure): We may access private members of the outer
15795         class if we're a nested child and deriving from the outer class.
15796         (RealMemberLookup): Only set `closure_private_ok' if the
15797         `original_bf' contained BindingFlags.NonPublic.
15798
15799 2003-04-05  Martin Baulig  <martin@ximian.com>
15800
15801         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
15802         probe if its a type parameter, and if so, flag an error.
15803
15804         * decl.cs: Move here the SetParameterInfo code from class.cs.
15805         Handle IsGeneric here.
15806
15807         Handle a variety of errors in the parameter info definition.
15808
15809         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
15810         type parameters here.
15811
15812         * cs-parser.jay (class_declaration): report errors for parameters
15813         here as well.
15814
15815 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
15816
15817         * generic.cs: New file, contains support code for generics.
15818
15819         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
15820         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
15821
15822         Update parser for the above removals.
15823
15824         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
15825         now taken care of in the parser.
15826
15827 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
15828
15829         * class.cs (Event.Define): Do not allow abstract events to have
15830         initializers. 
15831
15832 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
15833
15834         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
15835         block in event declarations.
15836
15837         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
15838         value type, get its address.
15839
15840         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
15841         leaving a class on the stack instead of a boolean value (int
15842         0/1).  Change the code so we compare against null, and then the
15843         result against zero.
15844
15845         * class.cs (TypeContainer.GetClassBases): We were checking for the
15846         parent class being sealed too late.
15847
15848         * expression.cs (Binary.Emit): For <= and >= when dealing with
15849         floating point values, use cgt.un and clt.un instead of cgt and
15850         clt alone.
15851
15852 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
15853
15854         * statement.cs: Apply the same optimization as MS: skip the 
15855         GetEnumerator returning an IEnumerator, and use the one returning a 
15856         CharEnumerator instead. This allows us to avoid the try-finally block 
15857         and the boxing.
15858
15859 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
15860
15861         * cs-parser.jay: Attributes cannot be applied to
15862                          namespaces. Fixes #40473
15863
15864 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15865
15866         * class.cs:
15867         (Add*): check if the name is valid using the full name for constants,
15868         fields, properties and events.
15869
15870 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
15871
15872         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
15873         char constants to be part of the enumeration.
15874
15875         * expression.cs (Conditional.DoResolve): Add support for operator
15876         true. Implements the missing functionality from 14.12
15877
15878         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
15879         operator true/false as required by the spec.
15880
15881         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
15882         implicit conversion to boolean.
15883
15884         * statement.cs (Statement.ResolveBoolean): A boolean expression is
15885         also one where the type implements `operator true'. 
15886
15887         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
15888         get an expression that will invoke operator true based on an
15889         expression.  
15890
15891         (GetConversionOperators): Removed the hack that called op_True
15892         here.  
15893
15894         (Expression.ResolveBoolean): Move this from Statement.
15895
15896 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
15897
15898         * ecore.cs (FieldExpr): do not allow initialization of initonly
15899         fields on derived classes
15900
15901 2003-03-13  Martin Baulig  <martin@ximian.com>
15902
15903         * statement.cs (Block.Emit): Call ig.BeginScope() and
15904         ig.EndScope() when compiling with debugging info; call
15905         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
15906
15907 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
15908
15909         * expression.cs (Indexers): Do not construct immediately, allow
15910         for new members to be appended as we go.  Fixes 38143
15911
15912 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15913
15914         * expression.cs: save/restore context when resolving an unchecked
15915         expression.
15916
15917 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
15918
15919         * cfold.cs: Catch division by zero in modulus operator during
15920         constant folding.
15921
15922 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
15923
15924         * interface.cs (Interface.DefineMembers): Avoid defining members
15925         twice. 
15926
15927 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
15928
15929         * driver.cs: handle the +/- options for -noconfig
15930
15931         * statement.cs (Unckeched.Resolve): Also track the state of
15932         unchecked in the Resolve phase.
15933
15934 2003-02-27  Martin Baulig  <martin@ximian.com>
15935
15936         * ecore.cs (Expression.MemberLookup): Don't create a
15937         MethodGroupExpr for something which is not a method.  Fixes #38291.
15938
15939 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
15940
15941         * class.cs (MemberBase.CheckParameters): Also check that the type
15942         is unmanaged if it is a pointer.
15943
15944         * expression.cs (SizeOf.Resolve): Add location information.
15945
15946         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
15947         a managed type is declared.
15948
15949         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
15950         parameter modifiers as well.  Fixes bug 38606
15951
15952         * class.cs: Very sad.  Am backing out the speed up changes
15953         introduced by the ArrayList -> Array in the TypeContainer, as they
15954         were not actually that much faster, and introduced a bug (no error
15955         reports on duplicated methods).
15956
15957         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
15958         source first, this will guarantee that we have a valid expression
15959         before calling in lower levels functions that will require a
15960         resolved object.  Then use this original_source in the
15961         target.ResolveLValue instead of the original source that was
15962         passed to us.
15963
15964         Another change.  Use target.Resolve instead of LValueResolve.
15965         Although we are resolving for LValues, we will let the Assign code
15966         take care of that (it will be called again from Resolve).  This
15967         basically allows code like this:
15968
15969         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
15970         class Y { void A (X x) { x [0] += o; }
15971
15972         The problem was that the indexer was trying to resolve for
15973         set_Item (idx, object o) and never finding one.  The real set_Item
15974         was set_Item (idx, X).  By delaying the process we get the right
15975         semantics. 
15976
15977         Fixes bug 36505
15978
15979 2003-02-23  Martin Baulig  <martin@ximian.com>
15980
15981         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
15982         while calling DoEmit ().
15983
15984         * codegen.cs (EmitContext.Mark): Don't mark locations in other
15985         source files; if you use the #line directive inside a method, the
15986         compiler stops emitting line numbers for the debugger until it
15987         reaches the end of the method or another #line directive which
15988         restores the original file.
15989
15990 2003-02-23  Martin Baulig  <martin@ximian.com>
15991
15992         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
15993
15994 2003-02-23  Martin Baulig  <martin@ximian.com>
15995
15996         * statement.cs (Block.AddChildVariableNames): We need to call this
15997         recursively, not just for our immediate children.
15998
15999 2003-02-23  Martin Baulig  <martin@ximian.com>
16000
16001         * class.cs (Event.Define): Always make the field private, like csc does.
16002
16003         * typemanager.cs (TypeManager.RealMemberLookup): Make events
16004         actually work, fixes bug #37521.
16005
16006 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
16007
16008         * delegate.cs: When creating the various temporary "Parameters"
16009         classes, make sure that we call the ComputeAndDefineParameterTypes
16010         on those new parameters (just like we do with the formal ones), to
16011         allow them to be resolved in the context of the DeclSpace.
16012
16013         This fixes the bug that Dick observed in Bugzilla #38530.
16014
16015 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
16016
16017         * expression.cs (ResolveMemberAccess): When resolving a constant,
16018         do not attempt to pull a constant if the value was not able to
16019         generate a valid constant.
16020
16021         * const.cs (LookupConstantValue): Do not report more errors than required.
16022
16023 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16024
16025         * expression.cs: fixes bug #38328.
16026
16027 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16028
16029         * class.cs: Changed all the various members that can be part of a
16030         class from being an ArrayList to be an Array of the right type.
16031         During the DefineType type_list, interface_list, delegate_list and
16032         enum_list are turned into types, interfaces, delegates and enums
16033         arrays.  
16034
16035         And during the member population, indexer_list, event_list,
16036         constant_list, field_list, instance_constructor_list, method_list,
16037         operator_list and property_list are turned into their real arrays.
16038
16039         Although we could probably perform this operation earlier, for
16040         good error reporting we need to keep the lists and remove the
16041         lists for longer than required.
16042
16043         This optimization was triggered by Paolo profiling the compiler
16044         speed on the output of `gen-sample-program.pl' perl script. 
16045
16046         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
16047         not crash in methods like MemberLookupFailed that use this field.  
16048
16049         This problem arises when the compiler fails to resolve a type
16050         during interface type definition for example.
16051
16052 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16053
16054         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
16055         inherit from System.Object, so we have to stop at null, not only
16056         when reaching System.Object.
16057
16058 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
16059
16060         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
16061         DeclaredOnly because the parent indexer might have had a different
16062         name, but did not loop until the top of the hierarchy was reached.
16063
16064         The problem this one fixes is 35492: when a class implemented an
16065         indexer from an interface, we were getting the interface method
16066         (which was abstract) and we were flagging an error (can not invoke
16067         abstract method).
16068
16069         This also keeps bug 33089 functioning, and test-148 functioning.
16070
16071         * typemanager.cs (IsSpecialMethod): The correct way of figuring
16072         out if a method is special is to see if it is declared in a
16073         property or event, or whether it is one of the predefined operator
16074         names.   This should fix correctly #36804.
16075
16076 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
16077
16078         The goal here is to remove the dependency on EmptyCast.Peel ().
16079         Killing it completely.
16080
16081         The problem is that currently in a number of places where
16082         constants are expected, we have to "probe" for an EmptyCast, and
16083         Peel, which is not the correct thing to do, as this will be
16084         repetitive and will likely lead to errors. 
16085
16086         The idea is to remove any EmptyCasts that are used in casts that
16087         can be reduced to constants, so we only have to cope with
16088         constants. 
16089
16090         This bug hunt was triggered by Bug 37363 and the desire to remove
16091         the duplicate pattern where we were "peeling" emptycasts to check
16092         whether they were constants.  Now constants will always be
16093         constants.
16094
16095         * ecore.cs: Use an enumconstant here instead of wrapping with
16096         EmptyCast.  
16097
16098         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
16099         throwing me off.  By handling this we can get rid of a few hacks.
16100
16101         * statement.cs (Switch): Removed Peel() code.
16102
16103 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
16104
16105         * class.cs: Location information for error 508
16106
16107         * expression.cs (New.DoResolve): Add a guard against double
16108         resolution of an expression.  
16109
16110         The New DoResolve might be called twice when initializing field
16111         expressions (see EmitFieldInitializers, the call to
16112         GetInitializerExpression will perform a resolve on the expression,
16113         and later the assign will trigger another resolution
16114
16115         This leads to bugs (#37014)
16116
16117         * delegate.cs: The signature for EndInvoke should contain any ref
16118         or out parameters as well.  We were not doing this in the past. 
16119
16120         * class.cs (Field.Define): Do not overwrite the type definition
16121         inside the `volatile' group.  Turns out that volatile enumerations
16122         were changing the type here to perform a validity test, which
16123         broke conversions. 
16124
16125 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
16126
16127         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
16128         and structs, we do not want to load the instance variable
16129
16130         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
16131         enum_type has to be handled like an object reference (implicit
16132         conversions exists from this to object), but the regular IsClass
16133         and IsValueType tests will never return true for this one.
16134
16135         Also we use TypeManager.IsValueType instead of type.IsValueType,
16136         just for consistency with the rest of the code (this is only
16137         needed if we ever use the construct exposed by test-180.cs inside
16138         corlib, which we dont today).
16139
16140 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
16141
16142         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
16143         just InternalCall.
16144
16145 2003-02-09  Martin Baulig  <martin@ximian.com>
16146
16147         * namespace.cs (Namespace..ctor): Added SourceFile argument.
16148         (Namespace.DefineNamespaces): New static public method; this is
16149         called when we're compiling with debugging to add all namespaces
16150         to the symbol file.
16151
16152         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
16153         pass it to the Namespace's .ctor.
16154
16155         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
16156         and MethodBase arguments; pass the namespace ID to the symwriter;
16157         pass the MethodBase instead of the token to the symwriter.
16158         (SymbolWriter.DefineNamespace): New method to add a namespace to
16159         the symbol file.
16160
16161 2003-02-09  Martin Baulig  <martin@ximian.com>
16162
16163         * symbolwriter.cs: New file.  This is a wrapper around
16164         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
16165         methods here in near future.
16166
16167 2003-02-09  Martin Baulig  <martin@ximian.com>
16168
16169         * codegen.cs (EmitContext.Mark): Just pass the arguments to
16170         ILGenerator.MarkSequencePoint() which are actually used by the
16171         symbol writer.
16172
16173 2003-02-09  Martin Baulig  <martin@ximian.com>
16174
16175         * location.cs (SourceFile): New public sealed class.  This
16176         contains the name and an index which is used in the location's token.
16177         (Location): Reserve an appropriate number of bits in the token for
16178         the source file instead of walking over that list, this gives us a
16179         really huge performance improvement when compiling with debugging.
16180
16181         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
16182         `SourceFile' argument instead of a string.
16183         (Driver.ProcessFile): Add all the files via Location.AddFile(),
16184         but don't parse/tokenize here, we need to generate the list of all
16185         source files before we do that.
16186         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
16187         the files.
16188
16189         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
16190         instead of a string.
16191
16192         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
16193         of a string.
16194
16195 2003-02-09  Martin Baulig  <martin@ximian.com>
16196
16197         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
16198         filename on `#line default'.
16199
16200 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
16201
16202         * statement.cs: don't clear the pinned var when the fixed statement
16203         returns from the method (fixes bug#37752).
16204
16205 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
16206
16207         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
16208         to IsValueType.
16209
16210 2003-02-07  Martin Baulig  <martin@ximian.com>
16211
16212         * driver.cs: Removed the `--debug-args' command line argument.
16213
16214         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
16215         automatically by the AsssemblyBuilder.
16216         (CodeGen.InitializeSymbolWriter): We don't need to call any
16217         initialization function on the symbol writer anymore.  This method
16218         doesn't take any arguments.
16219
16220 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
16221
16222         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
16223         from referenced assemblies as well.
16224
16225 2003-02-02  Martin Baulig  <martin@ximian.com>
16226
16227         * class.cs (MethodData.Emit): Generate debugging info for external methods.
16228
16229 2003-02-02  Martin Baulig  <martin@ximian.com>
16230
16231         * class.cs (Constructor.Emit): Open the symbol writer before
16232         emitting the constructor initializer.
16233         (ConstructorInitializer.Emit): Call ec.Mark() to allow
16234         single-stepping through constructor initializers.
16235
16236 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
16237
16238         * class.cs: Handle error 549: do not allow virtual methods in
16239         sealed classes. 
16240
16241 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
16242
16243         * decl.cs: Check access levels when resolving types
16244
16245 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
16246
16247         * statement.cs: Add parameters and locals set in catch blocks that might 
16248         return to set vector
16249
16250 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
16251
16252         * class.cs (Operator): Set the SpecialName flags for operators.
16253
16254         * expression.cs (Invocation.DoResolve): Only block calls to
16255         accessors and operators on SpecialName methods.
16256
16257         (Cast.TryReduce): Handle conversions from char constants.
16258
16259
16260 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
16261
16262         * statement.cs: small memory and time optimization in FlowBranching.
16263
16264 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
16265
16266         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
16267         problem that the last fix but in the other sid (Set).
16268
16269         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
16270         access when there is no indexer in the hierarchy.
16271
16272 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
16273
16274         * class.cs: Combine some if statements.
16275
16276 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16277
16278         * driver.cs: fixed bug #37187.
16279
16280 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
16281
16282         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
16283         any indexer, it's needed to build a list with all the indexers in the
16284         hierarchy (AllGetters), else we have problems. Fixes #35653.
16285
16286 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
16287
16288         * class.cs (MethodData.Define): It is wrong for an interface
16289         implementation to be static in both cases: explicit and implicit.
16290         We were only handling this in one case.
16291
16292         Improve the if situation there to not have negations.
16293
16294         * class.cs (Field.Define): Turns out that we do not need to check
16295         the unsafe bit on field definition, only on usage.  Remove the test.
16296
16297 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16298
16299         * driver.cs: use assembly.Location instead of Codebase (the latest
16300         patch made mcs fail when using MS assemblies).
16301
16302 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
16303
16304         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
16305         get the path to *corlib.dll.
16306
16307 2003-01-21  Nick Drochak <ndrochak@gol.com>
16308
16309         * cs-tokenizer.cs:
16310         * pending.cs:
16311         * typemanager.cs: Remove compiler warnings
16312
16313 2003-01-20  Duncan Mak  <duncan@ximian.com>
16314
16315         * AssemblyInfo.cs: Bump the version number to 0.19.
16316
16317 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16318
16319         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
16320
16321 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
16322
16323         * class.cs (Constructor::Emit): Emit debugging info for constructors.
16324
16325 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
16326
16327         * cs-parser.jay: Small fix: we were not comparing the constructor
16328         name correctly.   Thanks to Zoltan for the initial pointer.
16329
16330 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
16331
16332         * cs-tokenizer.cs: Set file name when specified with #line
16333
16334 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
16335
16336         * cs-parser.jay: Only perform the constructor checks here if we
16337         are named like the class;  This will help provider a better
16338         error.  The constructor path is taken when a type definition is
16339         not found, but most likely the user forgot to add the type, so
16340         report that rather than the constructor error.
16341
16342 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
16343
16344         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
16345         allocations.
16346
16347 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16348
16349         * cs-parser.jay: Add cleanup call.
16350
16351 2003-01-13  Duncan Mak  <duncan@ximian.com>
16352
16353         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
16354         consistent with other methods.
16355
16356 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16357
16358         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
16359
16360 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
16361
16362         * attribute.cs: only set GuidAttr to true when we have a
16363         GuidAttribute.
16364
16365 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16366
16367         * ecore.cs:
16368         * expression.cs:
16369         * typemanager.cs: fixes to allow mcs compile corlib with the new
16370         Type.IsSubclassOf fix.
16371
16372 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
16373
16374         * expression.cs (LocalVariableReference.DoResolve): Classify a
16375         constant as a value, not as a variable.   Also, set the type for
16376         the variable.
16377
16378         * cs-parser.jay (fixed_statement): take a type instead of a
16379         pointer_type, so we can produce a better error message later.
16380
16381         * statement.cs (Fixed.Resolve): Flag types that are not pointers
16382         as an error.  
16383
16384         (For.DoEmit): Make inifinite loops have a
16385         non-conditional branch back.
16386
16387         (Fixed.DoEmit): First populate the pinned variables, then emit the
16388         statement, then clear the variables.  Before I was emitting the
16389         code once for each fixed piece.
16390
16391
16392 2003-01-08  Martin Baulig  <martin@ximian.com>
16393
16394         * statement.cs (FlowBranching.MergeChild): A break in a
16395         SWITCH_SECTION does not leave a loop.  Fixes #36155.
16396
16397 2003-01-08  Martin Baulig  <martin@ximian.com>
16398
16399         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
16400         lives in the same number space than `param_map'.  Fixes #36154.
16401
16402 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
16403
16404         * cs-parser.jay (constructor_declaration): Set the
16405         Constructor.ModFlags before probing for it.  This makes the
16406         compiler report 514, 515 and 132 (the code was there, but got
16407         broken). 
16408
16409         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
16410         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
16411         (GotoCase.Resolve): Set `Returns' to ALWAYS.
16412
16413 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
16414
16415         * enum.cs: create the enum static fields using the enum type.
16416
16417 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
16418
16419         * class.cs: don't try to create the ParamBuilder for the return
16420         type if it's not needed (and handle it breaking for the ms runtime
16421         anyway).
16422
16423 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
16424
16425         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
16426
16427 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
16428
16429         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
16430         the command.   This showed up while compiling the JANET source
16431         code, which used \r as its only newline separator.
16432
16433 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
16434
16435         * class.cs (Method.Define): If we are an operator (because it
16436         reuses our code), then set the SpecialName and HideBySig.  #36128
16437
16438 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
16439
16440         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
16441         exception, report error 120 `object reference required'.
16442
16443         * driver.cs: Add --pause option, used during to measure the size
16444         of the process as it goes with --timestamp.
16445
16446         * expression.cs (Invocation.DoResolve): Do not allow methods with
16447         SpecialName to be invoked.
16448
16449 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
16450
16451         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
16452         number before adding it.
16453
16454 2002-12-21  Ravi Pratap  <ravi@ximian.com>
16455
16456         * ecore.cs (StandardImplicitConversion): When in an unsafe
16457         context, we allow conversion between void * to any other pointer
16458         type. This fixes bug #35973.
16459
16460 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
16461
16462         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16463         is not thrown when extensionless outputs are used 
16464
16465 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16466
16467         * rootcontext.cs: fixed compilation of corlib.
16468
16469 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16470
16471         * attribute.cs (Attributes.Contains): Add new method.
16472
16473         * class.cs (MethodCore.LabelParameters): if the parameter is an
16474         `out' parameter, check that no attribute `[In]' has been passed.
16475
16476         * enum.cs: Handle the `value__' name in an enumeration.
16477
16478 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16479
16480         * decl.cs: Added special case to allow overrides on "protected
16481         internal" methods
16482
16483 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16484
16485         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16486         since it makes much more sense.
16487
16488         (Attributes.ctor): Don't require a Location parameter.
16489
16490         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16491
16492         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16493         since we already have that information per attribute.
16494
16495         * everywhere : make appropriate changes.
16496
16497         * class.cs (LabelParameters): Write the code which actually
16498         applies attributes to the return type. We can't do this on the MS
16499         .NET runtime so we flag a warning in the case an exception is
16500         thrown.
16501
16502 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16503
16504         * const.cs: Handle implicit null conversions here too.
16505
16506 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16507
16508         * class.cs (MethodCore.LabelParameters): Remove the extra
16509         Type [] parameter since it is completely unnecessary. Instead
16510         pass in the method's attributes so that we can extract
16511         the "return" attribute.
16512
16513 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16514
16515         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16516         of ignoring it and letting the compile continue.
16517
16518         * typemanager.cs (ChangeType): use an extra argument to return an
16519         error condition instead of throwing an exception.
16520
16521 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16522
16523         * expression.cs (Unary.TryReduce): mimic the code for the regular
16524         code path.  Perform an implicit cast in the cases where we can
16525         implicitly convert to one of the integral types, and then reduce
16526         based on that constant.   This fixes bug #35483.
16527
16528 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16529
16530         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16531
16532 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16533
16534         * namespace.cs: fixed bug #35489.
16535
16536 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16537
16538         * class.cs: Remove some dead code.
16539
16540         * cs-parser.jay: Estimate the number of methods needed
16541         (RootContext.MethodCount);
16542
16543         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16544         numbers instead of StringBuilders.
16545
16546         * support.cs (PtrHashtable): Add constructor with initial size;
16547         We can now reduce reallocations of the method table.
16548
16549 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16550
16551         * attribute.cs (ApplyAttributes): Keep track of the emitted
16552         attributes on a per-target basis. This fixes bug #35413.
16553
16554 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16555
16556         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16557         default to the Windows 1252 encoding.
16558
16559         (UnixParseOption): Support version, thanks to Alp for the missing
16560         pointer. 
16561
16562         * AssemblyInfo.cs: Add nice assembly information.
16563
16564         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16565         (bug 35169).
16566
16567         * cs-parser.jay: Allow a trailing comma before the close bracked
16568         in the attribute_section production.
16569
16570         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16571         address of the instance was being taken, I will take this out,
16572         because we take the address of the object immediately here.
16573
16574 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16575
16576         * typemanager.cs (AreMultipleAllowed): Take care of the most
16577         obvious case where attribute type is not in the current assembly -
16578         stupid me ;-)
16579
16580 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16581
16582         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16583         definitions, instead of doing that afterwards.  
16584
16585         Also we use a nice little hack, depending on the constructor, we
16586         know if we are a "composed" name or a simple name.  Hence, we
16587         avoid the IndexOf test, and we avoid 
16588
16589         * codegen.cs: Add code to assist in a bug reporter to track down
16590         the source of a compiler crash. 
16591
16592 2002-12-07  Ravi Pratap  <ravi@ximian.com>
16593
16594         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
16595         types have been emitted for a given element and flag an error
16596         if something which does not have AllowMultiple set is used more
16597         than once.
16598
16599         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
16600         attribute types and their corresponding AllowMultiple properties
16601
16602         (AreMultipleAllowed): Check the property for a given type.
16603
16604         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
16605         property in the case we have a TypeContainer.
16606
16607         (Attributes.AddAttribute): Detect duplicates and just skip on
16608         adding them. This trivial fix catches a pretty gross error in our
16609         attribute emission - global attributes were being emitted twice!
16610
16611         Bugzilla bug #33187 is now fixed.
16612
16613 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
16614
16615         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
16616         instead of pp_and).
16617
16618         * expression.cs (Binary.ResolveOperator): I can only use the
16619         Concat (string, string, string) and Concat (string, string,
16620         string, string) if the child is actually a concatenation of
16621         strings. 
16622
16623 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
16624
16625         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
16626         context where we need a 2-character lookahead.
16627
16628         * pending.cs (PendingImplementation): Rework so we can keep track
16629         of interface types all the time, and flag those which were
16630         implemented by parents as optional.
16631
16632 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
16633
16634         * expression.cs (Binary.ResolveOperator): Use
16635         String.Concat(string,string,string) or
16636         String.Concat(string,string,string,string) when possible. 
16637
16638         * typemanager: More helper methods.
16639
16640
16641 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
16642
16643         * pending.cs: remove the bogus return from GetMissingInterfaces()
16644         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
16645
16646 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16647
16648         * namespace.cs: avoid duplicated 'using xxx' being added to
16649         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
16650         when we get more than one 'using' statement for the same namespace.
16651         Report a CS0105 warning for it.
16652
16653 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
16654
16655         * cs-tokenizer.cs (consume_identifier): use read directly, instead
16656         of calling getChar/putback, uses internal knowledge of it.    
16657
16658         (xtoken): Reorder tokenizer so most common patterns are checked
16659         first.  This reduces the compilation time in another 5% (from 8.11s
16660         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
16661
16662         The parsing time is 22% of the compilation in mcs, and from that
16663         64% is spent on the tokenization process.  
16664
16665         I tried using a binary search for keywords, but this is slower
16666         than the hashtable.  Another option would be to do a couple of
16667         things:
16668
16669                 * Not use a StringBuilder, instead use an array of chars,
16670                   with a set value.  Notice that this way we could catch
16671                   the 645 error without having to do it *afterwards*.
16672
16673                 * We could write a hand-parser to avoid the hashtable
16674                   compares altogether.
16675
16676         The identifier consumption process takes 37% of the tokenization
16677         time.  Another 15% is spent on is_number.  56% of the time spent
16678         on is_number is spent on Int64.Parse:
16679
16680                 * We could probably choose based on the string length to
16681                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
16682                   computations. 
16683
16684         Another 3% is spend on wrapping `xtoken' in the `token' function.
16685
16686         Handle 0xa0 as whitespace (#34752)
16687
16688 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
16689
16690         * typemanager.cs (IsCLRType): New routine to tell whether a type
16691         is one of the builtin types.  
16692
16693         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
16694         typecode in more places instead of doing pointer comparissions.
16695         We could leverage some knowledge about the way the typecodes are
16696         laid out.
16697
16698         New code to cache namespaces in assemblies, it is currently not
16699         invoked, to be used soon.
16700
16701         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
16702
16703         * expression.cs (Binary.ResolveOperator): specially handle
16704         strings, and do not perform user-defined operator overloading for
16705         built-in types.
16706
16707 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
16708
16709         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
16710         internalcall as it is a pretty simple operation;  Avoid whenever
16711         possible to call Char.IsLetter.
16712
16713         (consume_identifier): Cut by half the number of
16714         hashtable calls by merging the is_keyword and GetKeyword behavior.
16715
16716         Do not short-circuit, because if we do, we
16717         report errors (ie, #if false && true would produce an invalid
16718         directive error);
16719
16720
16721 2002-11-24  Martin Baulig  <martin@ximian.com>
16722
16723         * expression.cs (Cast.TryReduce): If we're in checked syntax,
16724         check constant ranges and report a CS0221.  Fixes #33186.
16725
16726 2002-11-24  Martin Baulig  <martin@ximian.com>
16727
16728         * cs-parser.jay: Make this work for uninitialized variable
16729         declarations in the `for' initializer.  Fixes #32416.
16730
16731 2002-11-24  Martin Baulig  <martin@ximian.com>
16732
16733         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
16734         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
16735
16736 2002-11-24  Martin Baulig  <martin@ximian.com>
16737
16738         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
16739         argument; if true, we also check for user-defined conversions.
16740         This is only needed if both arguments are of a user-defined type.
16741         Fixes #30443, added test-175.cs.
16742         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
16743
16744         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
16745
16746 2002-11-24  Martin Baulig  <martin@ximian.com>
16747
16748         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
16749         function to get the store opcode.
16750         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
16751         only emit the Ldelema if the store opcode is Stobj.  You must run
16752         both test-34 and test-167 to test this.  Fixes #34529.
16753
16754 2002-11-23  Martin Baulig  <martin@ximian.com>
16755
16756         * ecore.cs (Expression.MemberLookup): Added additional
16757         `qualifier_type' argument which is used when we're being called
16758         from MemberAccess.DoResolve() and null if we're called from a
16759         SimpleName lookup.
16760         (Expression.MemberLookupFailed): New method to report errors; this
16761         does the CS1540 check and reports the correct error message.
16762
16763         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
16764         argument for the CS1540 check and redone the way how we're dealing
16765         with private members.  See the comment in the source code for details.
16766         (FilterWithClosure): Reverted this back to revision 1.197; renamed
16767         `closure_start_type' to `closure_qualifier_type' and check whether
16768         it's not null.  It was not this filter being broken, it was just
16769         being called with the wrong arguments.
16770
16771         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
16772         and pass it the correct `qualifier_type'; this also does the error
16773         handling for us.
16774
16775 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
16776
16777         * expression.cs (Invocation.EmitParams): If the we are dealing
16778         with a non-built-in value type, load its address as well.
16779
16780         (ArrayCreation): Use a a pretty constant instead
16781         of the hardcoded value 2.   Use 6 instead of 2 for the number of
16782         static initializers.  
16783
16784         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
16785         because they are not really value types, just glorified integers. 
16786
16787         * driver.cs: Do not append .exe, the CSC compiler does not do it.
16788
16789         * ecore.cs: Remove redundant code for enumerations, make them use
16790         the same code path as everything else, fixes the casting issue
16791         with enumerations in Windows.Forms.
16792
16793         * attribute.cs: Do only cast to string if it is a string, the
16794         validation happens later.
16795
16796         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
16797         people upgrade their corlibs.
16798
16799         * ecore.cs: Oops, enumerations were not following the entire code path
16800
16801 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
16802
16803         * typemanager.cs (FilterWithClosure): Commented out the test for
16804         1540 in typemanager.cs, as it has problems when accessing
16805         protected methods from a parent class (see test-174.cs). 
16806
16807         * attribute.cs (Attribute.ValidateGuid): new method.
16808         (Attribute.Resolve): Use above.
16809
16810 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
16811
16812         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
16813
16814         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
16815         handling for enumerations, as we only needed the TypeContainer
16816         functionality to begin with (this is required for the fix below to
16817         work for enums that reference constants in a container class for
16818         example). 
16819
16820         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
16821
16822         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
16823         a valid TypeBuilder to perform lookups on.o
16824
16825         * class.cs (InheritableMemberSignatureCompare): Use true in the
16826         call to GetGetMethod and GetSetMethod, because we are comparing
16827         the signature, and we need to get the methods *even* if they are
16828         private. 
16829
16830         (PropertyBase.CheckBase): ditto.
16831
16832         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
16833         GotoCase.Resolve): Use Peel on EmpytCasts.
16834
16835         * ecore.cs (EmptyCast): drop child, add Peel method.
16836
16837 2002-11-17  Martin Baulig  <martin@ximian.com>
16838
16839         * ecore.cs (EmptyCast.Child): New public property.
16840
16841         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
16842         label resolved to an EmptyCast.  Fixes #34162.
16843         (GotoCase.Resolve): Likewise.
16844         (Block.EmitMeta): Likewise.
16845
16846 2002-11-17  Martin Baulig  <martin@ximian.com>
16847
16848         * expression.cs (Invocation.BetterConversion): Prefer int over
16849         uint; short over ushort; long over ulong for integer literals.
16850         Use ImplicitConversionExists instead of StandardConversionExists
16851         since we also need to check for user-defined implicit conversions.
16852         Fixes #34165.  Added test-173.cs.
16853
16854 2002-11-16  Martin Baulig  <martin@ximian.com>
16855
16856         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
16857         with the `true' and `false' literals.  Fixes #33151.
16858
16859 2002-11-16  Martin Baulig  <martin@ximian.com>
16860
16861         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
16862         October 22nd; don't do the cs1540 check for static members.
16863
16864         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
16865         now using our own filter here and doing the cs1540 check again.
16866
16867 2002-11-16  Martin Baulig  <martin@ximian.com>
16868
16869         * support.cs (InternalParameters): Don't crash if we don't have
16870         any fixed parameters.  Fixes #33532.
16871
16872 2002-11-16  Martin Baulig  <martin@ximian.com>
16873
16874         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
16875         when looking up static methods to make this work on Windows.
16876         Fixes #33773.
16877
16878 2002-11-16  Martin Baulig  <martin@ximian.com>
16879
16880         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
16881         a setter rather than using PropertyInfo.CanWrite.
16882
16883 2002-11-15  Nick Drochak  <ndrochak@gol.com>
16884
16885         * class.cs: Allow acces to block member by subclasses. Fixes build
16886         breaker.
16887
16888 2002-11-14  Martin Baulig  <martin@ximian.com>
16889
16890         * class.cs (Constructor.Emit): Added the extern/block check.
16891         Fixes bug #33678.
16892
16893 2002-11-14  Martin Baulig  <martin@ximian.com>
16894
16895         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
16896         iteration while looking for indexers, this is needed because the
16897         indexer may have a different name in our base classes.  Fixed the
16898         error reporting (no indexers at all, not get accessor, no
16899         overloaded match).  Fixes bug #33089.
16900         (IndexerAccess.DoResolveLValue): Likewise.
16901
16902 2002-11-14  Martin Baulig  <martin@ximian.com>
16903
16904         * class.cs (PropertyBase.CheckBase): Make this work for multiple
16905         indexers.  Fixes the first part of bug #33089.
16906         (MethodSignature.InheritableMemberSignatureCompare): Added support
16907         for properties.
16908
16909 2002-11-13  Ravi Pratap  <ravi@ximian.com>
16910
16911         * attribute.cs (Attribute.Resolve): Catch the
16912         NullReferenceException and report it since it isn't supposed to
16913         happen. 
16914
16915 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
16916
16917         * expression.cs (Binary.EmitBranchable): Also handle the cases for
16918         LogicalOr and LogicalAnd that can benefit from recursively
16919         handling EmitBranchable.  The code now should be nice for Paolo.
16920
16921 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
16922
16923         * typemanager.cs (LookupType): Added a negative-hit hashtable for
16924         the Type lookups, as we perform quite a number of lookups on
16925         non-Types.  This can be removed once we can deterministically tell
16926         whether we have a type or a namespace in advance.
16927
16928         But this might require special hacks from our corlib.
16929
16930         * TODO: updated.
16931
16932         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
16933         and double which avoids a conversion from an integer to a double.
16934
16935         * expression.cs: tiny optimization, avoid calling IsConstant,
16936         because it effectively performs the lookup twice.
16937
16938 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
16939
16940         But a bogus return here to keep the semantics of the old code
16941         until the Mono runtime is fixed.
16942
16943         * pending.cs (GetMissingInterfaces): New method used to remove all
16944         the interfaces that are already implemented by our parent
16945         classes from the list of pending methods. 
16946
16947         * interface.cs: Add checks for calls after ResolveTypeExpr.
16948
16949 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
16950
16951         * class.cs (Class.Emit): Report warning 67: event not used if the
16952         warning level is beyond 3.
16953
16954         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
16955         being a NullLiteral.
16956
16957         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
16958         specifiers. 
16959
16960         * class.cs (TypeContainer.GetClassBases): Cover a missing code
16961         path that might fail if a type can not be resolved.
16962
16963         * expression.cs (Binary.Emit): Emit unsigned versions of the
16964         operators. 
16965
16966         * driver.cs: use error 5.
16967
16968 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
16969
16970         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
16971
16972 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
16973
16974         * cs-parser.jay (switch_section): A beautiful patch from Martin
16975         Baulig that fixed 33094.
16976
16977 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
16978
16979         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
16980         Check whether the base is abstract and report an error if so.
16981
16982         * expression.cs (IndexerAccess.DoResolveLValue,
16983         IndexerAccess.DoResolve): ditto. 
16984
16985         (Invocation.DoResolve): ditto.
16986
16987         (Invocation.FullMethodDesc): Improve the report string.
16988
16989         * statement.cs (Block): Eliminate IsVariableDefined as it is
16990         basically just a wrapper for GetVariableInfo.
16991
16992         * ecore.cs (SimpleName): Use new 
16993
16994         * support.cs (ReflectionParamter.ParameterType): We unwrap the
16995         type, as we return the actual parameter ref/unref state on a
16996         different call.
16997
16998 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
16999
17000         * support.cs: Return proper flags REF/OUT fixing the previous
17001         commit.  
17002
17003         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
17004         not used to mean `ref' but `ref or out' in ParameterReference
17005
17006         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
17007         full type signature instead of calling TypeManger.CSharpName
17008         ourselves. 
17009
17010         * support.cs (InternalParameters.ParameterDesc): Do not compare
17011         directly to the modflags, because REF/OUT will actually be bitsets
17012         if set. 
17013
17014         * delegate.cs (VerifyMethod): Check also the modifiers.
17015
17016         * cs-tokenizer.cs: Fix bug where floating point values with an
17017         exponent where a sign was missing was ignored.
17018
17019         * driver.cs: Allow multiple assemblies to be specified in a single
17020         /r: argument
17021
17022 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
17023
17024         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
17025         because identifiers after a parenthesis would end up in this kind
17026         of production, and we needed to desamiguate it for having casts
17027         like:
17028
17029                 (UserDefinedType *) xxx
17030
17031 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
17032
17033         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
17034         we should set on the Bindingflags.NonPublic, but not turn on
17035         private_ok.  private_ok controls whether a Private member is
17036         returned (this is chekced on the filter routine), while the
17037         BindingFlags.NonPublic just controls whether private/protected
17038         will be allowed.   This fixes the problem part of the problem of
17039         private properties being allowed to be used in derived classes.
17040
17041         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
17042         so we can call the children DoResolveLValue method (this will
17043         properly signal errors on lvalue assignments to base properties)
17044
17045         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
17046         getter are null, and we have a property info, we know that this
17047         happened because the lookup failed, so we report an error 122 for
17048         protection level violation.
17049
17050         We also silently return if setter and getter are null in the
17051         resolve functions, this condition only happens if we have flagged
17052         the error before.  This is the other half of the problem. 
17053
17054         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
17055         not have accessibility information, that is why we were returning
17056         true in the filter function in typemanager.cs.
17057
17058         To properly report 122 (property is inaccessible because of its
17059         protection level) correctly, we report this error in ResolveAccess
17060         by failing if both the setter and the getter are lacking (ie, the
17061         lookup failed). 
17062
17063         DoResolve and DoLResolve have been modified to check for both
17064         setter/getter being null and returning silently, the reason being
17065         that I did not want to put the knowledge about this error in upper
17066         layers, like:
17067
17068         int old = Report.Errors;
17069         x = new PropertyExpr (...);
17070         if (old != Report.Errors)
17071                 return null;
17072         else
17073                 return x;
17074
17075         So the property expr is returned, but it is invalid, so the error
17076         will be flagged during the resolve process. 
17077
17078         * class.cs: Remove InheritablePropertySignatureCompare from the
17079         class, as we no longer depend on the property signature to compute
17080         whether it is possible to implement a method or not.
17081
17082         The reason is that calling PropertyInfo.GetGetMethod will return
17083         null (in .NET, in Mono it works, and we should change this), in
17084         cases where the Get Method does not exist in that particular
17085         class.
17086
17087         So this code:
17088
17089         class X { public virtual int A { get { return 1; } } }
17090         class Y : X { }
17091         class Z : Y { public override int A { get { return 2; } } }
17092
17093         Would fail in Z because the parent (Y) would not have the property
17094         defined.  So we avoid this completely now (because the alternative
17095         fix was ugly and slow), and we now depend exclusively on the
17096         method names.
17097
17098         (PropertyBase.CheckBase): Use a method-base mechanism to find our
17099         reference method, instead of using the property.
17100
17101         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
17102         routines are gone now.
17103
17104         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
17105         names, they were incorrectly named.
17106
17107         * cs-tokenizer.cs: Return are more gentle token on failure. 
17108
17109         * pending.cs (PendingImplementation.InterfaceMethod): This routine
17110         had an out-of-sync index variable, which caused it to remove from
17111         the list of pending methods the wrong method sometimes.
17112
17113 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
17114
17115         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
17116         CanWrite, because those refer to this particular instance of the
17117         property, and do not take into account the fact that we can
17118         override single members of a property.
17119
17120         Constructor requires an EmitContext.  The resolution process does
17121         not happen here, but we need to compute the accessors before,
17122         because the resolution does not always happen for properties.
17123
17124         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
17125         subclass, before we did not update this flag, but we did update
17126         bindingflags. 
17127
17128         (GetAccessors): Drop this routine, as it did not work in the
17129         presence of partially overwritten set/get methods. 
17130
17131         Notice that this broke the cs1540 detection, but that will require
17132         more thinking. 
17133
17134 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17135
17136         * class.cs:
17137         * codegen.cs:
17138         * driver.cs: issue a warning instead of an error if we don't support
17139         debugging for the platform. Also ignore a couple of errors that may
17140         arise when trying to write the symbols. Undo my previous patch.
17141
17142 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17143
17144         * driver.cs: ignore /debug switch except for Unix platforms.
17145
17146 2002-10-23  Nick Drochak  <ndrochak@gol.com>
17147
17148         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
17149
17150 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
17151
17152         * driver.cs: Do not make mcs-debug conditional, so we do not break
17153         builds that use it.
17154
17155         * statement.cs (UsageVector.MergeChildren): I would like Martin to
17156         review this patch.  But basically after all the children variables
17157         have been merged, the value of "Breaks" was not being set to
17158         new_breaks for Switch blocks.  I think that it should be set after
17159         it has executed.  Currently I set this to the value of new_breaks,
17160         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
17161         conservative, but I do not understand this code very well.
17162
17163         I did not break anything in the build, so that is good ;-)
17164
17165         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
17166
17167 2002-10-20  Mark Crichton  <crichton@gimp.org>
17168
17169         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
17170
17171 2002-10-20  Nick Drochak  <ndrochak@gol.com>
17172
17173         * cfold.cs: Fixed compile blocker.
17174
17175 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
17176
17177         * driver.cs: I was chekcing the key, not the file.
17178
17179 2002-10-19  Ravi Pratap  <ravi@ximian.com>
17180
17181         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
17182         message that we were generating - we just need to silently return
17183         a null.
17184
17185 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
17186
17187         * class.cs (Event.Define): Change my previous commit, as this
17188         breaks the debugger.  This is a temporary hack, as it seems like
17189         the compiler is generating events incorrectly to begin with.
17190
17191         * expression.cs (Binary.ResolveOperator): Added support for 
17192         "U operator - (E x, E y)"
17193
17194         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
17195         y)".
17196
17197         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
17198         init-only variables, but this path did not take into account that
17199         there might be also instance readonly variables.  Correct this
17200         problem. 
17201
17202         This fixes bug 32253
17203
17204         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
17205         delegates as well.
17206
17207         * driver.cs: Change the extension for modules to `netmodule'
17208
17209         * cs-parser.jay: Improved slightly the location tracking for
17210         the debugger symbols.
17211
17212         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
17213         modifiers that were specified instead of the hardcoded value
17214         (FamAndAssem).  This was basically ignoring the static modifier,
17215         and others.  Fixes 32429.
17216
17217         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
17218         fixed a bug in the process (32476)
17219
17220         * expression.cs (ArrayAccess.EmitAssign): Patch from
17221         hwang_rob@yahoo.ca that fixes bug 31834.3
17222
17223 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
17224
17225         * driver.cs: Make the module extension .netmodule.
17226
17227 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
17228
17229         * driver.cs: Report an error if the resource file is not found
17230         instead of crashing.
17231
17232         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
17233         false, like Emit does.
17234
17235 2002-10-16  Nick Drochak  <ndrochak@gol.com>
17236
17237         * typemanager.cs: Remove unused private member.  Also reported mcs
17238         bug to report this as a warning like csc.
17239
17240 2002-10-15  Martin Baulig  <martin@gnome.org>
17241
17242         * statement.cs (Statement.Emit): Made this a virtual method; emits
17243         the line number info and calls DoEmit().
17244         (Statement.DoEmit): New protected abstract method, formerly knows
17245         as Statement.Emit().
17246
17247         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
17248
17249 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
17250
17251         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
17252         have fixed a remaining problem: not every AddXXXX was adding a
17253         fully qualified name.  
17254
17255         Now everyone registers a fully qualified name in the DeclSpace as
17256         being defined instead of the partial name.  
17257
17258         Downsides: we are slower than we need to be due to the excess
17259         copies and the names being registered this way.  
17260
17261         The reason for this is that we currently depend (on the corlib
17262         bootstrap for instance) that types are fully qualified, because
17263         we dump all the types in the namespace, and we should really have
17264         types inserted into the proper namespace, so we can only store the
17265         basenames in the defined_names array.
17266
17267 2002-10-10  Martin Baulig  <martin@gnome.org>
17268
17269         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
17270         from bug #31834, see the bug report for a testcase which is
17271         miscompiled.
17272
17273 2002-10-10  Martin Baulig  <martin@gnome.org>
17274
17275         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
17276         flow analysis code for this.
17277
17278         * statement.cs (Do, While, For): Tell the flow analysis code about
17279         infinite loops.
17280         (FlowBranching.UsageVector): Added support for infinite loops.
17281         (Block.Resolve): Moved the dead code elimination here and use flow
17282         analysis to do it.
17283
17284 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
17285
17286         * class.cs (Field.Define): Catch cycles on struct type
17287         definitions. 
17288
17289         * typemanager.cs (IsUnmanagedtype): Do not recursively check
17290         fields if the fields are static.  We only need to check instance
17291         fields. 
17292
17293         * expression.cs (As.DoResolve): Test for reference type.
17294
17295         * statement.cs (Using.ResolveExpression): Use
17296         ConvertImplicitRequired, not ConvertImplicit which reports an
17297         error on failture
17298         (Using.ResolveLocalVariableDecls): ditto.
17299
17300         * expression.cs (Binary.ResolveOperator): Report errors in a few
17301         places where we had to.
17302
17303         * typemanager.cs (IsUnmanagedtype): Finish implementation.
17304
17305 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
17306
17307         * expression.cs: Use StoreFromPtr instead of extracting the type
17308         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
17309
17310         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
17311         an enumeration value to a System.Enum, but System.Enum is not a
17312         value type, but an class type, so we need to box.
17313
17314         (Expression.ConvertExplicit): One codepath could return
17315         errors but not flag them.  Fix this.  Fixes #31853
17316
17317         * parameter.cs (Resolve): Do not allow void as a parameter type.
17318
17319 2002-10-06  Martin Baulig  <martin@gnome.org>
17320
17321         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
17322         if it's a class type and not a struct.  Fixes #31815.
17323
17324 2002-10-06  Martin Baulig  <martin@gnome.org>
17325
17326         * statement.cs: Reworked the flow analysis code a bit to make it
17327         usable for dead code elimination.
17328
17329 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17330
17331         * cs-parser.jay: allow empty source files. Fixes bug #31781.
17332
17333 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17334
17335         * expression.cs (ComposedCast.DoResolveType): A quick workaround
17336         to fix the test 165, will investigate deeper.
17337
17338 2002-10-04  Martin Baulig  <martin@gnome.org>
17339
17340         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
17341         finally blocks actually work.
17342         (Try.Resolve): We don't need to create a sibling for `finally' if
17343         there is no finally block.
17344
17345 2002-10-04  Martin Baulig  <martin@gnome.org>
17346
17347         * class.cs (Constructor.Define): The default accessibility for a
17348         non-default constructor is private, not public.
17349
17350 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17351
17352         * class.cs (Constructor): Make AllowedModifiers public, add
17353         EXTERN.
17354
17355         * cs-parser.jay: Perform the modifiers test here, as the
17356         constructor for the Constructor class usually receives a zero
17357         because of the way we create it (first we create, later we
17358         customize, and we were never checking the modifiers).
17359
17360         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
17361         is a version of LookupTypeReflection that includes the type-name
17362         cache.  This can be used as a fast path for functions that know
17363         the fully qualified name and are only calling into *.GetType() to
17364         obtain a composed type.
17365
17366         This is also used by TypeManager.LookupType during its type
17367         composition.
17368
17369         (LookupType): We now also track the real type name, as sometimes
17370         we can get a quey for the real type name from things like
17371         ComposedCast.  This fixes bug 31422.
17372
17373         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
17374         complete type fullname, it does not have to go through the type
17375         resolution system to obtain the composed version of the type (for
17376         obtaining arrays or pointers).
17377
17378         (Conditional.Emit): Use the EmitBoolExpression to
17379         generate nicer code, as requested by Paolo.
17380
17381         (ArrayCreation.CheckIndices): Use the patch from
17382         hwang_rob@yahoo.ca to validate the array initializers. 
17383
17384 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
17385
17386         * class.cs (ConstructorInitializer.Emit): simplify code by using
17387         Invocation.EmitCall, and at the same time, fix the bugs in calling
17388         parent constructors that took variable arguments. 
17389
17390         * ecore.cs (Expression.ConvertNumericExplicit,
17391         Expression.ImplicitNumericConversion): Remove the code that
17392         manually wrapped decimal (InternalTypeConstructor call is now gone
17393         as well).
17394
17395         * expression.cs (Cast.TryReduce): Also handle decimal types when
17396         trying to perform a constant fold on the type.
17397
17398         * typemanager.cs (IsUnmanagedtype): Partially implemented.
17399
17400         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
17401         that only turned off an error report, and did nothing else. 
17402
17403 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
17404
17405         * driver.cs: Handle and ignore /fullpaths
17406
17407 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
17408
17409         * expression.cs (Binary.ResolveOperator): Catch the case where
17410         DoNumericPromotions returns true, 
17411
17412         (Binary.DoNumericPromotions): Simplify the code, and the tests.
17413
17414 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
17415
17416         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
17417         report error 70.
17418
17419 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
17420
17421         * ecore.cs (ConvertNumericExplicit): It is not enough that the
17422         conversion exists, but it is also required that the conversion be
17423         performed.  This manifested in "(Type64Enum) 2".  
17424
17425         * class.cs (TypeManager.AddMethod): The fix is not to change
17426         AddEnum, because that one was using a fully qualified name (every
17427         DeclSpace derivative does), but to change the AddMethod routine
17428         that was using an un-namespaced name.  This now correctly reports
17429         the duplicated name.
17430
17431         Revert patch until I can properly fix it.  The issue
17432         is that we have a shared Type space across all namespaces
17433         currently, which is wrong.
17434
17435         Options include making the Namespace a DeclSpace, and merge
17436         current_namespace/current_container in the parser.
17437
17438 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
17439
17440         * cs-parser.jay: Improve error reporting when we get a different
17441         kind of expression in local_variable_type and
17442         local_variable_pointer_type. 
17443
17444         Propagate this to avoid missleading errors being reported.
17445
17446         * ecore.cs (ImplicitReferenceConversion): treat
17447         TypeManager.value_type as a target just like object_type.   As
17448         code like this:
17449
17450         ValueType v = 1;
17451
17452         Is valid, and needs to result in the int 1 being boxed before it
17453         is assigned to the value type v.
17454
17455         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
17456         to validate the enumeration name.
17457
17458         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
17459         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
17460         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
17461
17462         * ecore.cs (TryImplicitIntConversion): When doing an
17463         implicit-enumeration-conversion, check if the type is 64-bits and
17464         perform a conversion before passing to EnumConstant.
17465
17466 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17467
17468         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17469         report ambiguous type references.  Unlike the MS version, we
17470         report what the ambiguity is.   Innovation at work ;-)
17471
17472         (DeclSpace.FindType): Require a location argument to
17473         display when we display an ambiguous error.
17474
17475         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17476
17477         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17478
17479         * expression.cs (EmitDynamicInitializers): Apply patch from
17480         hwang_rob@yahoo.ca that fixes the order in which we emit our
17481         initializers. 
17482
17483 2002-09-21  Martin Baulig  <martin@gnome.org>
17484
17485         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17486         delegate takes no arguments.
17487
17488 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17489
17490         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17491         from integers.
17492
17493         * expression.cs: Extract the underlying type.
17494
17495         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17496
17497         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17498
17499 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17500
17501         * class.cs (TypeContainer.DefineType): We can not use the nice
17502         PackingSize with the size set to 1 DefineType method, because it
17503         will not allow us to define the interfaces that the struct
17504         implements.
17505
17506         This completes the fixing of bug 27287
17507
17508         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17509         means also structs.  This fixes part of the problem. 
17510         (Expresion.ImplicitReferenceConversionExists): ditto.
17511
17512         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17513         error if there were no errors reported during the type lookup
17514         process, to avoid duplicates or redundant errors.  Without this
17515         you would get an ambiguous errors plus a type not found.  We have
17516         beaten the user enough with the first error.  
17517
17518         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17519         reference. 
17520
17521         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17522         during the resolution process, stop the lookup, this avoids
17523         repeated error reports (same error twice).
17524
17525         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17526
17527         * typemanager.cs (LookupType): Redo the type lookup code to match
17528         the needs of System.Reflection.  
17529
17530         The issue is that System.Reflection requires references to nested
17531         types to begin with a "+" sign instead of a dot.  So toplevel
17532         types look like: "NameSpace.TopLevelClass", and nested ones look
17533         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17534         levels. 
17535
17536 2002-09-19  Martin Baulig  <martin@gnome.org>
17537
17538         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17539         says that a method always returns or always throws an exception,
17540         don't report the CS0161.
17541
17542         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17543         set `Returns = new_returns'.
17544
17545 2002-09-19  Martin Baulig  <martin@gnome.org>
17546
17547         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17548         to an enum constant, check for a CS0176.
17549
17550 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17551
17552         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17553         for operators that must be in pairs and report errors.
17554
17555         * ecore.cs (SimpleName.DoResolveType): During the initial type
17556         resolution process, when we define types recursively, we must
17557         check first for types in our current scope before we perform
17558         lookups in the enclosing scopes.
17559
17560         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17561
17562         (Invocation.VerifyArgumentsCompat): Call
17563         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17564         I thought we were supposed to always call this, but there are a
17565         few places in the code where we dont do it.
17566
17567 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17568
17569         * driver.cs: Add support in -linkres and -resource to specify the
17570         name of the identifier.
17571
17572 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17573
17574         * ecore.cs (StandardConversionExists): Sync with the conversion
17575         code: allow anything-* to void* conversions.
17576
17577         (FindMostSpecificSource): Use an Expression argument
17578         instead of a Type, because we might be handed over a Literal which
17579         gets a few more implicit conversions that plain types do not.  So
17580         this information was being lost.
17581
17582         Also, we drop the temporary type-holder expression when not
17583         required.
17584
17585 2002-09-17  Martin Baulig  <martin@gnome.org>
17586
17587         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17588         this is an explicit interface implementation.
17589
17590 2002-09-17  Martin Baulig  <martin@gnome.org>
17591
17592         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
17593         different `IndexerName' attributes.
17594
17595         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
17596         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
17597         virtual CommonResolve().
17598
17599 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17600
17601         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
17602         and convert that to the UnderlyingType.
17603
17604         * statement.cs (Foreach.Resolve): Indexers are just like variables
17605         or PropertyAccesses.
17606
17607         * cs-tokenizer.cs (consume_string): Track line numbers and columns
17608         inside quoted strings, we were not doing this before.
17609
17610 2002-09-16  Martin Baulig  <martin@gnome.org>
17611
17612         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
17613         resolve it.  This is needed for the definite assignment check of the
17614         instance expression, fixes bug #29846.
17615         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
17616
17617 2002-09-16  Nick Drochak  <ndrochak@gol.com>
17618
17619         * parameter.cs: Fix compile error.  Cannot reference static member
17620         from an instance object.  Is this an mcs bug?
17621
17622 2002-09-14  Martin Baulig  <martin@gnome.org>
17623
17624         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
17625         multiple times.  Fixes bug #30295, added test-166.cs.
17626
17627 2002-09-14  Martin Baulig  <martin@gnome.org>
17628
17629         * statement.cs (Block.Emit): Don't emit unreachable code.
17630         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
17631         `break' statements.
17632         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
17633
17634 2002-09-14  Martin Baulig  <martin@gnome.org>
17635
17636         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
17637         is set.
17638
17639 2002-09-14  Martin Baulig  <martin@gnome.org>
17640
17641         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
17642         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
17643         be false on the ms runtime.
17644
17645 2002-09-13  Martin Baulig  <martin@gnome.org>
17646
17647         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
17648         the CS0038 error message.
17649
17650 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
17651
17652         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
17653         constant inside, return it.
17654
17655 2002-09-12  Martin Baulig  <martin@gnome.org>
17656
17657         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
17658         implicit conversion can be done between enum types.
17659
17660         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
17661         check whether an implicit conversion to the current enum's UnderlyingType
17662         exists and report an error if not.
17663
17664         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
17665         without debugging support.
17666
17667         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
17668         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
17669
17670 2002-09-12  Martin Baulig  <martin@gnome.org>
17671
17672         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
17673
17674         * ecore.cs (IMemberExpr.DeclaringType): New property.
17675         (SimpleName.SimpleNameResolve): Check whether we're accessing a
17676         nonstatic member of an outer type (CS0038).
17677
17678 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
17679
17680         * driver.cs: Activate the using-error detector at warning level
17681         4 (at least for MS-compatible APIs).
17682
17683         * namespace.cs (VerifyUsing): Small buglett fix.
17684
17685         * pending.cs (PendingImplementation): pass the container pointer. 
17686
17687         * interface.cs (GetMethods): Allow for recursive definition.  Long
17688         term, I would like to move every type to support recursive
17689         definitions, not the current ordering mechanism that we have right
17690         now.
17691
17692         The situation is this: Attributes are handled before interfaces,
17693         so we can apply attributes to interfaces.  But some attributes
17694         implement interfaces, we will now handle the simple cases
17695         (recursive definitions will just get an error).  
17696
17697         * parameter.cs: Only invalidate types at the end if we fail to
17698         lookup all types.  
17699
17700 2002-09-09  Martin Baulig  <martin@gnome.org>
17701
17702         * ecore.cs (PropertyExpr.Emit): Also check for
17703         TypeManager.system_int_array_get_length so this'll also work when
17704         compiling corlib.  Fixes #30003.
17705
17706 2002-09-09  Martin Baulig  <martin@gnome.org>
17707
17708         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
17709         and throw an exception if we can't get the type's size.  Fixed #30040,
17710         added test-165.cs.
17711
17712 2002-09-09  Martin Baulig  <martin@gnome.org>
17713
17714         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
17715
17716         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
17717         context.  Fixes bug #30027.
17718
17719         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
17720         virtual functions.  Fixes bug #30043, added test-164.cs.
17721
17722 2002-09-08  Ravi Pratap  <ravi@ximian.com>
17723
17724         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
17725
17726 2002-09-08  Nick Drochak  <ndrochak@gol.com>
17727
17728         * driver.cs: Use an object to get the windows codepage since it's not a
17729         static property.
17730
17731 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
17732
17733         * statement.cs (For.Emit): for infinite loops (test == null)
17734         return whether there is a break inside, not always "true".
17735
17736         * namespace.cs (UsingEntry): New struct to hold the name of the
17737         using definition, the location where it is defined, and whether it
17738         has been used in a successful type lookup.
17739
17740         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
17741         strings.
17742
17743         * decl.cs: ditto.
17744
17745 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17746
17747         * attribute.cs : Fix incorrect code which relied on catching
17748         a NullReferenceException to detect a null being passed in
17749         where an object was expected.
17750
17751 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
17752
17753         * statement.cs (Try): flag the catch variable as assigned
17754
17755         * expression.cs (Cast): Simplified by using ResolveType instead of
17756         manually resolving.
17757
17758         * statement.cs (Catch): Fix bug by using ResolveType.
17759
17760 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17761
17762         * expression.cs (BetterConversion): Special case for when we have
17763         a NullLiteral as the argument and we have to choose between string
17764         and object types - we choose string the way csc does.
17765
17766         * attribute.cs (Attribute.Resolve): Catch the
17767         NullReferenceException and report error #182 since the Mono
17768         runtime no more has the bug and having this exception raised means
17769         we tried to select a constructor which takes an object and is
17770         passed a null.
17771
17772 2002-09-05  Ravi Pratap  <ravi@ximian.com>
17773
17774         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
17775         message (1502, 1503) when we can't locate a method after overload
17776         resolution. This is much more informative and closes the bug
17777         Miguel reported.
17778
17779         * interface.cs (PopulateMethod): Return if there are no argument
17780         types. Fixes a NullReferenceException bug.
17781
17782         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
17783         expressions too. Previously we were checking only in one place for
17784         positional arguments leaving out named arguments.
17785
17786         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
17787         type to the enum type is not allowed. Remove code corresponding to
17788         that.
17789
17790         (ConvertNumericExplicit): Allow explicit conversions from
17791         the underlying type to enum type. This precisely follows the spec
17792         and closes a bug filed by Gonzalo.
17793
17794 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17795
17796         * compiler.csproj:
17797         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
17798
17799 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
17800
17801         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
17802         it was important that we stored the right value after the
17803         reduction in `converted'.
17804
17805 2002-09-04  Martin Baulig  <martin@gnome.org>
17806
17807         * location.cs (Location.SymbolDocument): Use full pathnames for the
17808         source files.
17809
17810 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
17811
17812         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
17813         of the expression resolve mechanism, because that will catch the
17814         SimpleName error failures.
17815
17816         (Conditional): If we can not resolve the
17817         expression, return, do not crash.
17818
17819 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17820
17821         * cs-tokenizer.cs:
17822         (location): display token name instead of its number.
17823
17824 2002-08-28  Martin Baulig  <martin@gnome.org>
17825
17826         * expression.cs (Binary.ResolveOperator): Don't silently return
17827         but return an error if an operator cannot be applied between two
17828         enum types.
17829
17830 2002-08-28  Martin Baulig  <martin@gnome.org>
17831
17832         * class.cs (Constructor.Define): Set the permission attributes
17833         correctly instead of making all constructors public.
17834
17835 2002-08-28  Martin Baulig  <martin@gnome.org>
17836
17837         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
17838         for private members before reporting a CS0103; if we find anything,
17839         it's a CS0122.
17840
17841 2002-08-28  Martin Baulig  <martin@gnome.org>
17842
17843         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
17844         to check whether `closure_start_type == closure_invocation_type',
17845         we also need to check whether `m.DeclaringType == closure_invocation_type'
17846         before bypassing the permission checks.  We might be accessing
17847         protected/private members from the base class.
17848         (TypeManager.RealMemberLookup): Only set private_ok if private
17849         members were requested via BindingFlags.NonPublic.
17850
17851         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
17852
17853         * expression.cs (MemberAccess.ResolveMemberAccess): Set
17854         MethodGroupExpr.IsExplicitImpl if appropriate.
17855         (Invocation.DoResolve): Don't report the CS0120 for explicit
17856         interface implementations.
17857
17858 2002-08-27  Martin Baulig  <martin@gnome.org>
17859
17860         * expression.cs (Invocation.DoResolve): If this is a static
17861         method and we don't have an InstanceExpression, we must report
17862         a CS0120.
17863
17864 2002-08-25  Martin Baulig  <martin@gnome.org>
17865
17866         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
17867         `==' between a valuetype and an object.
17868
17869 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
17870
17871         * ecore.cs (TypeExpr): Provide a ToString method.
17872
17873 2002-08-24  Martin Baulig  <martin@gnome.org>
17874
17875         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
17876         now called proggie.dbg and it's a binary file.
17877
17878 2002-08-23  Martin Baulig  <martin@gnome.org>
17879
17880         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
17881
17882 2002-08-23  Martin Baulig  <martin@gnome.org>
17883
17884         * struct.cs (MyStructInfo.ctor): Make this work with empty
17885         structs; it's not allowed to use foreach() on null.
17886
17887 2002-08-23  Martin Baulig  <martin@gnome.org>
17888
17889         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
17890         writer the full pathname of the generated assembly.
17891
17892 2002-08-23  Martin Baulig  <martin@gnome.org>
17893
17894         * statements.cs (FlowBranching.UsageVector.MergeChildren):
17895         A `finally' block never returns or breaks; improved handling of
17896         unreachable code.
17897
17898 2002-08-23  Martin Baulig  <martin@gnome.org>
17899
17900         * statement.cs (Throw.Resolve): Allow `throw null'.
17901
17902 2002-08-23  Martin Baulig  <martin@gnome.org>
17903
17904         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
17905         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
17906         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
17907         MemberLookup would return a wrong event if this is an explicit
17908         interface implementation and the class has an event with the same
17909         name.
17910
17911 2002-08-23  Martin Baulig  <martin@gnome.org>
17912
17913         * statement.cs (Block.AddChildVariableNames): New public method.
17914         (Block.AddChildVariableName): Likewise.
17915         (Block.IsVariableNameUsedInChildBlock): Likewise.
17916         (Block.AddVariable): Check whether a variable name has already
17917         been used in a child block.
17918
17919         * cs-parser.jay (declare_local_variables): Mark all variable names
17920         from the current block as being used in a child block in the
17921         implicit block.
17922
17923 2002-08-23  Martin Baulig  <martin@gnome.org>
17924
17925         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
17926         find the symbol writer.
17927
17928         * driver.cs: csc also allows the arguments to /define being
17929         separated by commas, not only by semicolons.
17930
17931 2002-08-23  Martin Baulig  <martin@gnome.org>
17932
17933         * interface.cs (Interface.GetMembers): Added static check for events.
17934
17935 2002-08-15  Martin Baulig  <martin@gnome.org>
17936
17937         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
17938         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
17939
17940         * ecore.cs (Expression.MemberLookup): Added documentation and explained
17941         why the MethodData.EmitDestructor() change was necessary.
17942
17943 2002-08-20  Martin Baulig  <martin@gnome.org>
17944
17945         * class.cs (TypeContainer.FindMembers): Added static check for events.
17946
17947         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
17948
17949         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
17950         use Type.GetEvents(), not Type.FindMembers().
17951
17952 2002-08-20  Martin Baulig  <martin@gnome.org>
17953
17954         * decl.cs (MemberCache): Added a special method cache which will
17955         be used for method-only searched.  This ensures that a method
17956         search will return a MethodInfo with the correct ReflectedType for
17957         inherited methods.      
17958
17959 2002-08-20  Martin Baulig  <martin@gnome.org>
17960
17961         * decl.cs (DeclSpace.FindMembers): Made this public.
17962
17963 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17964
17965         * delegate.cs: fixed build on windows.
17966         [FIXME:  Filed as bug #29150: MCS must report these errors.]
17967
17968 2002-08-19  Ravi Pratap  <ravi@ximian.com>
17969
17970         * ecore.cs (StandardConversionExists): Return a false
17971         if we are trying to convert the void type to anything else
17972         since that is not allowed.
17973
17974         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
17975         we flag error 70 in the event an event is trying to be accessed
17976         directly from outside the declaring type.
17977
17978 2002-08-20  Martin Baulig  <martin@gnome.org>
17979
17980         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
17981         MemberCache from typemanager.cs to decl.cs.
17982
17983 2002-08-19  Martin Baulig  <martin@gnome.org>
17984
17985         * class.cs (TypeContainer): Implement IMemberContainer.
17986         (TypeContainer.DefineMembers): Create the MemberCache.
17987         (TypeContainer.FindMembers): Do better BindingFlags checking; only
17988         return public members if BindingFlags.Public was given, check
17989         whether members are static.
17990
17991 2002-08-16  Martin Baulig  <martin@gnome.org>
17992
17993         * decl.cs (DeclSpace.Define): Splitted this in Define and
17994         DefineMembers.  DefineMembers is called first and initializes the
17995         MemberCache.
17996
17997         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
17998         DefineMembers() on all our DeclSpaces.
17999
18000         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
18001         but call DefineMembers() on all nested interfaces.  We call their
18002         Define() in our new Define() function.
18003
18004         * interface.cs (Interface): Implement IMemberContainer.
18005         (Interface.Define): Moved all code except the attribute stuf to
18006         DefineMembers().
18007         (Interface.DefineMembers): Initialize the member cache.
18008
18009         * typemanager.cs (IMemberFinder): Removed this interface, we don't
18010         need this anymore since we can use MemberCache.FindMembers directly.
18011
18012 2002-08-19  Martin Baulig  <martin@gnome.org>
18013
18014         * typemanager.cs (MemberCache): When creating the cache for an
18015         interface type, add all inherited members.
18016         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
18017         to `out bool used_cache' and documented it.
18018         (TypeManager.MemberLookup): If we already used the cache in the first
18019         iteration, we don't need to do the interfaces check.
18020
18021 2002-08-19  Martin Baulig  <martin@gnome.org>
18022
18023         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
18024         here from IMemberFinder and don't implement this interface anymore.
18025         (DeclSpace.MemberCache): Moved here from IMemberFinder.
18026
18027         * typemanager.cs (IMemberFinder): This interface is now only used by
18028         classes which actually support the member cache.
18029         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
18030         since we only put DeclSpaces into this Hashtable.
18031         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
18032         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
18033
18034 2002-08-16  Martin Baulig  <martin@gnome.org>
18035
18036         * typemanager.cs (ICachingMemberFinder): Removed.
18037         (IMemberFinder.MemberCache): New property.
18038         (TypeManager.FindMembers): Merged this with RealFindMembers().
18039         This function will never be called from TypeManager.MemberLookup()
18040         so we can't use the cache here, just the IMemberFinder.
18041         (TypeManager.MemberLookup_FindMembers): Check whether the
18042         IMemberFinder has a MemberCache and call the cache's FindMembers
18043         function.
18044         (MemberCache): Rewrote larger parts of this yet another time and
18045         cleaned it up a bit.
18046
18047 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
18048
18049         * driver.cs (LoadArgs): Support quoting.
18050
18051         (Usage): Show the CSC-like command line arguments.
18052
18053         Improved a few error messages.
18054
18055 2002-08-15  Martin Baulig  <martin@gnome.org>
18056
18057         * typemanager.cs (IMemberContainer.Type): New property.
18058         (IMemberContainer.IsInterface): New property.
18059
18060         The following changes are conditional to BROKEN_RUNTIME, which is
18061         defined at the top of the file.
18062
18063         * typemanager.cs (MemberCache.MemberCache): Don't add the base
18064         class'es members, but add all members from TypeHandle.ObjectType
18065         if we're an interface.
18066         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
18067         is the current type.
18068         (MemberCache.CacheEntry.Container): Removed this field.
18069         (TypeHandle.GetMembers): Include inherited members.
18070
18071 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18072
18073         * typemanager.cs: fixed compilation and added a comment on a field that
18074         is never used.
18075
18076 2002-08-15  Martin Baulig  <martin@gnome.org>
18077
18078         * class.cs (ConstructorInitializer.Resolve): In the
18079         Expression.MemberLookup call, use the queried_type as
18080         invocation_type.
18081
18082         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
18083         declared' attribute, it's always true.
18084         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
18085         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
18086         temporary wrapper for FindMembers which tells MemberLookup whether
18087         members from the base classes are included in the return value.
18088         This will go away soon.
18089         (TypeManager.MemberLookup): Use this temporary hack here; once the
18090         new MemberCache is completed, we don't need to do the DeclaredOnly
18091         looping here anymore since the MemberCache will take care of this.
18092         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
18093         (MemberCache): When creating the MemberCache for a class, get
18094         members from the current class and all its base classes.
18095         (MemberCache.CacheEntry.Container): New field.  This is a
18096         temporary hack until the Mono runtime is fixed to distinguish
18097         between ReflectedType and DeclaringType.  It allows us to use MCS
18098         with both the MS runtime and the unfixed Mono runtime without
18099         problems and without accecting performance.
18100         (MemberCache.SearchMembers): The DeclaredOnly looping from
18101         TypeManager.MemberLookup is now done here.      
18102
18103 2002-08-14  Martin Baulig  <martin@gnome.org>
18104
18105         * statement.cs (MyStructInfo.MyStructInfo): Don't call
18106         Type.GetFields on dynamic types but get the fields from the
18107         corresponding TypeContainer.
18108         (MyStructInfo.GetStructInfo): Added check for enum types.
18109
18110         * typemanager.cs (MemberList.IsSynchronized): Implemented.
18111         (MemberList.SyncRoot): Implemented.
18112         (TypeManager.FilterWithClosure): No need to check permissions if
18113         closure_start_type == closure_invocation_type, don't crash if
18114         closure_invocation_type is null.
18115
18116 2002-08-13  Martin Baulig  <martin@gnome.org>
18117
18118         Rewrote TypeContainer.FindMembers to use a member cache.  This
18119         gives us a speed increase of about 35% for the self-hosting MCS
18120         build and of about 15-20% for the class libs (both on GNU/Linux).
18121
18122         * report.cs (Timer): New class to get enhanced profiling.  This
18123         whole class is "TIMER" conditional since it remarkably slows down
18124         compilation speed.
18125
18126         * class.cs (MemberList): New class.  This is an IList wrapper
18127         which we're now using instead of passing MemberInfo[]'s around to
18128         avoid copying this array unnecessarily.
18129         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
18130         (ICachingMemberFinder, IMemberContainer): New interface.
18131         (TypeManager.FilterWithClosure): If `criteria' is null, the name
18132         has already been checked, otherwise use it for the name comparision.
18133         (TypeManager.FindMembers): Renamed to RealMemberFinder and
18134         provided wrapper which tries to use ICachingMemberFinder.FindMembers
18135         if possible.  Returns a MemberList, not a MemberInfo [].
18136         (TypeHandle): New class, implements IMemberContainer.  We create
18137         one instance of this class per type, it contains a MemberCache
18138         which is used to do the member lookups.
18139         (MemberCache): New class.  Each instance of this class contains
18140         all members of a type and a name-based hash table.
18141         (MemberCache.FindMembers): This is our new member lookup
18142         function.  First, it looks up all members of the requested name in
18143         the hash table.  Then, it walks this list and sorts out all
18144         applicable members and returns them.
18145
18146 2002-08-13  Martin Baulig  <martin@gnome.org>
18147
18148         In addition to a nice code cleanup, this gives us a performance
18149         increase of about 1.4% on GNU/Linux - not much, but it's already
18150         half a second for the self-hosting MCS compilation.
18151
18152         * typemanager.cs (IMemberFinder): New interface.  It is used by
18153         TypeManager.FindMembers to call FindMembers on a TypeContainer,
18154         Enum, Delegate or Interface.
18155         (TypeManager.finder_to_member_finder): New PtrHashtable.
18156         (TypeManager.finder_to_container): Removed.
18157         (TypeManager.finder_to_delegate): Removed.
18158         (TypeManager.finder_to_interface): Removed.
18159         (TypeManager.finder_to_enum): Removed.
18160
18161         * interface.cs (Interface): Implement IMemberFinder.
18162
18163         * delegate.cs (Delegate): Implement IMemberFinder.
18164
18165         * enum.cs (Enum): Implement IMemberFinder.
18166
18167         * class.cs (TypeContainer): Implement IMemberFinder.
18168
18169 2002-08-12  Martin Baulig  <martin@gnome.org>
18170
18171         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
18172
18173 2002-08-12  Martin Baulig  <martin@gnome.org>
18174
18175         * ecore.cs (ITypeExpression): New interface for expressions which
18176         resolve to a type.
18177         (TypeExpression): Renamed to TypeLookupExpression.
18178         (Expression.DoResolve): If we're doing a types-only lookup, the
18179         expression must implement the ITypeExpression interface and we
18180         call DoResolveType() on it.
18181         (SimpleName): Implement the new ITypeExpression interface.
18182         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
18183         hack, the situation that we're only looking up types can't happen
18184         anymore when this method is called.  Moved the type lookup code to
18185         DoResolveType() and call it.
18186         (SimpleName.DoResolveType): This ITypeExpression interface method
18187         is now doing the types-only lookup.
18188         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
18189         (ResolveFlags): Added MaskExprClass.
18190
18191         * expression.cs (MemberAccess): Implement the ITypeExpression
18192         interface.
18193         (MemberAccess.DoResolve): Added support for a types-only lookup
18194         when we're called via ITypeExpression.DoResolveType().
18195         (ComposedCast): Implement the ITypeExpression interface.
18196
18197         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
18198         Expression.Resolve() with ResolveFlags.Type instead.
18199
18200 2002-08-12  Martin Baulig  <martin@gnome.org>
18201
18202         * interface.cs (Interface.Define): Apply attributes.
18203
18204         * attribute.cs (Attribute.ApplyAttributes): Added support for
18205         interface attributes.
18206
18207 2002-08-11  Martin Baulig  <martin@gnome.org>
18208
18209         * statement.cs (Block.Emit): Only check the "this" variable if we
18210         do not always throw an exception.
18211
18212         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
18213         whether the property has a set accessor.
18214
18215 2002-08-11  Martin Baulig  <martin@gnome.org>
18216
18217         Added control flow analysis support for structs.
18218
18219         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
18220         with control flow analysis turned off.
18221         (IVariable): New interface.
18222         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
18223         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
18224         (FieldExpr.DoResolve): Resolve the instance expression with flow
18225         analysis turned off and do the definite assignment check after the
18226         resolving when we know what the expression will resolve to.
18227
18228         * expression.cs (LocalVariableReference, ParameterReference):
18229         Implement the new IVariable interface, only call the flow analysis
18230         code if ec.DoFlowAnalysis is true.
18231         (This): Added constructor which takes a Block argument.  Implement
18232         the new IVariable interface.
18233         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
18234         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
18235         This does the definite assignment checks for struct members.
18236
18237         * class.cs (Constructor.Emit): If this is a non-static `struct'
18238         constructor which doesn't have any initializer, call
18239         Block.AddThisVariable() to tell the flow analysis code that all
18240         struct elements must be initialized before control returns from
18241         the constructor.
18242
18243         * statement.cs (MyStructInfo): New public class.
18244         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
18245         argument to this indexer.  If non-zero, check an individual struct
18246         member, not the whole struct.
18247         (FlowBranching.CheckOutParameters): Check struct members.
18248         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
18249         overloaded versions of these methods which take an additional
18250         `int field_idx' argument to check struct members.
18251         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
18252         overloaded versions of these methods which take an additional
18253         `string field_name' argument to check struct member.s
18254         (VariableInfo): Implement the IVariable interface.
18255         (VariableInfo.StructInfo): New public property.  Returns the
18256         MyStructInfo instance of the variable if it's a struct or null.
18257         (Block.AddThisVariable): New public method.  This is called from
18258         Constructor.Emit() for non-static `struct' constructor which do
18259         not have any initializer.  It creates a special variable for the
18260         "this" instance variable which will be checked by the flow
18261         analysis code to ensure that all of the struct's fields are
18262         initialized before control returns from the constructor.
18263         (UsageVector): Added support for struct members.  If a
18264         variable/parameter is a struct with N members, we reserve a slot
18265         in the usage vector for each member.  A struct is considered fully
18266         initialized if either the struct itself (slot 0) or all its
18267         members are initialized.
18268
18269 2002-08-08  Martin Baulig  <martin@gnome.org>
18270
18271         * driver.cs (Driver.MainDriver): Only report an error CS5001
18272         if there were no compilation errors.
18273
18274         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
18275         `UnsafeContext' property to determine whether the parent is in
18276         unsafe context rather than checking the parent's ModFlags:
18277         classes nested in an unsafe class are unsafe as well.
18278
18279 2002-08-08  Martin Baulig  <martin@gnome.org>
18280
18281         * statement.cs (UsageVector.MergeChildren): Distinguish between
18282         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
18283         we return.  Added test17() and test18() to test-154.cs.
18284
18285 2002-08-08  Martin Baulig  <martin@gnome.org>
18286
18287         * typemanager.cs (TypeManager.FilterWithClosure): If we have
18288         Family access, make sure the invoking type isn't a subclass of the
18289         queried type (that'd be a CS1540).
18290
18291         * ecore.cs (Expression.MemberLookup): Added overloaded version of
18292         this method which takes an additional `Type invocation_type'.
18293
18294         * expression.cs (BaseAccess.DoResolve): Use the base type as
18295         invocation and query type.
18296         (MemberAccess.DoResolve): If the lookup failed and we're about to
18297         report a CS0122, try a lookup with the ec.ContainerType - if this
18298         succeeds, we must report a CS1540.
18299
18300 2002-08-08  Martin Baulig  <martin@gnome.org>
18301
18302         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
18303         (MethodGroupExpr): Implement the IMemberExpr interface.
18304
18305         * expression (MemberAccess.ResolveMemberAccess): No need to have
18306         any special code for MethodGroupExprs anymore, they're now
18307         IMemberExprs.   
18308
18309 2002-08-08  Martin Baulig  <martin@gnome.org>
18310
18311         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
18312         Family, FamANDAssem and FamORAssem permissions.
18313         (TypeManager.IsSubclassOrNestedChildOf): New public method.
18314
18315 2002-08-08  Martin Baulig  <martin@gnome.org>
18316
18317         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
18318         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
18319         or loop block.
18320
18321 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
18322
18323         * driver.cs: implemented /resource option to embed managed resources.
18324
18325 2002-08-07  Martin Baulig  <martin@gnome.org>
18326
18327         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
18328         (FieldBase.HasFieldInitializer): New public property.
18329         (FieldBase.GetInitializerExpression): New public method.  Resolves and
18330         returns the field initializer and makes sure it is only resolved once.
18331         (TypeContainer.EmitFieldInitializers): Call
18332         FieldBase.GetInitializerExpression to get the initializer, this ensures
18333         that it isn't resolved multiple times.
18334
18335         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
18336         the resolving process (SimpleName/MemberLookup) that we're currently
18337         emitting a field initializer (which must not access any instance members,
18338         this is an error CS0236).
18339
18340         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
18341         argument, if the `IsFieldInitializer' flag is set, we must report and
18342         error CS0236 and not an error CS0120.   
18343
18344 2002-08-07  Martin Baulig  <martin@gnome.org>
18345
18346         * ecore.cs (IMemberExpr): New public interface.
18347         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
18348         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
18349         if the expression is an IMemberExpr.
18350
18351         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
18352         to be null, implicitly default to `this' if we're non-static in
18353         this case.  Simplified the code a lot by using the new IMemberExpr
18354         interface.  Also fixed bug #28176 here.
18355
18356 2002-08-06  Martin Baulig  <martin@gnome.org>
18357
18358         * cs-parser.jay (SimpleLookup): Removed.  We need to create
18359         ParameterReferences during semantic analysis so that we can do a
18360         type-only search when resolving Cast, TypeOf and SizeOf.
18361         (block): Pass the `current_local_parameters' to the Block's
18362         constructor.
18363
18364         * class.cs (ConstructorInitializer): Added `Parameters parameters'
18365         argument to the constructor.
18366         (ConstructorInitializer.Resolve): Create a temporary implicit
18367         block with the parameters.
18368
18369         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
18370         references here if we aren't doing a type-only search.
18371
18372         * statement.cs (Block): Added constructor which takes a
18373         `Parameters parameters' argument.
18374         (Block.Parameters): New public property.
18375
18376         * support.cs (InternalParameters.Parameters): Renamed `parameters'
18377         to `Parameters' and made it public readonly.
18378
18379 2002-08-06  Martin Baulig  <martin@gnome.org>
18380
18381         * ecore.cs (Expression.Warning): Made this public as well.
18382
18383         * report.cs (Report.Debug): Print the contents of collections.
18384
18385 2002-08-06  Martin Baulig  <martin@gnome.org>
18386
18387         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
18388         used to tell Resolve() which kinds of expressions it may return.
18389         (Expression.Resolve): Added overloaded version of this method which
18390         takes a `ResolveFlags flags' argument.  This can be used to tell
18391         Resolve() which kinds of expressions it may return.  Reports a
18392         CS0118 on error.
18393         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
18394         ResolveFlags.SimpleName.
18395         (Expression.Error118): Added overloaded version of this method which
18396         takes a `ResolveFlags flags' argument.  It uses the flags to determine
18397         which kinds of expressions are allowed.
18398
18399         * expression.cs (Argument.ResolveMethodGroup): New public method.
18400         Resolves an argument, but allows a MethodGroup to be returned.
18401         This is used when invoking a delegate.
18402
18403         * TODO: Updated a bit.
18404
18405 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18406
18407         Fixed compilation with csc.
18408
18409         * ecore.cs: Expression.Error made public. Is this correct? Should
18410         Warning be made public too?
18411
18412         * expression.cs: use ea.Location instead of ea.loc.
18413         [FIXME:  Filed as bug #28607: MCS must report these errors.]
18414
18415 2002-08-06  Martin Baulig  <martin@gnome.org>
18416
18417         * ecore.cs (Expression.loc): Moved the location here instead of
18418         duplicating it in all derived classes.
18419         (Expression.Location): New public property.
18420         (Expression.Error, Expression.Warning): Made them non-static and
18421         removed the location argument.
18422         (Expression.Warning): Added overloaded version which takes an
18423         `int level' argument.
18424         (Expression.Error118): Make this non-static and removed the
18425         expression and location arguments.
18426         (TypeExpr): Added location argument to the constructor.
18427
18428         * expression.cs (StaticCallExpr): Added location argument to
18429         the constructor.
18430         (Indirection, PointerArithmetic): Likewise.
18431         (CheckedExpr, UnCheckedExpr): Likewise.
18432         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
18433         (StringPtr): Likewise.
18434
18435
18436 2002-08-05  Martin Baulig  <martin@gnome.org>
18437
18438         * expression.cs (BaseAccess.DoResolve): Actually report errors.
18439
18440         * assign.cs (Assign.DoResolve): Check whether the source
18441         expression is a value or variable.
18442
18443         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
18444         while resolving the corresponding blocks.
18445
18446         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
18447         an error, don't silently return null.
18448
18449         * statement.cs (Block.AddVariable): Do the error reporting here
18450         and distinguish between CS0128 and CS0136.
18451         (Block.DoResolve): Report all unused labels (warning CS0164).
18452         (LabeledStatement): Pass the location to the constructor.
18453         (LabeledStatement.HasBeenReferenced): New property.
18454         (LabeledStatement.Resolve): Set it to true here.
18455
18456         * statement.cs (Return.Emit): Return success even after reporting
18457         a type mismatch error (CS0126 or CS0127), this is what csc does and
18458         it avoids confusing the users with any consecutive errors.
18459
18460 2002-08-05  Martin Baulig  <martin@gnome.org>
18461
18462         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18463
18464         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18465
18466         * expression.cs (MemberAccess.DoResolve): Silently return if an
18467         error has already been reported.
18468
18469         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18470         error has already been reported.
18471
18472 2002-08-05  Martin Baulig  <martin@gnome.org>
18473
18474         * statement.cs (UsageVector): Only initialize the `parameters'
18475         vector if we actually have any "out" parameters.
18476
18477 2002-08-05  Martin Baulig  <martin@gnome.org>
18478
18479         * expression.cs (Binary.ResolveOperator): When combining delegates,
18480         they must have the same type.
18481
18482 2002-08-05  Martin Baulig  <martin@gnome.org>
18483
18484         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18485         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18486         work with the ms runtime and we also don't need it: if we're a
18487         PropertyBuilder and not in the `indexer_arguments' hash, then we
18488         are a property and not an indexer.
18489
18490         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18491         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18492         since the latter one doesn't work with the ms runtime.
18493
18494 2002-08-03  Martin Baulig  <martin@gnome.org>
18495
18496         Fixed bugs #27998 and #22735.
18497
18498         * class.cs (Method.IsOperator): New public field.
18499         (Method.CheckBase): Report CS0111 if there's already a method
18500         with the same parameters in the current class.  Report CS0508 when
18501         attempting to change the return type of an inherited method.
18502         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18503         and it's not marked abstract or extern.
18504         (PropertyBase): New abstract base class for Property and Indexer.
18505         (PropertyBase.CheckBase): Moved here from Property and made it work
18506         for indexers.
18507         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18508         the same so we can reuse it there.
18509         (Property, Indexer): Derive from PropertyBase.
18510         (MethodSignature.inheritable_property_signature_filter): New delegate
18511         to find properties and indexers.
18512
18513         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18514         argument and improved error reporting.
18515
18516         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18517         EmptyReadOnlyParameters and made it a property.
18518
18519         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18520         version of this method which takes a `PropertyInfo indexer'.
18521         (TypeManager.RegisterIndexer): New method.
18522
18523         * class.cs: Added myself as author of this file :-)
18524
18525 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18526
18527         * class.cs: fixed compilation on windoze.
18528
18529 2002-08-03  Martin Baulig  <martin@gnome.org>
18530
18531         * interface.cs (Interface.GetInterfaceBases): Check whether all
18532         base interfaces are at least as accessible than the current one.
18533
18534         * class.cs (TypeContainer.GetClassBases): Check whether base types
18535         are at least as accessible than the current type.
18536         (TypeContainer.AsAccessible): Implemented and made non-static.
18537         (MemberBase.CheckParameters): Report errors if the accessibility
18538         checks fail.
18539
18540         * delegate.cs (Delegate.Delegate): The default visibility is
18541         internal for top-level types and private for nested types.
18542         (Delegate.Define): Report errors if the accessibility checks fail.
18543
18544         * enum.cs (Enum.Enum): The default visibility is internal for
18545         top-level types and private for nested types.
18546         (Enum.DefineType): Compute the correct visibility.
18547
18548         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18549         function which takes a `bool is_toplevel' instead of a TypeContainer.
18550
18551         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18552         builtin type.
18553
18554 2002-08-02  Martin Baulig  <martin@gnome.org>
18555
18556         * expression.cs (LocalVariableReferenc): Added constructor which
18557         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18558         (LocalVariableReference.IsReadOnly): New property.
18559         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18560         variable is readonly, use our own readonly flag to do this; you can
18561         use the new constructor to get a writable reference to a read-only
18562         variable.
18563
18564         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18565         reference to the local variable.
18566
18567 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18568
18569         * rootcontext.cs (ResolveCore): Also include System.Exception
18570
18571         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18572         we reach an EmptyStatement.
18573
18574         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18575         is also fine.
18576
18577         * expression.cs (Binary.ResolveOperator): Check error result in
18578         two places.
18579
18580         use brtrue/brfalse directly and avoid compares to null.
18581
18582 2002-08-02  Martin Baulig  <martin@gnome.org>
18583
18584         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18585         Fixes bug #28407, added test-155.cs.
18586
18587 2002-08-01  Martin Baulig  <martin@gnome.org>
18588
18589         * class.cs (Event.EmitDefaultMethod): Make this work with static
18590         events.  Fixes #28311, added verify-3.cs.
18591
18592 2002-08-01  Martin Baulig  <martin@gnome.org>
18593
18594         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
18595         `is_disposable' fields.
18596         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
18597         `hm.is_disposable' if we're using the collection pattern.
18598         (Foreach.EmitCollectionForeach): Use the correct type for the
18599         enumerator's local variable, only emit the try/finally block if
18600         necessary (fixes #27713).
18601
18602 2002-08-01  Martin Baulig  <martin@gnome.org>
18603
18604         * ecore.cs (Expression.report118): Renamed to Error118 and made
18605         it public static.
18606
18607         * statement.cs (Throw.Resolve): Check whether the expression is of
18608         the correct type (CS0118) and whether the type derives from
18609         System.Exception (CS0155).
18610         (Catch.Resolve): New method.  Do the type lookup here and check
18611         whether it derives from System.Exception (CS0155).
18612         (Catch.CatchType, Catch.IsGeneral): New public properties.
18613
18614         * typemanager.cs (TypeManager.exception_type): Added.
18615
18616 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
18617
18618         * driver.cs: Updated About function.
18619
18620 2002-07-31  Martin Baulig  <martin@gnome.org>
18621
18622         Implemented Control Flow Analysis.
18623
18624         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
18625         (EmitContext.CurrentBranching): Added.
18626         (EmitContext.StartFlowBranching): Added.
18627         (EmitContext.EndFlowBranching): Added.
18628         (EmitContext.KillFlowBranching): Added.
18629         (EmitContext.IsVariableAssigned): Added.
18630         (EmitContext.SetVariableAssigned): Added.
18631         (EmitContext.IsParameterAssigned): Added.
18632         (EmitContext.SetParameterAssigned): Added.
18633         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
18634         Added control flow analysis stuff here.
18635
18636         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
18637         resolve the expression as lvalue.
18638         (LocalVariableReference.DoResolve): Check whether the variable has
18639         already been assigned.
18640         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
18641         the parameter as assigned here.
18642         (ParameterReference.DoResolve): Check whether the parameter has already
18643         been assigned.
18644         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
18645         expression as lvalue.
18646
18647         * statement.cs (FlowBranching): New class for the flow analysis code.
18648         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
18649         (LabeledStatement.IsDefined): New public property.
18650         (LabeledStatement.AddUsageVector): New public method to tell flow
18651         analyis that the label may be reached via a forward jump.
18652         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
18653         flow analysis.
18654         (VariableInfo.Number): New public field.  This is used by flow analysis
18655         to number all locals of a block.
18656         (Block.CountVariables): New public property.  This is the number of
18657         local variables in this block (including the locals from all parent
18658         blocks).
18659         (Block.EmitMeta): Number all the variables.
18660
18661         * statement.cs: Added flow analysis support to all classes.
18662
18663 2002-07-31  Martin Baulig  <martin@gnome.org>
18664
18665         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
18666         To get debugging messages, compile mcs with /define:MCS_DEBUG and
18667         then use this argument.
18668
18669         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
18670
18671         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
18672         use this to specify /define options.
18673
18674 2002-07-29  Martin Baulig  <martin@gnome.org>
18675
18676         * statement.cs (Fixed): Moved all code that does variable lookups
18677         and resolvings from Emit to Resolve.
18678
18679         * statement.cs (For): Moved all code that does variable lookups
18680         and resolvings from Emit to Resolve.
18681
18682         * statement.cs (Using): Moved all code that does variable lookups
18683         and resolvings from Emit to Resolve.
18684
18685 2002-07-29  Martin Baulig  <martin@gnome.org>
18686
18687         * attribute.cs (Attribute.Resolve): Explicitly catch a
18688         System.NullReferenceException when creating the
18689         CustromAttributeBuilder and report a different warning message.
18690
18691 2002-07-29  Martin Baulig  <martin@gnome.org>
18692
18693         * support.cs (ParameterData.ParameterName): Added method to
18694         get the name of a parameter.
18695
18696         * typemanager.cs (TypeManager.IsValueType): New public method.
18697
18698 2002-07-29  Martin Baulig  <martin@gnome.org>
18699
18700         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
18701         is a flag which specifies that it's either ref or out.
18702         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
18703         the out parameter to `out Parameter.Modifier mod', also set the
18704         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
18705
18706         * support.cs (InternalParameters.ParameterModifier): Distinguish
18707         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18708         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18709
18710         * expression.cs (Argument.GetParameterModifier): Distinguish
18711         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18712         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18713
18714 2002-07-29  Martin Baulig  <martin@gnome.org>
18715
18716         * expression.cs (ParameterReference.ParameterReference): Added
18717         `Location loc' argument to the constructor.
18718
18719         * cs-parser.jay: Pass location to ParameterReference.
18720
18721 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
18722
18723         * statement.cs (Try): Initialize the location.
18724
18725         * cs-parser.jay: pass location to Try.
18726
18727         * expression.cs (Unary.Reduce): Change the prototype to return
18728         whether a constant fold could be performed or not.  The result is
18729         returned in an out parameters.  In the case of Indirection and
18730         AddressOf, we want to perform the full tests.
18731
18732 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
18733
18734         * statement.cs (Statement.Emit): Flag dead code.
18735
18736 2002-07-27  Andrew Birkett  <andy@nobugs.org>
18737
18738         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
18739
18740 2002-07-27  Martin Baulig  <martin@gnome.org>
18741
18742         * class.cs (MethodData.Define): Put back call to
18743         TypeManager.AddMethod(), accidentally commented this out.
18744
18745         * report.cs (Debug): New public method to print debugging information,
18746         this is `[Conditional ("DEBUG")]'.
18747
18748 2002-07-26  Martin Baulig  <martin@gnome.org>
18749
18750         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
18751         (switch_statement): Push the current_block to the switch_stack and
18752         pop it again when we're done with the switch.
18753         (switch_section): The new block is a child of the current_block.
18754         Fixes bug #24007, added test-152.cs.
18755
18756 2002-07-27  Martin Baulig  <martin@gnome.org>
18757
18758         * expression.cs (Invocation.EmitArguments): When calling a varargs
18759         function with only its fixed arguments, we need to pass an empty
18760         array.
18761
18762 2002-07-27  Martin Baulig  <martin@gnome.org>
18763
18764         Mono 0.13 has been released.
18765
18766 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
18767
18768         * driver.cs: Rename --resource to --linkres, because that is what
18769         we do currently, we dont support --resource yet.
18770
18771         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
18772
18773 2002-07-25  Martin Baulig  <martin@gnome.org>
18774
18775         * class.cs (MethodData): New public class.  This is a `method builder'
18776         class for a method or one accessor of a Property/Indexer/Event.
18777         (MethodData.GetMethodFlags): Moved here from MemberBase.
18778         (MethodData.ApplyAttributes): Likewise.
18779         (MethodData.ApplyObsoleteAttribute): Likewise.
18780         (MethodData.ApplyConditionalAttribute): Likewise.
18781         (MethodData.ApplyDllImportAttribute): Likewise.
18782         (MethodData.CheckAbstractAndExternal): Likewise.
18783         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
18784         (MethodData.Emit): Formerly known as Method.Emit().
18785         (MemberBase): Moved everything which was specific to a single
18786         accessor/method to MethodData.
18787         (Method): Create a new MethodData and call Define() and Emit() on it.
18788         (Property, Indexer, Event): Create a new MethodData objects for each
18789         accessor and call Define() and Emit() on them.
18790
18791 2002-07-25  Martin Baulig  <martin@gnome.org>
18792
18793         Made MethodCore derive from MemberBase to reuse the code from there.
18794         MemberBase now also checks for attributes.
18795
18796         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
18797         (MemberBase.GetMethodFlags): Moved here from class Method and marked
18798         as virtual.
18799         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
18800         `CallingConventions cc' and `Attributes opt_attrs' arguments.
18801         (MemberBase.ApplyAttributes): New virtual method; applies the
18802         attributes to a method or accessor.
18803         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
18804         (MemberBase.ApplyConditionalAttribute): Likewise.
18805         (MemberBase.ApplyDllImportAttribute): Likewise.
18806         (MemberBase.CheckAbstractAndExternal): Likewise.
18807         (MethodCore.ParameterTypes): This is now a property instead of a
18808         method, it's initialized from DoDefineParameters().
18809         (MethodCore.ParameterInfo): Removed the set accessor.
18810         (MethodCore.DoDefineParameters): New protected virtual method to
18811         initialize ParameterTypes and ParameterInfo.
18812         (Method.GetReturnType): We can now simply return the MemberType.
18813         (Method.GetMethodFlags): Override the MemberBase version and add
18814         the conditional flags.
18815         (Method.CheckBase): Moved some code from Define() here, call
18816         DoDefineParameters() here.
18817         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
18818         here to avoid some larger code duplication.
18819         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
18820         ensure that abstract and external accessors don't declare a body.
18821
18822         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
18823         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
18824         lookup in the attribute's parent classes, so we need to abort as soon
18825         as we found the first match.
18826         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
18827         the attribute has no arguments.
18828
18829         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
18830         of a Method.
18831
18832 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18833
18834         * cs-parser.jay: reverted previous patch.
18835
18836 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18837
18838         * cs-parser.jay: fixed bug #22119.
18839
18840 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18841
18842         * attribute.cs: fixed compilation. The error was:
18843         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
18844         be assigned to before control leaves the current method."
18845         [FIXME:  Filed as bug #28186: MCS must report this error.]
18846
18847 2002-07-25  Martin Baulig  <martin@gnome.org>
18848
18849         * attribute.cs (Attribute.Conditional_GetConditionName): New static
18850         method to pull the condition name ouf of a Conditional attribute.
18851         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
18852         the obsolete message and error flag out of an Obsolete attribute.
18853
18854         * class.cs (Method.GetMethodFlags): New public method to get the
18855         TypeManager.MethodFlags for this method.
18856         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
18857         private methods.
18858         (Method.Define): Get and apply the Obsolete and Conditional attributes;
18859         if we're overriding a virtual function, set the new private variable
18860         `parent_method'; call the new TypeManager.AddMethod().
18861
18862         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
18863         the MethodBuilder and the Method in a PtrHashtable.
18864         (TypeManager.builder_to_method): Added for this purpose.
18865         (TypeManager.MethodFlags): Added IsObsoleteError.
18866         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
18867         Obsolete and Conditional arguments in MethodBuilders.  If we discover
18868         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
18869         the message from the attribute.
18870
18871 2002-07-24  Martin Baulig  <martin@gnome.org>
18872
18873         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
18874         preprocessor directives, ensure that the argument to #define/#undef is
18875         exactly one identifier and that it's actually an identifier.
18876
18877         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
18878         did not work ....
18879
18880 2002-07-24  Martin Baulig  <martin@gnome.org>
18881
18882         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
18883         initialize it to TypeManager.object_type in the constructor.
18884         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
18885         of the `hm.get_current' method if we're using the collection pattern.
18886         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
18887         for the explicit conversion to make it work when we're using the collection
18888         pattern and the `Current' property has a different return type than `object'.
18889         Fixes #27713.
18890
18891 2002-07-24  Martin Baulig  <martin@gnome.org>
18892
18893         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
18894         does not match, but don't report any errors.  This method is called in
18895         order for all methods in a MethodGroupExpr until a matching method is
18896         found, so we don't want to bail out if the first method doesn't match.
18897         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
18898         matches, report the 123.  Fixes #28070.
18899
18900 2002-07-24  Martin Baulig  <martin@gnome.org>
18901
18902         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
18903         TypeManager.TypeToCoreType() to the top of the method so the
18904         following equality checks will work.  Fixes #28107.
18905
18906 2002-07-24  Martin Baulig  <martin@gnome.org>
18907
18908         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
18909         operand is of type uint, and the other operand is of type sbyte,
18910         short or int, the operands are converted to type long." -
18911         Actually do what this comment already told us.  Fixes bug #28106,
18912         added test-150.cs.
18913
18914 2002-07-24  Martin Baulig  <martin@gnome.org>
18915
18916         * class.cs (MethodBase): New abstract class.  This is now a base
18917         class for Property, Indexer and Event to avoid some code duplication
18918         in their Define() and DefineMethods() methods.
18919         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
18920         generic methods for Define() and DefineMethods().
18921         (FieldBase): Derive from MemberBase, not MemberCore.
18922         (Property): Derive from MemberBase, not MemberCore.
18923         (Property.DefineMethod): Moved all the code from this method to the
18924         new MethodBase.DefineAccessor(), just call it with appropriate
18925         argumetnts.
18926         (Property.Define): Call the new Property.DoDefine(), this does some
18927         sanity checks and we don't need to duplicate the code everywhere.
18928         (Event): Derive from MemberBase, not MemberCore.
18929         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
18930         accessors, this will also make them work with interface events.
18931         (Indexer): Derive from MemberBase, not MemberCore.
18932         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
18933         (Indexer.Define): Use the new MethodBase functions.
18934
18935         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
18936         argument to the constructor.
18937         (Interface.FindMembers): Added support for interface events.
18938         (Interface.PopluateEvent): Implemented.
18939
18940         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
18941
18942 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
18943
18944         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
18945         but this is required to check for a method name being the same as
18946         the containing class.  
18947
18948         Handle this now.
18949
18950 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18951
18952         * interface.cs: initialize variable.
18953
18954 2002-07-23  Martin Baulig  <martin@gnome.org>
18955
18956         Implemented the IndexerName attribute in interfaces.
18957
18958         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
18959         name if this is an explicit interface implementation.
18960         (Indexer.InterfaceIndexerName): New public variable.  If we're
18961         implementing an interface indexer, this is the IndexerName in that
18962         interface.  Otherwise, it's the IndexerName.
18963         (Indexer.DefineMethod): If we're implementing interface indexer,
18964         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
18965         and Pending.ImplementIndexer methods.
18966         (Indexer.Define): Also define the PropertyBuilder if we're
18967         implementing an interface indexer and this is neither an explicit
18968         interface implementation nor do the IndexerName match the one in
18969         the interface.
18970
18971         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
18972         If a method is defined here, then we always need to create a proxy
18973         for it.  This is used when implementing interface indexers.
18974         (Pending.IsInterfaceIndexer): New public method.
18975         (Pending.ImplementIndexer): New public method.
18976         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
18977         This is used when implementing interface indexers to define a proxy
18978         if necessary.
18979         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
18980         define a proxy if necessary.
18981
18982         * interface.cs (Interface.IndexerName): New public variable.
18983         (Interface.PopulateIndexer): Set the IndexerName.
18984         (Interface.DefineIndexers): New private method.  Populate all the
18985         indexers and make sure their IndexerNames match.
18986
18987         * typemanager.cs (IndexerPropertyName): Added support for interface
18988         indexers.
18989
18990 2002-07-22  Martin Baulig  <martin@gnome.org>
18991
18992         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
18993         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
18994         ret if HasReturnLabel.
18995         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
18996         variables.
18997
18998         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
18999         and set the ec.LoopBeginTryCatchLevel.
19000         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
19001         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
19002         the current ec.TryCatchLevel, the branch goes out of an exception
19003         block.  In this case, we need to use Leave and not Br.
19004
19005 2002-07-22  Martin Baulig  <martin@gnome.org>
19006
19007         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
19008         block unless the block does not always return or it is contained in
19009         another try { ... } catch { ... } block.  Fixes bug #26506.
19010         Added verify-1.cs to the test suite.
19011
19012 2002-07-22  Martin Baulig  <martin@gnome.org>
19013
19014         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
19015         then we do not always return.  Fixes bug #24985.
19016
19017 2002-07-22  Martin Baulig  <martin@gnome.org>
19018
19019         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
19020         lookup on a per-class level; ie. walk up the class hierarchy until we
19021         found at least one applicable method, then choose the best among them.
19022         Fixes bug #24463 and test-29.cs.
19023
19024 2002-07-22  Martin Baulig  <martin@gnome.org>
19025
19026         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
19027         return types of the methods.  The return type is not part of the
19028         signature and we must not check it to make the `new' modifier work.
19029         Fixes bug #27999, also added test-147.cs.
19030         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
19031
19032         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
19033         on the method's return type.
19034
19035 2002-07-21  Martin Baulig  <martin@gnome.org>
19036
19037         * assign.cs: Make this work if the rightmost source is a constant and
19038         we need to do an implicit type conversion.  Also adding a few more tests
19039         to test-38.cs which should have caught this.
19040
19041         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
19042         target in the makefile for this.  The makefile.gnu is primarily intended
19043         for end-users who don't want to debug the compiler.
19044
19045 2002-07-21  Martin Baulig  <martin@gnome.org>
19046
19047         * assign.cs: Improved the Assign class so it can now handle embedded
19048         assignments (X = Y = Z = something).  As a side-effect this'll now also
19049         consume less local variables.  test-38.cs now passes with MCS, added
19050         a few new test cases to that test.
19051
19052 2002-07-20  Martin Baulig  <martin@gnome.org>
19053
19054         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
19055         instructions.  Fixes bug #27977, also added test-146.cs.
19056
19057 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19058
19059         * cs-tokenizer.cs: fixed getHex ().
19060
19061 2002-07-19  Martin Baulig  <martin@gnome.org>
19062
19063         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
19064         not Type.GetType() to lookup the array type.  This is needed when
19065         we're constructing an array of a user-defined type.
19066         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
19067         single-dimensional arrays, but also for single-dimensial arrays of
19068         type decimal.
19069
19070 2002-07-19  Martin Baulig  <martin@gnome.org>
19071
19072         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
19073         this function is called, it's not allowed to share LocalBuilders
19074         among ILGenerators.
19075
19076 2002-07-19  Martin Baulig  <martin@gnome.org>
19077
19078         * expression.cs (Argument.Resolve): Report an error 118 when trying
19079         to pass a type as argument.
19080
19081 2002-07-18  Martin Baulig  <martin@gnome.org>
19082
19083         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
19084         Conv_R_Un for the signed `long' type.
19085
19086 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
19087
19088         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
19089         `expr' for the temporary result, as that will fail if we do
19090         multiple resolves on the same expression.
19091
19092 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
19093
19094         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
19095         ec.TypeContainer for looking up aliases. 
19096
19097         * class.cs (TypeContainer): Remove LookupAlias from here.
19098
19099         * decl.cs (DeclSpace); Move here.
19100
19101 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
19102
19103         * class.cs (FindMembers): Only call filter if the constructor
19104         bulider is not null.
19105
19106         Also handle delegates in `NestedTypes' now.  Now we will perform
19107         type lookups using the standard resolution process.  This also
19108         fixes a bug.
19109
19110         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
19111         This uses Expressions (the limited kind that can be parsed by the
19112         tree) instead of strings.
19113
19114         * expression.cs (ComposedCast.ToString): Implement, used to flag
19115         errors since now we have to render expressions.
19116
19117         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
19118         FormArrayType. 
19119
19120         * ecore.cs (SimpleName.ToString): ditto.
19121
19122         * cs-parser.jay: Instead of using strings to assemble types, use
19123         Expressions to assemble the type (using SimpleName, ComposedCast,
19124         MemberAccess).  This should fix the type lookups in declarations,
19125         because we were using a different code path for this.
19126
19127         * statement.cs (Block.Resolve): Continue processing statements
19128         even when there is an error.
19129
19130 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
19131
19132         * class.cs (Event.Define): Also remove the `remove' method from
19133         the list of pending items.
19134
19135         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
19136         generate more compact code. 
19137
19138 2002-07-17  Martin Baulig  <martin@gnome.org>
19139
19140         * const.cs (Const.LookupConstantValue): Add support for constant
19141         `unchecked' and `checked' expressions.
19142         Also adding test case test-140.cs for this.
19143
19144 2002-07-17  Martin Baulig  <martin@gnome.org>
19145
19146         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
19147         check whether mi.ReturnType implements the IEnumerator interface; the
19148         `==' and the IsAssignableFrom() will fail in this situation.
19149
19150 2002-07-16  Ravi Pratap  <ravi@ximian.com>
19151
19152         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
19153         here too.
19154
19155 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19156
19157         * expression.cs: fixed bug #27811.
19158
19159 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
19160
19161         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
19162         Molaro: when we are a ref, the value already contains a pointer
19163         value, do not take the address of it.
19164
19165 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
19166         * removed mb-parser.jay and mb-tokenizer.cs
19167
19168 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19169
19170         * expression.cs: check against the building corlib void type.
19171
19172 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
19173
19174         * ecore.cs: fix for valuetype static readonly fields: when 
19175         initializing them, we need their address, not the address of a copy.
19176
19177 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
19178
19179         * typemanager.cs: register also enum_type in corlib.
19180
19181 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19182
19183         * class.cs: allow calling this (but not base) initializers in structs.
19184
19185 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
19186
19187         * ecore.cs: make sure we compare against the building base types
19188         in GetTypeSize ().
19189
19190 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
19191
19192         * typemanager.cs: fix TypeToCoreType() to handle void and object
19193         (corlib gets no more typerefs after this change).
19194
19195 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
19196
19197         * expression.cs (ArrayCreation.EmitArrayArguments): use
19198         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
19199
19200         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
19201         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
19202         array indexes, the runtime actually forbids them.
19203
19204         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
19205         for array arguments here.
19206
19207         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
19208         instead of the default for ValueTypes.
19209
19210         (New.DoEmit): Use IsValueType instead of
19211         IsSubclassOf (value_type)
19212         (New.DoResolve): ditto.
19213         (Invocation.EmitCall): ditto.
19214
19215         * assign.cs (Assign): ditto.
19216
19217         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
19218         Statements *are* currently doing part of their resolution during
19219         Emit.  
19220
19221         Expressions do always resolve during resolve, but statements are
19222         only required to propagate resolution to their children.
19223
19224 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
19225
19226         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
19227
19228         (LoadAssembly): Do not add the dll if it is already specified
19229
19230         (MainDriver): Add the System directory to the link path at the end,
19231         after all the other -L arguments. 
19232
19233         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
19234         wrong opcode for loading bytes and bools (ldelem.i1 instead of
19235         ldelem.u1) and using the opposite for sbytes.
19236
19237         This fixes Digger, and we can finally run it.
19238
19239         * driver.cs (UnixParseOption): Move the option parsing here.  
19240         (CSCParseOption): Implement CSC-like parsing of options.
19241
19242         We now support both modes of operation, the old Unix way, and the
19243         new CSC-like way.  This should help those who wanted to make cross
19244         platform makefiles.
19245
19246         The only thing broken is that /r:, /reference: and /lib: are not
19247         implemented, because I want to make those have the same semantics
19248         as the CSC compiler has, and kill once and for all the confussion
19249         around this.   Will be doing this tomorrow.
19250
19251         * statement.cs (Unsafe.Resolve): The state is checked during
19252         resolve, not emit, so we have to set the flags for IsUnsfe here.
19253
19254 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19255
19256         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
19257         not catch the Error_ObjectRefRequired in SimpleName (as it is
19258         possible to have a class/instance variable name that later gets
19259         deambiguated), we have to check this here.      
19260
19261 2002-07-10  Ravi Pratap  <ravi@ximian.com>
19262
19263         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
19264         make static and put into Expression.
19265
19266         (Event.Define): Register the private field of the event with the 
19267         TypeManager so that GetFieldFromEvent can get at it.
19268
19269         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
19270         keep track of the private field associated with an event which
19271         has no accessors.
19272
19273         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
19274         private field.
19275
19276         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
19277
19278 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19279
19280         * expression.cs (Binary.EmitBranchable): this routine emits the
19281         Binary expression in a branchable context.  This basically means:
19282         we need to branch somewhere, not just get the value on the stack.
19283
19284         This works together with Statement.EmitBoolExpression.
19285
19286         * statement.cs (Statement.EmitBoolExpression): Use
19287         EmitBranchable. 
19288
19289 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
19290
19291         * statement.cs (For): Reduce the number of jumps in loops.
19292
19293         (For): Implement loop inversion for the For statement.
19294
19295         (Break): We can be breaking out of a Try/Catch controlled section
19296         (foreach might have an implicit try/catch clause), so we need to
19297         use Leave instead of Br.
19298
19299         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
19300         now).  If the instace expression supports IMemoryLocation, we use
19301         the AddressOf method from the IMemoryLocation to extract the
19302         address instead of emitting the instance.
19303
19304         This showed up with `This', as we were emitting the instance
19305         always (Emit) instead of the Address of This.  Particularly
19306         interesting when This is a value type, as we dont want the Emit
19307         effect (which was to load the object).
19308
19309 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
19310
19311         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
19312
19313         * statement.cs (Checked): Set the CheckedState during the resolve
19314         process too, as the ConvCast operations track the checked state on
19315         the resolve process, and not emit.
19316
19317         * cs-parser.jay (namespace_member_declaration): Flag that we have
19318         found a declaration when we do.  This is used to flag error 1529
19319
19320         * driver.cs: Report ok when we display the help only.
19321
19322 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
19323
19324         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
19325
19326 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
19327
19328         * cs-tokenizer.cs (define): We also have to track locally the
19329         defines.  AllDefines is just used for the Conditional Attribute,
19330         but we also need the local defines for the current source code. 
19331
19332 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
19333
19334         * statement.cs (While, For, Do): These loops can exit through a
19335         Break statement, use this information to tell whether the
19336         statement is the last piece of code.
19337
19338         (Break): Flag that we break.
19339
19340         * codegen.cs (EmitContexts): New `Breaks' state variable.
19341
19342 2002-07-03  Martin Baulig  <martin@gnome.org>
19343
19344         * class.cs (TypeContainer.MethodModifiersValid): Allow override
19345         modifiers in method declarations in structs.  Otherwise, you won't
19346         be able to override things like Object.Equals().
19347
19348 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19349
19350         * class.cs (Method, Property, Indexer): Do not allow the public
19351         modifier to be used in explicit interface implementations.
19352
19353         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
19354         override modifiers in method declarations in structs
19355
19356 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
19357
19358         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
19359         integer or real overflow, report an error
19360
19361 2002-07-02  Martin Baulig  <martin@gnome.org>
19362
19363         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
19364         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
19365         to tell the runtime about our newly created System.Object and
19366         System.ValueType types.
19367
19368 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19369
19370         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
19371         struct instead of Ldarg/Starg.
19372
19373 2002-07-02  Martin Baulig  <martin@gnome.org>
19374
19375         * expression.cs (Indirection.Indirection): Call
19376         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
19377
19378 2002-07-02  Martin Baulig  <martin@gnome.org>
19379
19380         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
19381         ValueType, call TypeManager.TypeToCoreType() on it.
19382         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
19383         the OpCodes.Newarr argument.
19384
19385 2002-07-02  Martin Baulig  <martin@gnome.org>
19386
19387         * expression.cs (Invocation.EmitCall): When compiling corlib,
19388         replace all calls to the system's System.Array type to calls to
19389         the newly created one.
19390
19391         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
19392         System.Array methods.
19393         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
19394         from the system's System.Array type which must be replaced.
19395
19396 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
19397
19398         * typemanager.cs: load unverifiable_code_ctor so we can build
19399         corlib using the correct type. Avoid using GetTypeCode() with
19400         TypeBuilders.
19401         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
19402         TypeManager.object_type to allow building corlib.
19403
19404 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
19405
19406         * ecore.cs: handle System.Enum separately in LoadFromPtr().
19407
19408 2002-07-01  Martin Baulig  <martin@gnome.org>
19409
19410         * class.cs: Make the last change actually work, we need to check
19411         whether `ifaces != null' to avoid a crash.
19412
19413 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19414
19415         * class.cs: when we build structs without fields that implement
19416         interfaces, we need to add the interfaces separately, since there is
19417         no API to both set the size and add the interfaces at type creation
19418         time.
19419
19420 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19421
19422         * expression.cs: the dimension arguments to the array constructors
19423         need to be converted if they are a long.
19424
19425 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
19426
19427         * class.cs: don't emit ldarg.0 if there is no parent constructor
19428         (fixes showstopper for corlib).
19429
19430 2002-06-29  Martin Baulig  <martin@gnome.org>
19431
19432         MCS now compiles corlib on GNU/Linux :-)
19433
19434         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
19435         ie. check for MethodImplOptions.InternalCall.
19436
19437         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
19438         and TypeManager.attribute_type are null, so we must explicitly check
19439         whether parent is not null to find out whether it's an attribute type.
19440         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
19441         and SetBuilder, not only if the property is neither abstract nor external.
19442         This is necessary to set the MethodImplOptions on the accessor methods.
19443         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
19444         SetBuilder, see Property.Emit().
19445
19446         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
19447         populate "System.Object", "System.ValueType" and "System.Attribute" since
19448         they've already been populated from BootCorlib_PopulateCoreTypes().
19449
19450 2002-06-29  Martin Baulig  <martin@gnome.org>
19451
19452         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
19453         is the NullLiteral, we also need to make sure that target_type is not
19454         an enum type.   
19455
19456 2002-06-29  Martin Baulig  <martin@gnome.org>
19457
19458         * rootcontext.cs (RootContext.ResolveCore): We must initialize
19459         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
19460         before calling BootstrapCorlib_ResolveDelegate ().
19461
19462 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19463
19464         * statement.cs: fixed build-breaker. All tests passed ok.
19465
19466 2002-06-27  Martin Baulig  <martin@gnome.org>
19467
19468         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19469         for System.Decimal when compiling corlib.
19470
19471 2002-06-27  Martin Baulig  <martin@gnome.org>
19472
19473         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19474         switch blocks which contain nothing but a default clause.
19475
19476 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19477
19478        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19479
19480 2002-06-27  Martin Baulig  <martin@gnome.org>
19481
19482         * ecore.cs (PropertyExpr.PropertyExpr): Call
19483         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19484
19485         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19486         is already a TypeBuilder.
19487
19488 2002-06-27  Martin Baulig  <martin@gnome.org>
19489
19490         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19491         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19492         the "from an array-type to System.Array" case.  This makes it work
19493         when compiling corlib.
19494
19495 2002-06-27  Martin Baulig  <martin@gnome.org>
19496
19497         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19498         non-static PropertyExpr, set its InstanceExpression.  This makes
19499         the `ICollection.Count' property work in System/Array.cs.
19500
19501 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19502
19503         * driver.cs: Made error handling more consistent.  Errors now
19504         tracked by Report class, so many methods which used to return int
19505         now return void.  Main() now prints success/failure and 
19506         errors/warnings message.
19507
19508         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19509         the magic number return values (123 and 124).  Now, if the
19510         expected error occurs, the compiler exits with success (exit value
19511         0).  If the compilation completes without seeing that particular
19512         error, the compiler exits with failure (exit value 1).  The
19513         makefile in mcs/errors has been changed to handle the new behaviour.
19514
19515         * report.cs: Made 'expected error' number a property and renamed
19516         it from 'Probe' to 'ExpectedError'.
19517
19518         * genericparser.cs: Removed error handling support, since it is
19519         now all done by Report class.
19520
19521         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19522         class, so parse() no longer returns an int.
19523
19524         * namespace.cs: Use Report.Error instead of GenericParser.error
19525
19526 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19527
19528         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19529         TypeContainer.AddOperator): At the front of the list put the
19530         explicit implementations, so they get resolved/defined first. 
19531
19532 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19533
19534         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19535         interface type is implemented by this TypeContainer.  Used during
19536         explicit interface implementation.
19537
19538         (Property.Define, Indexer.Define, Method.Define): Validate that
19539         the given interface in the explicit implementation is one of the
19540         base classes for the containing type.
19541
19542         Also if we are explicitly implementing an interface, but there is
19543         no match in the pending implementation table, report an error.
19544
19545         (Property.Define): Only define the property if we are
19546         not explicitly implementing a property from an interface.  Use the
19547         correct name also for those properties (the same CSC uses,
19548         although that is really not needed).
19549
19550         (Property.Emit): Do not emit attributes for explicitly implemented
19551         properties, as there is no TypeBuilder.
19552
19553         (Indexer.Emit): ditto.
19554
19555         Hiding then means that we do not really *implement* a pending
19556         implementation, which makes code fail.
19557
19558 2002-06-22  Martin Baulig  <martin@gnome.org>
19559
19560         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19561         the return value of Object.GetType().  [FIXME: we need to do this whenever
19562         we get a type back from the reflection library].
19563
19564 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19565
19566         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19567
19568 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19569
19570         * attribute.cs: Return null if we can not look up the type.
19571
19572         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19573         the interface types found.
19574
19575         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19576         interface types found.
19577
19578         * typemanager.cs (GetInterfaces): Make this routine returns alll
19579         the interfaces and work around the lame differences between
19580         System.Type and System.Reflection.Emit.TypeBuilder in the results
19581         result for GetInterfaces.
19582
19583         (ExpandInterfaces): Given an array of interface types, expand and
19584         eliminate repeated ocurrences of an interface.  This expands in
19585         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19586         be IA, IB, IC.
19587
19588 2002-06-21  Martin Baulig  <martin@gnome.org>
19589
19590         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19591         on System.Enum.
19592
19593 2002-06-21  Martin Baulig  <martin@gnome.org>
19594
19595         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
19596         and called with one of the core types, return the corresponding typebuilder for
19597         that type.
19598
19599         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
19600         element type.
19601
19602 2002-06-21  Martin Baulig  <martin@gnome.org>
19603
19604         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
19605         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
19606         (Expression.ConvertReferenceExplicit): Likewise.
19607
19608         * expression.cs (ElementAccess.DoResolve): Likewise.
19609         (ElementAccess.DoResolveLValue): Likewise.
19610
19611 2002-06-10  Martin Baulig  <martin@gnome.org>
19612
19613         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
19614         add the "value" parameter to the parameter list.
19615
19616         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
19617         to our caller.
19618
19619 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
19620
19621         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
19622         the argument to an int, uint, long or ulong, per the spec.  Also
19623         catch negative constants in array creation.
19624
19625 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
19626
19627         * class.cs: do not allow the same interface to appear twice in
19628         the definition list.
19629
19630 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
19631
19632         * ecore.cs: don't use ldlen with System.Array.
19633
19634 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
19635
19636         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
19637
19638 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
19639
19640         * modifiers.cs: produce correct field attributes for protected
19641         internal. Easy fix so miguel can work on ther harder stuff:-)
19642
19643 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
19644
19645         * pending.cs: New file.  Move the code from class.cs here.
19646         Support clearning the pending flag for all methods (when not doing
19647         explicit interface implementation).
19648
19649 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
19650
19651         * rootcontext.cs: added a couple more types needed to bootstrap.
19652
19653 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
19654
19655         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
19656         constructor in the type, instead of any constructor in the type
19657         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
19658         a bug in the Mono runtime when applying the params attribute). 
19659
19660 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
19661         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
19662
19663 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
19664
19665         * expression.cs (Unary.ResolveOperator): Use TypeManager
19666         to resolve the type.
19667
19668 2002-06-13  Ravi Pratap  <ravi@ximian.com>
19669
19670         * cs-parser.jay (enum_member_declaration): Pass in the attributes
19671         attached.
19672
19673         * enum.cs (AddEnumMember): Add support to store the attributes associated 
19674         with each member too.
19675
19676         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
19677         field builders too - this takes care of the enum member case.
19678
19679 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
19680
19681         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
19682         address-of operator on both value types and pointers.
19683
19684 2002-06-10  Martin Baulig  <martin@gnome.org>
19685
19686         * interface.cs (Interface.PopulateIndexer): Add the indexer's
19687         PropertyBuilder to the `property_builders' list.
19688
19689         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
19690         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
19691         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
19692         find any indexers which are inherited from an interface.
19693
19694 2002-06-09  Martin Baulig  <martin@gnome.org>
19695
19696         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
19697         the same type as the constant if necessary.  There's also a test-130.cs
19698         for this.
19699
19700         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
19701
19702         * typemanager.cs (TypeManager.ChangeType): Previously known as
19703         Enum.ChangeEnumType().
19704
19705 2002-06-09  Martin Baulig  <martin@gnome.org>
19706
19707         * expression.cs (Cast.TryReduce): Added support for consts.
19708
19709 2002-06-08  Ravi Pratap  <ravi@ximian.com>
19710
19711         * class.cs (Accessor): Hold attributes information so we can pass
19712         it along.
19713
19714         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
19715         Modify to pass in attributes attached to the methods.
19716
19717         (add_accessor_declaration, remove_accessor_declaration): Ditto.
19718
19719         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
19720         to handle the Accessor kind :-)
19721
19722         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
19723
19724 2002-06-08  Martin Baulig  <martin@gnome.org>
19725
19726         * expression.cs (Unary.TryReduceNegative): Added support for
19727         ULongConstants.
19728
19729 2002-06-08  Martin Baulig  <martin@gnome.org>
19730
19731         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
19732         name can't be found in the `defined_names' - the caller will do a
19733         MemberLookup in this case and thus find methods in System.Enum
19734         such as Enum.IsDefined().
19735
19736 2002-06-08  Martin Baulig  <martin@gnome.org>
19737
19738         * enum.cs (Enum.ChangeEnumType): This is a custom version of
19739         Convert.ChangeType() which works with TypeBuilder created types.
19740         (Enum.LookupEnumValue, Enum.Define): Use it here.
19741
19742         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
19743         `TypeBuilder.BaseType != null' check.
19744         (TypeContainer.FindMembers): Only lookup parent members if we
19745         actually have a parent.
19746         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
19747         (ConstructorInitializer.Resolve): Likewise.
19748
19749         * interface.cs (Interface.FindMembers): Added
19750         `TypeBuilder.BaseType != null' check.
19751
19752         * rootcontext.cs (RootContext.ResolveCore): Added
19753         "System.Runtime.CompilerServices.IndexerNameAttribute" to
19754         classes_second_stage.
19755
19756         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
19757         debug_type and trace_type when compiling with --nostdlib.       
19758
19759 2002-06-07  Martin Baulig  <martin@gnome.org>
19760
19761         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
19762         (AddField): Set it to true when adding a non-static field.
19763         (DefineType): Use `have_nonstatic_fields' to find out whether we
19764         have non-static fields, not `Fields != null'.
19765
19766 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
19767
19768         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
19769         dereferencing a null on the static-field code path)
19770
19771 2002-05-30  Martin Baulig  <martin@gnome.org>
19772
19773         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
19774         to take command line arguments.  Use reflection to call the new
19775         custom `Initialize' function on the symbol writer and pass it the
19776         command line arguments.
19777
19778         * driver.cs (--debug-args): New command line argument to pass command
19779         line arguments to the symbol writer.
19780
19781 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
19782
19783         * assign.cs (DoResolve): Forgot to do the implicit conversion to
19784         the target type for indexers and properties.  Thanks to Joe for
19785         catching this.
19786
19787 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
19788
19789         * typemanager.cs (MethodFlags): returns the method flags
19790         (Obsolete/ShouldIgnore) that control warning emission and whether
19791         the invocation should be made, or ignored. 
19792
19793         * expression.cs (Invocation.Emit): Remove previous hack, we should
19794         not do this on matching a base type, we should do this based on an attribute
19795
19796         Only emit calls to System.Diagnostics.Debug and
19797         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
19798         on the command line.
19799
19800         * rootcontext.cs: Global settings for tracing and debugging.
19801
19802         * cs-tokenizer.cs (define): New utility function to track
19803         defines.   Set the global settings for TRACE and DEBUG if found.
19804
19805 2002-05-25  Ravi Pratap  <ravi@ximian.com>
19806
19807         * interface.cs (Populate*): Pass in the TypeContainer as well as
19808         the DeclSpace as parameters so that we can create EmitContexts and
19809         then use that to apply attributes etc.
19810
19811         (PopulateMethod, PopulateEvent, PopulateProperty)
19812         (PopulateIndexer): Apply attributes everywhere.
19813
19814         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
19815         etc.
19816
19817         (ApplyAttributes): Update accordingly.
19818
19819         We now apply interface attributes for all members too.
19820
19821 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
19822
19823         * class.cs (Indexer.Define); Correctly check if we are explicit
19824         implementation (instead of checking the Name for a ".", we
19825         directly look up if the InterfaceType was specified).
19826
19827         Delay the creation of the PropertyBuilder.
19828
19829         Only create the PropertyBuilder if we are not an explicit
19830         interface implementation.   This means that explicit interface
19831         implementation members do not participate in regular function
19832         lookups, and hence fixes another major ambiguity problem in
19833         overload resolution (that was the visible effect).
19834
19835         (DefineMethod): Return whether we are doing an interface
19836         implementation. 
19837
19838         * typemanager.cs: Temporary hack until we get attributes in
19839         interfaces (Ravi is working on that) and we get IndexerName
19840         support in interfaces.
19841
19842         * interface.cs: Register the indexers as properties.
19843
19844         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
19845         warning, I have verified that this is a bug in the .NET runtime
19846         (JavaScript suffers of the same problem).
19847
19848         * typemanager.cs (MemberLookup): When looking up members for
19849         interfaces, the parent of an interface is the implicit
19850         System.Object (so we succeed in searches of Object methods in an
19851         interface method invocation.  Example:  IEnumerable x;  x.ToString
19852         ()) 
19853
19854 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
19855
19856         * class.cs (Event): Events should also register if they do
19857         implement the methods that an interface requires.
19858
19859         * typemanager.cs (MemberLookup); use the new GetInterfaces
19860         method. 
19861
19862         (GetInterfaces): The code used to lookup interfaces for a type is
19863         used in more than one place, factor it here. 
19864
19865         * driver.cs: Track the errors at the bottom of the file, we kept
19866         on going.
19867
19868         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
19869         instance if the method we are calling is static!
19870
19871 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
19872
19873         * attribute.cs (ApplyAttributes): Make this function filter out
19874         the IndexerName attribute (as that attribute in reality is never
19875         applied) and return the string constant for the IndexerName
19876         attribute. 
19877
19878         * class.cs (TypeContainer.Emit): Validate that all the indexers
19879         have the same IndexerName attribute, and if so, set the
19880         DefaultName attribute on the class. 
19881
19882         * typemanager.cs: The return value might contain other stuff (not
19883         only methods).  For instance, consider a method with an "Item"
19884         property and an Item method.
19885
19886         * class.cs: If there is a problem with the parameter types,
19887         return. 
19888
19889 2002-05-24  Ravi Pratap  <ravi@ximian.com>
19890
19891         * ecore.cs (ImplicitConversionExists): Wrapper function which also
19892         looks at user defined conversion after making a call to 
19893         StandardConversionExists - we need this for overload resolution.
19894
19895         * expression.cs : Update accordingly the various method calls.
19896
19897         This fixes 2 bugs filed against implicit user defined conversions 
19898
19899 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
19900
19901         * statement.cs: Track the result of the assignment.
19902
19903 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
19904
19905         * expression.cs (MemberAccess): Improved error reporting for
19906         inaccessible members.
19907
19908 2002-05-22  Martin Baulig  <martin@gnome.org>
19909
19910         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
19911         itself with debugging support.
19912
19913 2002-05-22  Martin Baulig  <martin@gnome.org>
19914
19915         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
19916         Removed, this isn't needed anymore.
19917
19918 2002-05-20  Martin Baulig  <martin@gnome.org>
19919
19920         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
19921         be underlying type for an enum.
19922
19923 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
19924
19925         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
19926         that splits out the loading of just the core types.
19927
19928         * rootcontext.cs (ResolveCore): Split the struct resolution in
19929         two, so we can load the enumeration underlying types before any
19930         enums are used.
19931
19932         * expression.cs (Is): Bandaid until we fix properly Switch (see
19933         bug #24985 for details).
19934
19935         * typemanager.cs (ImplementsInterface): The hashtable will contain
19936         a null if there are no interfaces implemented.
19937
19938 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
19939
19940         * cs-parser.jay (indexer_declarator): It is fine to have array
19941         parameters
19942
19943 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19944
19945         * typemanager.cs: (RegisterBuilder): New function used to register
19946         TypeBuilders that implement interfaces.  Since
19947         TypeBuilder.GetInterfaces (as usual) does not work with lame
19948         Reflection.Emit. 
19949         (AddUserType): register interfaces.
19950
19951         (ImplementsInterface): Use the builder_to_ifaces hash if we are
19952         dealing with TypeBuilder.  Also, arrays are showing up as
19953         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
19954         methods can not be invoked on them!
19955
19956         * ecore.cs (ExplicitReferenceConversionExists): Made public.
19957         (ImplicitReferenceConversionExists): Split out from
19958         StandardConversionExists. 
19959
19960         * expression.cs (As): We were only implementing one of the three
19961         cases for the as operator.  We now implement them all.
19962         (Is): Implement the various other cases for Is as well.
19963
19964         * typemanager.cs (CACHE): New define used to control if we want or
19965         not the FindMembers cache.  Seems to have a negative impact on
19966         performance currently
19967
19968         (MemberLookup): Nested types have full acess to
19969         enclosing type members
19970
19971         Remove code that coped with instance/static returns for events, we
19972         now catch this in RealFindMembers.
19973
19974         (RealFindMembers): only perform static lookup if the instance
19975         lookup did not return a type or an event.  
19976
19977 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19978
19979         * assign.cs (CompoundAssign): We pass more semantic information
19980         now to Compound Assignments than we did before: now we have all
19981         the information at hand, and now we resolve the target *before* we
19982         do the expression expansion, which allows the "CacheValue" method
19983         to have the effect we intended (before, a [x] += 1 would generate
19984         two differen ArrayAccess expressions from the ElementAccess,
19985         during the resolution process).
19986
19987         (CompoundAssign.DoResolve): Resolve target and original_source here.
19988
19989 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
19990
19991         * expression.cs (ArrayAccess): dropped debugging information. 
19992
19993         * typemanager.cs: Small bug fix: I was always returning i_members,
19994         instead of one of i_members or s_members (depending on which had
19995         the content).
19996
19997         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
19998         method is invoked before any code generation takes place, and it
19999         is a mechanism to inform that the expression will be invoked more
20000         than once, and that the method should use temporary values to
20001         avoid having side effects
20002
20003         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
20004
20005         * ecore.cs (Expression.CacheTemporaries): Provide empty default
20006         implementation.
20007
20008         * expression.cs (Indirection, ArrayAccess): Add support for
20009         CacheTemporaries in these two bad boys. 
20010
20011         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
20012         ldobj or ldind_ref.  
20013         (StoreFromPtr): Handle stobj as well.
20014
20015         * expression.cs (UnaryMutator): Share more code.
20016
20017         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
20018         down: I was not tracking the Filter function as well, which
20019         was affecting the results of the cache.
20020
20021 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
20022
20023         * attribute.cs: Remove the hack to handle the CharSet property on
20024         StructLayouts. 
20025
20026 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
20027
20028         * attribute.cs (DoResolve): More uglyness, we now only try to
20029         resolve the attribute partially, to extract the CharSet
20030         information (only if we are a StructLayout attribute).  Otherwise 
20031
20032         (GetExtraTypeInfo): Add some code to conditionally kill in the
20033         future this.   I am more and more convinced that the .NET
20034         framework has special code to handle the attribute setting on
20035         certain elements.
20036
20037         * expression.cs (IsParamsMethodApplicable): Revert my previous
20038         foreach change here, it was wrong.
20039
20040 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
20041
20042         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
20043         (pp_expr): do not abort on unknown input, just return.
20044         (eval): abort if there are pending chars.
20045
20046         * attribute.cs (Attribute.Resolve): Positional parameters are
20047         optional.  Deal with that case.
20048
20049         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
20050         the Ansi/Unicode/Auto information for the type.
20051
20052         (TypeContainer.DefineType): instantiate the EmitContext here, as
20053         we will be using it during the type definition (to resolve
20054         attributes) and during the emit phase.
20055
20056         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
20057         to pull type information out of the attributes
20058
20059         (Attribute.Resolve): track the constructor builder, and allow for
20060         multiple invocations (structs and classes will use this).
20061
20062         * ecore.cs (MemberLookupFinal): new version with all the
20063         parameters customizable.
20064
20065         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
20066         constructors.  Return if the result value is null (as the error
20067         would have been flagged already by MemberLookupFinal)
20068
20069         Do not allow instances of abstract classes or interfaces to be
20070         created.
20071
20072         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
20073         We have to compare the assembly property here when dealing with
20074         FamANDAssem and Assembly access modifiers, because we might be
20075         creating an assembly from *modules* (that means that we are not
20076         getting TypeBuilders for types defined in other modules that are
20077         part of this assembly).
20078
20079         (Method.Emit): If the method is marked abstract and has a body,
20080         emit an error. 
20081
20082         (TypeContainer.DefineMembers): If both the defined member and the
20083         parent name match are methods, then do not emit any warnings: let
20084         the Method.Define routine take care of flagging warnings.  But if
20085         there is a mismatch (method overrides something else, or method is
20086         overriwritten by something, then emit warning).
20087
20088         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
20089         set to null, this means `do not check for the return type on the
20090         signature'. 
20091
20092         (Method.Define): set the return type for the method signature to
20093         null, so that we get methods with the same name and parameters and
20094         different return types.  This is used to flag warning 114 (you are
20095         hiding a method, and you probably want to use the new/override
20096         keywords instead).
20097
20098         * typemanager.cs (MemberLookup): Implemented proper access
20099         control, closing a long standing set of bug reports.  The problem
20100         was that the Framework only has two bits: Public and NonPublic,
20101         and NonPublic includes private and protected methods, but we need
20102         to enforce the FamANDAssem, FamOrAssem and Family. 
20103
20104 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
20105
20106         * statement.cs (GotoCase): Return true: Ammounts to giving up
20107         knowledge on whether we return or not, and letting the other case
20108         be responsible for it.
20109
20110 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
20111
20112         * driver.cs: Do not load directories for each file processed, only
20113         do it if there is a pattern.
20114
20115         * ecore.cs: Report readonly assigns here as well, as we might have
20116         been resolved only by MemberAccess.
20117
20118         (SimpleName.SimpleNameResolve): Also be useful for LValue
20119         resolution.   We need this to propagate assign to local readonly variables
20120
20121         * typemanager.cs: Use a ptrhashtable for the criteria, because we
20122         do not want to reuse potential criteria memory.
20123
20124         * class.cs (MyEventBuilder): Set reflected_type;
20125
20126         * ecore.cs (Constantify): Added support for constifying bools.
20127
20128         (RootContext.LookupType): Added a cache for values looked up in
20129         the declaration space.
20130
20131         * typemanager.cs (FindMembers): Now is a front-end to
20132         RealFindMembers, and provides a two-level hashtable-based cache to
20133         the request.  
20134
20135         15% performance improvement: from 22.5 to 19.2 seconds.
20136
20137         * expression.cs (IsParamsMethodApplicable): use foreach.
20138         (Invocation.DoResolve): ditto.
20139         (New.DoResolve): ditto.
20140         (ArrayCreation.DoResolve): ditto.
20141
20142         * ecore.cs (FindMostEncompassingType): use foreach.
20143
20144         * delegate.cs (NewDelegate.DoResolve): Use foreach
20145
20146         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
20147         (RemoveMethods): use foreach.
20148
20149         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
20150         nested foreach statements instead of for, and also break out of
20151         the inner loop once a match is found.
20152
20153         (Invocation.OverloadResolve): Use foreach, simplify the code. 
20154
20155 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
20156
20157         * cfold.cs (BinaryFold): During an enumeration evaluation context,
20158         we actually unwrap the expression to allow for extra information
20159         to be extracted. 
20160
20161         * expression.cs: Use Shr_Un on unsigned operations. 
20162
20163 2002-05-08  Ravi Pratap  <ravi@ximian.com>
20164
20165         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
20166         applicable operators was not being considered correctly. This closes
20167         the bug Miguel reported.
20168
20169 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
20170
20171         * attribute.cs: check that the type derives from System.Attribute
20172         and report the correct error in that case (moved the duplicate code to
20173         its own method, too).
20174
20175 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
20176
20177         * attribute.cs: lookup attribute type name as the spec says: first the
20178         bare attribute name and then name + "Attribute" (nant compiles with
20179         mcs after this fix).
20180
20181 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
20182
20183         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
20184         Because of the way we parse things, we should try to see if a
20185         UIntConstant can fit in an integer.
20186
20187 2002-05-07  Ravi Pratap  <ravi@ximian.com>
20188
20189         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
20190         when we are in an explicit context.
20191
20192         (ConvertReferenceExplicit): When converting from Iface type S to Class
20193         T make sure the rules are implemented as an OR.
20194
20195         * parameter.cs (ParameterType): Make it a property for now although the
20196         purpose really isn't anything immediate.
20197
20198         * expression.cs (Is*Applicable): Do better checking on the parameter type
20199         of a ref/out parameter. The ones from the system assemblies are already 
20200         marked with the correct type so we don't need to do any correction.
20201
20202         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
20203         the object type is standard too so include that.
20204
20205 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20206
20207         * ecore.cs (StandardConversionExists): Augment with missing code:
20208         deal with IntConstant, LongConstants and Enumerations.
20209
20210         * assign.cs: Report the error, instead of failing silently
20211
20212         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
20213         typecontainer that they are declared, because the
20214         typecontainer/namespace will have the list of using clauses that
20215         need to be applied.
20216
20217         Assembly Attributes were escaping the normal registration
20218         mechanism. 
20219
20220         (EmitCode): Apply attributes within an EmitContext that represents
20221         the container they were declared on.
20222
20223         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
20224
20225 2002-05-06  Ravi Pratap  <ravi@ximian.com>
20226
20227         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
20228         Revamp completely - make much cleaner as we now operate only
20229         on a set of Types.
20230
20231         (FindMostSpecificSource, FindMostSpecificTarget): New methods
20232         to implement the logic detailed in the spec more correctly.
20233
20234         (UserDefinedConversion): Update accordingly.
20235
20236 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20237
20238         * statement.cs: Return flow analysis information up.
20239
20240         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
20241         and the default.
20242
20243         (token): Do not consume an extra character before calling
20244         decimal_digits.
20245
20246 2002-05-06  Piers Haken <piersh@friskit.com>
20247
20248         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
20249
20250 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20251
20252         * class.cs (Constructor.Emit): Set the IsStatic flag in the
20253         EmitContext during the instance constructor initializer
20254         resolution, to stop access to instance variables.
20255
20256         This is mandated by the spec, last paragraph of the `constructor
20257         initializers' section. 
20258
20259 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
20260
20261         * cs-parser.jay, class.cs (Accessor): new class used to represent
20262         an accessor (get or set).  In the past we used `null' to represent
20263         a missing accessor.  But this is ambiguous because there was no
20264         way to tell in abstract indexers/properties if one of them was
20265         specified.
20266
20267         Now there is a way of addressing that.
20268
20269         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
20270         instead of FindMembers.
20271
20272         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
20273         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
20274
20275         * attribute.cs: Treat indexers and properties as the same in terms
20276         of applying attributes
20277
20278         * ecore.cs (FindMostEncompassedType): Use statically initialized
20279         EmptyExpressions()s like we do elsewhere to avoid creating useless
20280         objects (and we take this out of the tight loop).
20281
20282         (GetConversionOperators): Move the code to extract the actual
20283         operators to a separate routine to clean things up.
20284
20285 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
20286
20287         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
20288         events are always registered FieldBuilders.
20289
20290         * class.cs (FieldBase): New class shared by Fields 
20291
20292         * delegate.cs: If we are a toplevel delegate, use our full name.
20293         If we are a nested delegate, then only use our tail name.
20294
20295 2002-05-02  Ravi Pratap  <ravi@ximian.com>
20296
20297         * expression.cs (IsApplicable): Ensure that we add the "&" to
20298         ref/out types before comparing it with the type of the argument.
20299
20300         (IsParamsMethodApplicable): Ditto.
20301
20302         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
20303         silly me ;-)
20304
20305         * delegate.cs : Handle the case when we have more than one applicable
20306         method. Flag an error only when we finish checking all.
20307
20308 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
20309
20310         * expression.cs: Add support for boolean static initializers.
20311
20312 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
20313
20314         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
20315
20316         * parameter.cs (ComputeParameterTypes,
20317         ComputeAndDefineParameterTypes): Better error handling: now we
20318         clear the `types' cache if we fail during any of the type lookups.
20319         We also return the status code correctly to our caller
20320
20321         * delegate.cs: If we fail to define a delegate, abort the extra
20322         steps. 
20323
20324         * expression.cs (Binary.ResolveOperator): for
20325         operator==(object,object) and operator !=(object, object) we also
20326         have to verify that there is an implicit conversion from one to
20327         the other.
20328
20329         (ArrayAccess.DoResolve): Array Access can operate on
20330         non-variables. 
20331
20332 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
20333
20334         * assign.cs (CompoundAssign): A new class used as a "flag" that
20335         the assignment actually is happening as part of a compound
20336         assignment operator.
20337
20338         During compound assignment, a few new rules exist to enable things
20339         like:
20340
20341         byte b |= 1 + 2
20342
20343         From the spec:
20344
20345         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
20346         to the type of x) if y is implicitly convertible to the type of x,
20347         and the operator is a builtin operator and the return type of the
20348         operator is explicitly convertible to the type of x. 
20349
20350         * rootcontext.cs: Reset warning level to 2.  4 catches various
20351         "interesting" features in mcs, we must clean this up at some
20352         point, but currently am trying to kill other bugs ;-)
20353
20354         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
20355         in container classes as well.  
20356
20357         * expression.cs (Binary.ResolveOperator): Handle string case
20358         before anything else (as operator overloading does emit an error
20359         before doing anything else).
20360
20361         This code could go away when we move to a table driven model, but
20362         i could not come up with a good plan last night.
20363
20364 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
20365
20366         * typemanager.cs (CSharpName): reimplementation using regex.
20367         * class.cs: added null check for fields in Emit
20368         * rootcontext.cs: set warninglevel to 4
20369
20370 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
20371
20372         * typemanager.cs (CSharpName): reimplemented with Lupus
20373         suggestion.
20374
20375 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
20376
20377         * statement.cs (If): correclty implement Resolve, because we were
20378         not catching sem errors in there.  The same process is needed
20379         everywhere else. 
20380         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
20381
20382
20383         (Statement.Warning_DeadCodeFound): Factorize code.
20384         (While): Report dead code here too.
20385
20386         (Statement): Added Resolve virtual method to allow
20387         for resolution split from the emit code.
20388
20389 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20390
20391         * statement.cs (EmitBoolExpression): No longer try to resolve the
20392         expression here.    
20393         (MakeBoolean): New utility function that resolve, implicitly
20394         converts to boolean and tags the expression. 
20395
20396
20397         (If, Do): Implement dead code elimination.
20398         (While): Implement loop inversion
20399
20400         (Do, While, For, If): Resolve the expression prior to calling our
20401         code generation.
20402
20403 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
20404
20405         * class.cs:
20406           - added method Report28 (warning: program has more than one entry point)
20407           - added method IsEntryPoint, implements paragraph 10.1 of the spec
20408           - modified method Method.Define, the part at the end of the method
20409
20410         * rootcontext.cs: added static public Location EntryPointLocation;
20411           
20412         * ../errors/cs0028.cs : Add test case for the above warning.              
20413
20414         * typemanager.cs:
20415           - modified method CSharpName to allow arrays of primitive type to
20416             be printed nicely (e.g. instead of System.Int32[][] it now prints
20417             int[][])
20418           - added method CSharpSignature: returns the signature of a method
20419             in string format to be used in reporting errors, warnings, etc.
20420
20421         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
20422         with String.Empty.
20423
20424 2002-04-26  Ravi Pratap  <ravi@ximian.com>
20425
20426         * delegate.cs (Define): Fix extremely silly bug where I was
20427         setting the type of the 'object' parameter of the BeginInvoke
20428         method to System.IAsyncResult instead of System.Object ;-)
20429
20430 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20431
20432         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
20433         here. 
20434
20435         (Constructor.Emit): return if we fail to initialize the
20436         constructor.  Another door closed!  
20437
20438         * expression.cs (New.DoResolve): Improve error message (from -6 to
20439         1501).  Use DeclaredOnly lookup to find the exact constructor.
20440
20441         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
20442         loop.  This is useful.
20443
20444         * cs-parser.jay: Adjust the default parameters so that destructors
20445         have the proper signature.
20446
20447 2002-04-26  Martin Baulig  <martin@gnome.org>
20448
20449         * driver.cs (LoadAssembly): If `assembly' contains any characters
20450         which are only valid in path names and not in assembly names
20451         (currently slash, backslash and point), use Assembly.LoadFrom ()
20452         instead of Assembly.Load () on the `assembly' (before iteration
20453         over the link_paths).
20454
20455 2002-04-26  Martin Baulig  <martin@gnome.org>
20456
20457         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
20458
20459 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
20460
20461         * class.cs (Property): use the new typemanager.MemberLookup
20462
20463         (TypeContainer.MemberLookup): Implement using the
20464         TypeManager.MemberLookup now. 
20465
20466         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20467         and return MemberInfos, so that these can be used without an
20468         EmitContext (what we had before).
20469
20470 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20471
20472         * expression.cs: Fix the case where the argument to params if the
20473         type of the params.  I omitted handling this before.   Fixed
20474
20475 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20476
20477         * driver.cs: Call BootCorlib_PopulateCoreType
20478
20479         * class.cs (Property.CheckBase): Check for properties only, not
20480         for all members. 
20481
20482         * interface.cs: Temporary hack: try/catch around the
20483         CustomAttributeBuilder, because I am getting an exception that I
20484         do not understand.
20485
20486         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20487         types whose definitions are required to be there (attributes are
20488         defined before standard types).
20489
20490         Compute definitions as we boot the various types, as they are used
20491         immediately (value_type class will need object_type, but if we do
20492         not initialize object_type, we will pass a null, which will let
20493         the runtime pick the System.Object from the existing corlib, which
20494         is not what we want).
20495
20496 2002-04-22  Patrik Torstensson <totte@labs2.com>
20497
20498         * cs-tokenizer.cs: fixed a number of trim() issues.
20499
20500 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20501
20502         * expression.cs (Argument.Type): Ensure that we return the correct
20503         type when we have out or ref parameters [in which case we 
20504         append a "&"].
20505
20506 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20507
20508         * class.cs (Property, Indexer): Allow extern modifier in there. 
20509
20510         * typemanager.cs (InitBaseTypes): Initializes object_type and
20511         value_type, since those will be used early on during the bootstrap
20512         process to compile corlib.
20513
20514         (InitCoreTypes): Move code from here to InitBaseTypes.
20515
20516 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20517
20518         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20519         single-dimension arrays as using the ldlen opcode.  
20520
20521         Daniel Lewis discovered this optimization.  
20522
20523         * typemanager.cs: Add signature for System.Array::get_Length
20524
20525 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20526
20527         * statement.cs: report the error when the foreach does not apply to an
20528         array nor a collection.
20529
20530 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20531
20532         * expression.cs: Add implicit conversions to the operator ~.
20533
20534         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20535
20536         * typemanager.cs: Locate the decimal constructor.
20537
20538 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20539
20540         * attribute.cs: use the new property of TypeOf.
20541         * expression.cs: added 'get' property around typearg.
20542
20543         These changes fix a build breaker reported by NickD. Is this the
20544         correct way to fix?  If not, please, revert my changes and make it
20545         work :-).
20546
20547 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20548
20549         * attribute.cs: Add support for typeof in attribute invocations.
20550         I am not sure that this is right though.
20551
20552 2002-04-14  Duncan Mak  <duncan@ximian.com>
20553
20554         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20555         Binary.Operator.Division case.
20556
20557 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20558
20559         * class.cs (DefineType): Ensure that we do a proper check on
20560         attribute types and also register it with the TypeManager.
20561
20562         (TypeContainer.Targets): The default for attribute types is
20563         AttributeTargets.All.
20564
20565         * attribute.cs (ApplyAttributes): Registering the attribute type
20566         is done elsewhere, not when we discover we have a Usage attribute.
20567
20568 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20569
20570         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20571         and get rid of is_delegate parameter.
20572
20573         * everywhere : update.
20574
20575 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20576
20577         * cs-parser.jay (compilation_unit): Revamp completely to use
20578         some new ideas that I got from Rhys' grammar to solve the problems
20579         with assembly level attributes.
20580
20581         (outer_declaration): New grammar production.
20582
20583         (attribute_sections): Add.
20584
20585         (opt_attributes): Base on attribute_sections
20586
20587         (namespace_declaration): Allow opt_attributes to tackle the case
20588         when we have assembly level attributes - we are clever in this
20589         regard now ;-)
20590
20591         * attribute.cs (ApplyAttributes): Do not worry about assembly 
20592         attributes in the non-global context.
20593
20594         * rootcontext.cs (AddGlobalAttributes): Go back to using this
20595         instead of SetGlobalAttributes.
20596
20597         * class.cs, rootcontext.cs : Ensure we define and generate 
20598         attribute types before anything else.
20599
20600         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
20601         and flag the new error -20 for the case when the attribute type
20602         does not have valid targets specified. csc does not catch this.
20603
20604         * ../errors/errors.txt : update for error # -20
20605
20606 2002-04-11  Ravi Pratap  <ravi@ximian.com>
20607
20608         * support.cs (InternalParameters.ParameterModifier): Do some null
20609         checking and return sane values.
20610
20611         * class.cs (Method.Define): If we are a PInvoke method, ensure
20612         that we are static and extern. Report error # 601
20613
20614         * ../errors/cs0601.cs : Add test case for the above error.
20615
20616 2002-04-07  Ravi Pratap  <ravi@ximian.com>
20617
20618         * rootcontext.cs (attribute_types): We need to keep type of
20619         all attribute types separately and emit code for them first.
20620
20621         (RegisterAttribute) : Implement.
20622
20623         * class.cs (DefineType): Check if the current Type is a custom
20624         attribute type and register it accordingly.
20625
20626         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
20627         adding the first attribute twice and rename to
20628
20629         (SetGlobalAttributes): this.
20630
20631         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
20632         lookups.
20633
20634         * attribute.cs (ApplyAttributes): Take an additional argument telling us
20635         if we are processing global arguments. Hmm, I am unsure of this.
20636
20637 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20638
20639         * expression.cs: added static array of strings to avoid calling
20640         Enum.ToString () for Operator in Binary. Significant recover of
20641         performance.
20642
20643 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
20644
20645         * class.cs (FindMembers): Allow the Builders of the various
20646         members to be null.  If they are skip them.  This only happens
20647         during the PInvoke declaration.
20648
20649 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
20650
20651         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
20652         failure, so we do not keep going afterwards.
20653
20654         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
20655         wanted to pass `false' as the `is_delegate' argument.  If this is
20656         the case, why not use delegate_type == null to mean `is_delegate =
20657         false' and anything else as is_delegate = true.
20658
20659 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
20660
20661         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
20662         code for the section, not the beginning of the tests.
20663
20664 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
20665
20666         * cfold.cs: Handle operator + (Enum x, Underlying x) 
20667
20668         * expression.cs (Binary): same.  Warn about errors where we have
20669         Enum/Enum in operator + as well.
20670
20671 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
20672
20673         * statement.cs:
20674                 - added support for switch(bool)
20675                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
20676                 - add TableSwitchEmit() to handle table-based switch statements
20677
20678 2002-04-05  Ravi Pratap  <ravi@ximian.com>
20679
20680         * expression.cs (Invocation.OverloadResolve): Factor out code which
20681         does parameter compatibility checking with arguments so that we can 
20682         re-use the code even from Delegate.VerifyApplicability
20683
20684         (VerifyArgumentsCompat): Move above code here.
20685
20686         * delegate.cs (VerifyApplicability): Get rid of duplicate code
20687         and instead make a call to the above method.
20688
20689 2002-03-31  Ravi Pratap  <ravi@ximian.com>
20690
20691         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
20692         We use it to keep track of classes which are attribute types.
20693
20694 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
20695
20696         * delegate.cs (Delegate.Define): Correctly define the types in the
20697         presence of fixed and array parameters.
20698
20699         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
20700         doing FindMembers.
20701
20702         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
20703         include NonPublic after the first iteration.
20704
20705         * class.cs (Indexer.CheckBase): Only check if both parents are
20706         non-null. 
20707
20708         * cs-parser.jay (accessor_body): If empty, set to null.
20709
20710         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
20711         same code path here to resolve constants names that we did have in
20712         MemberAccess.DoResolve.  There is too much code duplicated here.
20713
20714 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
20715
20716         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
20717
20718         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
20719         to MakeUnionSet.
20720
20721         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
20722         tokens, numbers and strings.
20723
20724         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
20725         parenthesis.
20726
20727         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
20728         asyncronous parameters and the regular parameters.  
20729
20730         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
20731         specify the target directory.
20732
20733         * expression.cs: (This.DoResolve): Simplify
20734         (As.Emit): Optimize, do not generate IsInst if the expression is
20735         always of the given type.
20736
20737         (Is.DoResolve): Bug fix, we were reporting both always/never for
20738         the is expression.
20739
20740         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
20741         creating too many unnecessary arrays.
20742
20743 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
20744
20745         * class.cs (EmitFieldInitializer): Use Assign expression to assign
20746         fields instead of rolling our own initializer.   Takes care of all
20747         implicit conversions, and drops unnecessary static checks/argument.
20748
20749 2002-03-31  Dick Porter  <dick@ximian.com>
20750
20751         * driver.cs: use the GetDirectories() return values properly, and
20752         use "/" as path separator.
20753
20754 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
20755
20756         * expression.cs (Unary): Optimize - - expr into expr.
20757         (Binary): Optimize a + (-b) into a -b.
20758
20759         * codegen.cs (CodeGen): Made all methods static.
20760
20761 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
20762
20763         * rootcontext.cs: 
20764
20765         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
20766         TypeBuilder property.
20767
20768         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
20769         instead. 
20770
20771         * tree.cs: Removed the various RecordXXXX, and replaced with a
20772         single RecordDecl.  Removed all the accessor methods, and just
20773         left a single access point Type 
20774
20775         * enum.cs: Rename DefineEnum to DefineType.
20776
20777         * decl.cs: New abstract method `DefineType' used to unify the
20778         Defines for Enumerations, Interfaces, TypeContainers and
20779         Delegates.
20780
20781         (FindType): Moved LookupInterfaceOrClass here.  Moved the
20782         LookupBaseClasses method that used to live in class.cs and
20783         interface.cs here, and renamed to FindType.
20784
20785         * delegate.cs: Implement DefineType.  Take advantage of the
20786         refactored pattern for locating the parent builder without taking
20787         the parent_builder argument (which we know does not work if we are
20788         nested, and triggering a toplevel definition).
20789
20790 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20791
20792         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
20793         accessibility of a member has changed during override and report
20794         an error if so.
20795
20796         * class.cs (Method.Define, Property.Define): Only complain on
20797         overrides if the method is private, any other accessibility is
20798         fine (and since we just checked the permission is the same, we are
20799         good to go).
20800
20801         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
20802         and elif are processed always.  The other pre-processing
20803         directives are only processed if we are "taking" the path
20804
20805 2002-03-29  Martin Baulig  <martin@gnome.org>
20806
20807         * class.cs (Method.Emit): Only emit symbolic debugging info if the
20808         current location is not Null.
20809
20810         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
20811         a separate method so we can profile it.
20812
20813         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
20814         `span.Seconds' are just seconds, but no minutes or hours.
20815         (MainDriver): Profile the CodeGen.SaveSymbols calls.
20816
20817 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20818
20819         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
20820         Remove the gratuitous set of Final:
20821
20822                                 // If an interface implementation, then we can set Final.
20823                                 if (((flags & MethodAttributes.Abstract) == 0) &&
20824                                     implementing.DeclaringType.IsInterface)
20825                                         flags |= MethodAttributes.Final;
20826
20827         I do not know what I was smoking when I used that.
20828
20829
20830         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
20831         step into fixing the name resolution issues for delegates and
20832         unifying the toplevel name resolution.
20833
20834 2002-03-28  Martin Baulig  <martin@gnome.org>
20835
20836         * class.cs (Method.Emit): If we have a symbol writer, call its
20837         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
20838         tell it about the current method.
20839
20840         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
20841         writer that we're going to emit the first byte of IL code for a new
20842         statement (a new source line).
20843         (EmitContext.EmitTopBlock): If we have a symbol writer, call
20844         EmitContext.Mark() before emitting any code.
20845
20846         * location.cs (SymbolDocument): Return null when we're Null.
20847
20848         * statement.cs (Statement): Moved the `Location loc' variable here.
20849         (Statement.EmitBoolExpression): If we have a symbol writer, call
20850         ec.Mark() before emitting any code to tell it that we're at the
20851         beginning of a new statement.
20852         (StatementExpression): Added `Location' argument to the constructor.
20853         (Block): Added public readonly variable `StartLocation' and public
20854         variable `EndLocation'.  The latter is to be set using SetEndLocation().
20855         (Block): Added constructor which takes a start and end location.
20856         (Block.SetEndLocation): New method. This sets the end location.
20857         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
20858         local variables we create.
20859         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
20860         each statement and do also mark the begin and end of the block.
20861
20862         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
20863         tell it the current lexer.Location, use Location.Null for the end of the
20864         block.
20865         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
20866         current block, set its end location using SetEndLocation().
20867         (statement_expression): StatementExpression constructor now takes the
20868         lexer.Location as additional argument.
20869         (for_statement, declare_local_variables): Likewise.
20870         (declare_local_variables): When creating a new implicit block, use the
20871         new Block constructor and pass it the lexer.Location.
20872
20873 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20874
20875         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
20876         members also on the parent interfaces recursively.
20877
20878 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
20879
20880         * report.cs: Use new formats, since Gonzalo finished the missing
20881         bits. 
20882
20883         * expression.cs (Binary.ResolveOperator): added missing operator|
20884         operator& and operator^ for bool/bool.
20885
20886         * cs-parser.jay: CheckDef now takes a Location argument that is
20887         used to report errors more precisly (instead of reporting the end
20888         of a definition, we try to track something which is a lot closer
20889         to the source of the problem).
20890
20891         * cs-tokenizer.cs: Track global token use, so we can properly flag
20892         the use of #define/#undef after the first token has been seen.
20893
20894         Also, rename the reportXXXX to Error_DescriptiveName
20895
20896         * decl.cs (DeclSpace.IsTopLevel): Move property here from
20897         TypeContainer, so that Enum and Interface can use this too.
20898
20899         * class.cs (TypeContainer.LookupInterfaceOrClass,
20900         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
20901         `builder' argument.  Typically this was used to pass the parent
20902         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
20903         the definition).  
20904
20905         The problem is that a nested class could trigger the definition of
20906         a toplevel class, and the builder would be obviously wrong in that
20907         case. 
20908
20909         So we drop this argument, and we compute dynamically the
20910         TypeBuilder/ModuleBuilder (the correct information was available
20911         to us anyways from DeclSpace.Parent)
20912
20913         * interface.cs (Interface.DefineInterface): Drop builder
20914         parameter cleanup like class.cs
20915
20916         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
20917         like class.cs
20918
20919         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
20920         values. 
20921
20922         (Try.Emit): Propagate the returns value from the statement.
20923
20924         (Return.Emit): Even if we are leavning 
20925
20926         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
20927
20928         * modifiers.cs: Fix the computation of MethodAttributes flags.
20929
20930 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
20931
20932         * driver.cs: allow compilation of files that start with '/'.
20933         Add a default case when checking the argument of --target.
20934
20935 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
20936
20937         * interface.cs: Implement the same search algorithm for types in
20938         the interface code.
20939
20940         * delegate.cs: Do not allow multiple definition.
20941
20942         * Recovered ChangeLog that got accidentally amputated
20943
20944         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
20945
20946         * rootcontext.cs: Load manually enum to allow core classes to
20947         contain enumerations.
20948
20949         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
20950         Update to new static methods in TypeManager.
20951
20952         * typemanager.cs (GetMethod, GetConstructor): Use our
20953         implementation of FindMembers to find the members, since during
20954         corlib compilation, the types are TypeBuilders and GetMethod and
20955         GetConstructor do not work.
20956
20957         Make all methods in TypeManager static.
20958
20959         (InitCodeHelpers): Split the functionality from
20960         the InitCodeTypes function.
20961
20962         * driver.cs: Call InitCodeHelpers after we have populated the
20963         types. 
20964
20965         * cs-parser.jay (delegate_declaration): we did not used to compute
20966         the delegate name correctly for void delegates.
20967
20968 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
20969
20970         * rootcontext.cs (RootContext): Init the interface_resolve_order
20971         and type_container_resolve_order always.
20972
20973         (ResolveCore, BootstrapCorlib_ResolveClass,
20974         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
20975         compiler when compiling with --nostdlib
20976
20977         * class.cs (TypeContainer.DefineType): Check that our parent is
20978         not null.  This test is most important when we are bootstraping
20979         the core types.
20980
20981         * codegen.cs: Split out the symbol writing code.
20982
20983 2002-03-25  Martin Baulig  <martin@gnome.org>
20984
20985         * driver.cs (-g): Made -g an alias for --debug.
20986
20987 2002-03-24  Martin Baulig  <martin@gnome.org>
20988
20989         * codegen.cs (SymbolWriter): New public variable. Returns the
20990         current symbol writer.
20991         (CodeGen): Added `bool want_debugging_support' argument to the
20992          constructor. If true, tell the ModuleBuild that we want debugging
20993         support and ask it for the ISymbolWriter.
20994         (Save): If we have a symbol writer, call it's Close() method after
20995         saving the assembly.
20996
20997         * driver.c (--debug): New command line argument to create a
20998         debugger information file.
20999
21000         * location.cs (SymbolDocument): New public property. Returns an
21001         ISymbolDocumentWriter object for the current source file or null
21002         if we don't have a symbol writer.
21003
21004 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
21005
21006         * driver.cs (LoadAssembly): Correctly return when all the paths
21007         have been tried and not before.
21008
21009         * statement.cs (Switch.Emit): return the actual coverage for this
21010         statement (returns/not-returns)
21011
21012         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
21013         switch of the statement if we are the last switch section.  That
21014         kills two problems: try/catch problems (we used to emit an empty
21015         nop at the end) and switch statements where all branches would
21016         return. 
21017
21018 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
21019
21020         * driver.cs: Add default assemblies (the equivalent to the
21021         Microsoft CSC.RSP file)
21022
21023         * cs-tokenizer.cs: When updating `cols and setting it to zero,
21024         also update tokens_seen and set it to false.
21025
21026         * driver.cs: Implement --recurse for Mike.
21027
21028         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
21029         correctly splitting out the paths.
21030
21031 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
21032
21033         * interface.cs (Interface.PopulateProperty): Instead of using
21034         `parent' as the declaration space for the set parameters, use
21035         `this' 
21036
21037         * support.cs (InternalParameters): InternalParameters constructor
21038         takes a DeclSpace instead of a TypeContainer.
21039
21040         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
21041         types are being initialized, load the address of it before calling
21042         the function.  
21043
21044         (New): Provide a mechanism to disable the generation of local
21045         value type temporaries when the caller will be providing us with
21046         an address to store it.
21047
21048         (ArrayCreation.EmitDynamicInitializers): Use it.
21049
21050 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
21051
21052         * expression.cs (Invocation.EmitArguments): Only probe for array
21053         property if there is more than one argument.  Sorry about that.
21054
21055         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
21056         empty param arrays.
21057
21058         * class.cs (Method.LabelParameters): Fix incorrect code path that
21059         prevented the `ParamArrayAttribute' from being applied to the
21060         params attribute.
21061
21062 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
21063
21064         * support.cs (ReflectionParameters): Correctly compute whether the
21065         last argument is a params array.  Fixes the problem with
21066         string.Split ('a')
21067
21068         * typemanager.cs: Make the assemblies array always be non-null
21069         (empty, but non-null)
21070
21071         * tree.cs (RecordDecl): New function that abstracts the recording
21072         of names.  This reports error 101, and provides a pointer to the
21073         previous declaration.  Fixes a crash in the compiler.
21074
21075         * cs-parser.jay (constructor_declaration): Update to new grammar,
21076         and provide a constructor_body that can be empty.
21077
21078 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
21079
21080         * driver.cs: Add support for --resources.
21081
21082         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
21083         Make all types for the various array helper methods be integer.
21084
21085         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
21086         CheckState to ConvCast.
21087
21088         (ConvCast): Now it takes a `checked' state argument, to avoid
21089         depending on the emit context for the conversion, and just using
21090         the resolve time setting.
21091
21092         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
21093         instead of Invocation.EmitArguments.  We do not emit the original
21094         arguments, instead we emit those which have been converted to
21095         unsigned int expressions.
21096
21097         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
21098
21099         * codegen.cs: ditto.
21100
21101         * expression.cs (LocalVariableReference): Drop the use of the
21102         Store function that depended on the variable index.
21103
21104         * statement.cs (VariableInfo): Drop the `Idx' property from this
21105         class, as this is not taking into account the indexes for
21106         temporaries tat we generate during the execution, getting the
21107         indexes wrong.
21108
21109         * class.cs: First emit class initializers, then call the parent
21110         constructor. 
21111
21112         * expression.cs (Binary): Fix opcode emision.
21113         (UnaryMutator.EmitCode): Support checked code generation
21114
21115         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
21116         matches for events for both the Static and Instance scans,
21117         pointing to the same element.   Fix that.
21118
21119 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
21120
21121         * rootcontext.cs (ResolveTree): Always set the
21122         interface_resolve_order, because nested interfaces will be calling
21123         into us.
21124
21125         * class.cs (GetInterfaceOrClass): Track the same resolution
21126         process used by TypeManager.LookupType.  This fixes the nested
21127         type lookups in class declarations (separate path from
21128         LookupType). 
21129
21130         (TypeContainer.DefineType): Also define nested interfaces.
21131         (TypeContainer.RegisterOrder): New public function used to
21132         register the order in which child interfaces need to be closed.
21133
21134         Nested interfaces need to be closed after their parents have been
21135         created. 
21136
21137         * interface.cs (InterfaceAttr): Put all the logic for computing
21138         the interface attribute here. 
21139
21140         (DefineInterface): Register our interface order with the
21141         RootContext or with the TypeContainer depending on the case.
21142
21143 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21144
21145         * cs-parser.jay: rework foreach statement to work with the new
21146         changes to the policy on SimpleNames.
21147
21148         * report.cs: support Stacktrace on warnings as well.
21149
21150         * makefile: drop --unsafe and /unsafe from the compile.
21151
21152 2002-03-13  Ravi Pratap  <ravi@ximian.com>
21153
21154         * ecore.cs (StandardConversionExists): Modify to take an Expression
21155         as the first parameter. Ensure we do null -> reference type conversion
21156         checking.
21157
21158         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
21159         temporary Expression objects.
21160
21161 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
21162
21163         * interface.cs: workaround bug in method overloading resolution
21164         (there is already a bugzilla bug for it).
21165
21166 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21167
21168         We could also solve this problem by having a separate path for
21169         performing type lookups, instead of DoResolve, we could have a
21170         ResolveType entry point, and only participating pieces of the
21171         production (simplename, deref, array) would implement this. 
21172
21173         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
21174         signal SimpleName to only resolve type names and not attempt to
21175         resolve anything else.
21176
21177         * expression.cs (Cast): Set the flag.
21178
21179         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
21180
21181         * class.cs: Only report 108 if there is no `new' modifier.
21182
21183         * cs-parser.jay: rework foreach statement to work with the new
21184         changes to the policy on SimpleNames.
21185         
21186         * report.cs: support Stacktrace on warnings as well.
21187
21188         * makefile: drop --unsafe and /unsafe from the compile.
21189
21190 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
21191
21192         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21193         lookups here, instead of doing that at parse time.  This means
21194         that our grammar will not introduce `LocalVariableReferences' as
21195         expressions at this point.  That solves the problem of code like
21196         this:
21197
21198         class X {
21199            static void Main ()
21200            { int X = 1;
21201             { X x = null }}}
21202
21203         This is only half the fix.  The full fix requires parameters to
21204         also be handled in this way.
21205
21206         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
21207         makes the use more obvious of the DeclSpace.  The
21208         ec.TypeContainer.TypeBuilder is now only used to pull the
21209         TypeBuilder for it.
21210
21211         My theory is that I can get rid of the TypeBuilder completely from
21212         the EmitContext, and have typecasts where it is used (from
21213         DeclSpace to where it matters).  
21214
21215         The only pending problem is that the code that implements Aliases
21216         is on TypeContainer, and probably should go in DeclSpace.
21217
21218         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21219         lookups here, instead of doing that at parse time.  This means
21220         that our grammar will not introduce `LocalVariableReferences' as
21221         expressions at this point.  That solves the problem of code like
21222         this:
21223
21224         class X {
21225            static void Main ()
21226            { int X = 1;
21227             { X x = null }}}
21228
21229         This is only half the fix.  The full fix requires parameters to
21230         also be handled in this way.
21231
21232         * class.cs (Property.DefineMethod): When implementing an interface
21233         method, set newslot, when implementing an abstract method, do not
21234         set the flag (before we tried never setting it, or always setting
21235         it, which is the difference).
21236         (Indexer.DefineMethod): same.
21237         (Method.DefineMethod): same.
21238
21239         * ecore.cs: Only set the status used flag if we get back a Field.
21240
21241         * attribute.cs: Temporary hack, so Paolo can keep working.
21242
21243 2002-03-08  Ravi Pratap  <ravi@ximian.com>
21244
21245         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
21246         the unmanaged type in the case we have a MarshalAs attribute.
21247
21248         (Resolve): Handle the case when we are parsing the special MarshalAs
21249         attribute [we need to store the unmanaged type to use later]
21250
21251         * typemanager.cs (marshal_as_attr_type): Built in type for the 
21252         MarshalAs Attribute.
21253
21254         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
21255         on parameters and accordingly set the marshalling info.
21256
21257 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
21258
21259         * class.cs: Optimizing slightly by removing redundant code after
21260         we switched to the `NoTypes' return value.
21261         (Property.DefineMethod): use NoTypes here too.
21262
21263         This fixes the bug I introduced in my last batch of changes.
21264
21265 2002-03-05  Ravi Pratap  <ravi@ximian.com>
21266
21267         * tree.cs (RecordEnum): Add. We now keep track of enums too.
21268
21269         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
21270         Enums since those are types too. 
21271
21272         * cs-parser.jay (enum_declaration): Record enums as we parse them.
21273
21274         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
21275         thanks to a call during the lookup process.
21276
21277 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
21278
21279         * statement.cs (Foreach): Lots of work to accomodate a particular
21280         kind of foreach statement that I had not kept in mind.  It is
21281         possible to have foreachs on classes that provide a GetEnumerator
21282         method that return objects that implement the "pattern" for using
21283         a foreach, there is no need to support GetEnumerator
21284         specifically. 
21285
21286         This is needed to compile nant.
21287
21288         * decl.cs: Only report 114 if the member is not `Finalize' and if
21289         the warning level is at least 2.
21290
21291         * class.cs: Moved the compare function from Method to
21292         MethodSignature. 
21293
21294         (MethodSignature.InheritableMemberSignatureCompare): Add new
21295         filter function that is used to extract inheritable methods from a
21296         class. 
21297
21298         (Method.Define): Use the new `inheritable_method_signature_filter'
21299         delegate
21300
21301         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
21302         command. 
21303
21304 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
21305
21306         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
21307
21308         * cs-parser.jay: Add opt_semicolon to the interface declaration.
21309
21310         * expression.cs: Pass location information to
21311         ConvertImplicitStandard. 
21312
21313         * class.cs: Added debugging code to track return values from
21314         interfaces. 
21315
21316 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
21317
21318         * expression.cs (Is.DoResolve): If either side of the `is' is an
21319         interface, do not flag the warning.
21320
21321         * ecore.cs (ImplicitReferenceConversion): We need a separate test
21322         for interfaces
21323
21324         * report.cs: Allow for --fatal to be used with --probe.
21325
21326         * typemanager.cs (NoTypes): Move the definition for the empty Type
21327         array here. 
21328
21329         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
21330         properties. 
21331         (TypeContainer.DefineProxy): New function used to proxy to parent
21332         implementations when implementing interfaces.
21333         (TypeContainer.ParentImplements): used to lookup if our parent
21334         implements a public function that is required by an interface.
21335         (TypeContainer.VerifyPendingMethods): Hook this up.
21336
21337         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
21338         `modules' and `assemblies' arraylists into arrays.  We only grow
21339         these are the very early start up of the program, so this improves
21340         the speedof LookupType (nicely measured).
21341
21342         * expression.cs (MakeByteBlob): Replaced unsafe code with
21343         BitConverter, as suggested by Paolo.
21344
21345         * cfold.cs (ConstantFold.Binary): Special case: perform constant
21346         folding of string concatenation, but if either side is a string,
21347         and the other is not, then return null, and let the runtime use
21348         the concatenation on the string plus the object (using
21349         `Object.ToString'). 
21350
21351 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
21352
21353         Constant Folding has been implemented now.
21354
21355         * expression.cs (Unary.Reduce): Do not throw an exception, catch
21356         the error instead on types that are not supported in one's
21357         complement. 
21358
21359         * constant.cs (Constant and all children): New set of functions to
21360         perform implict and explicit conversions.
21361
21362         * ecore.cs (EnumConstant): Implement the new functions to perform
21363         conversion by proxying to the child expression.
21364
21365         * codegen.cs: (ConstantCheckState): Constant evaluation has its
21366         own separate setting that can not be turned off from the command
21367         line using --unchecked or --checked and is only controlled using
21368         the checked/unchecked statements and expressions.  This setting is
21369         used by the constant folder to flag errors.
21370
21371         * expression.cs (CheckedExpr, UncheckedExpr): Set the
21372         ConstantCheckState as well.   
21373
21374         During Resolve, they also have to flag the state, because the
21375         constant folder runs completely in the Resolve phase.
21376
21377         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
21378         well.
21379
21380 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21381
21382         * cfold.cs: New file, this file contains the constant folder.
21383
21384         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
21385         argument to track whether we are using the resulting address to
21386         load or store a value and provide better error messages. 
21387
21388         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
21389         new AddressOf arguments.
21390
21391         * statement.cs (Foreach.EmitCollectionForeach): Update
21392
21393         * expression.cs (Argument.Emit): Call AddressOf with proper
21394         arguments to track usage.
21395
21396         (New.DoEmit): Call AddressOf with new arguments.
21397
21398         (Unary.Emit): Adjust AddressOf call.
21399
21400 2002-03-01  Ravi Pratap  <ravi@ximian.com>
21401
21402         * cs-parser.jay (member_access): Change the case for pre-defined types
21403         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
21404         this suggestion.
21405
21406         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
21407         a method body.
21408
21409         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
21410         essentially like methods and apply attributes like MethodImplOptions to them too.
21411
21412         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
21413         not being null.
21414
21415         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
21416         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
21417         is the DeclSpace.
21418
21419         * Update code everywhere accordingly.
21420
21421         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
21422
21423         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
21424
21425 2002-02-28  Ravi Pratap  <ravi@ximian.com>
21426
21427         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
21428         try performing lookups against those instead of jumping straight into using
21429         the 'using' clauses.
21430
21431         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
21432
21433         (LookupType): Perform lookups in implicit parents too.
21434
21435         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
21436         sequence as RootContext.LookupType. 
21437
21438         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
21439         the various cases of namespace lookups into this method.
21440
21441 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21442
21443         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
21444         in positional arguments)
21445
21446         * class.cs (Operator): Update the AllowedModifiers to contain
21447         extern. 
21448
21449         * cs-parser.jay: Update operator declaration to allow for the
21450         operator body to be empty.
21451
21452         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
21453         values. 
21454
21455 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
21456
21457         * class.cs (Method.Emit): Label parameters.
21458
21459         * driver.cs: Return 1 or 0 as the program exit code.
21460
21461 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
21462
21463         * expression.cs: Special case the `null' object when trying to
21464         auto-compute the type, as anything can be explicitly converted to
21465         that. 
21466
21467         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21468         spotting this Paolo.
21469
21470         (Expression.ImplicitNumericConversion): Perform comparissions of
21471         the type using the underlying type in the case of an enumeration
21472         rather than using the enumeration type for the compare.
21473
21474         Cope with the underlying == type case, which is not possible to
21475         catch before. 
21476
21477         (Expression.ConvertNumericExplicit): Perform comparissions of
21478         the type using the underlying type in the case of an enumeration
21479         rather than using the enumeration type for the compare.
21480
21481         * driver.cs: If the user does not supply an extension, assume .exe
21482
21483         * cs-parser.jay (if_statement): Rewrote so that we can track the
21484         location for the if statement.
21485
21486         * expression.cs (Binary.ConstantFold): Only concat strings when
21487         the operation is "+", not everything ;-)
21488
21489         * statement.cs (Statement.EmitBoolExpression): Take a location
21490         argument. 
21491         (If, While, Do): Track location.
21492
21493         * expression.cs (Binary.ResolveOperator): In the object + string
21494         case, I was missing a call to ConvertImplicit
21495
21496 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21497
21498         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21499         Location arguments. Ensure we use RootContext.LookupType to do our work
21500         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21501
21502         * interface.cs (PopulateMethod): Handle the type of the parameter being
21503         null gracefully.
21504
21505         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21506         have a params method with no fixed arguments and a call is made with no
21507         arguments.
21508
21509 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21510
21511         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21512         the verbatim-string-literal
21513
21514         * support.cs (InternalParameters.ParameterModifier): handle null
21515         fixed parameters.
21516         (InternalParameters.ParameterType): ditto.
21517
21518         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21519         duplicating the name of the variable parameter.
21520         (GetParameterByName): Fix bug where we were not looking up array
21521         paramters if they were the only present (thanks Paolo!).
21522         (GetParameterInfo): We only have an empty set of types if both
21523         fixed and array are set to null.
21524         (GetParameterInfo-idx): Handle FixedParameter == null
21525
21526         * cs-parser.jay: Handle the case where there is no catch
21527         statements (missing null test).
21528
21529 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21530
21531         * driver.cs (MainDriver): Be conservative on our command line
21532         handling.
21533
21534         Catch DirectoryNotFoundException when calling GetFiles.
21535
21536         (SplitPathAndPattern): Used to split the input specification into
21537         a path and a pattern that we can feed to Directory.GetFiles.
21538
21539 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21540
21541         * statement.cs (Fixed): Implement the last case of the Fixed
21542         statement (string handling).
21543
21544         * expression.cs (StringPtr): New class used to return a char * to
21545         a string;  Used by the Fixed statement.
21546
21547         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21548
21549         * expression.cs (Binary.ResolveOperator): Remove redundant
21550         MemberLookup pn parent type.
21551         Optimize union call, we do not need a union if the types are the same.
21552         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21553         type.
21554
21555         Specialize the use of MemberLookup everywhere, instead of using
21556         the default settings. 
21557
21558         (StackAlloc): Implement stackalloc keyword.
21559
21560         * cs-parser.jay: Add rule to parse stackalloc.
21561
21562         * driver.cs: Handle /h, /help, /?
21563
21564         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21565         before we supported unsafe code.
21566
21567         * makefile: add --unsafe to the self compilation of mcs.
21568
21569 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21570
21571         * expression.cs (PointerArithmetic): New class that is used to
21572         perform pointer arithmetic.
21573         (Binary.Resolve): Handle pointer arithmetic
21574         Handle pointer comparission.
21575         (ArrayPtr): Utility expression class that is used to take the
21576         address of an array.
21577
21578         (ElementAccess): Implement array access for pointers
21579
21580         * statement.cs (Fixed): Implement fixed statement for arrays, we
21581         are missing one more case before we are done.
21582
21583         * expression.cs (Indirection): Implement EmitAssign and set the
21584         ExprClass to Variable.  This allows pointer dereferences to be
21585         treated as variables, and to have values assigned to them.
21586
21587         * ecore.cs (Expression.StoreFromPtr): New utility function to
21588         store values dereferencing.
21589
21590 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21591
21592         * expression.cs (Binary.ResolveOperator): Ensure that we are
21593         not trying to operate on a void type - this fixes the reported
21594         bug.
21595
21596         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
21597         the parent implementation is sealed.
21598
21599         * ../errors/cs0239.cs : Add.
21600
21601         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
21602
21603         * typemanager.cs (unverifiable_code_type): Corresponds to 
21604         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
21605         which have unsafe code in them.
21606
21607         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
21608         unsafe context.
21609
21610 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
21611
21612         * cs-tokenizer.cs: Add support for @"litreal strings"
21613
21614         Make tokenizer accept pre-processor directives
21615         on any column (remove the old C-like limitation). 
21616
21617         * rootcontext.cs (EmitCode): Emit any global attributes.
21618         (AddGlobalAttributes): Used to keep track of assembly attributes. 
21619
21620         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
21621
21622         * cs-parser.jay: Add support for global attributes.  
21623
21624 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
21625
21626         * expression.cs (Indirection): New helper class.  Unary will
21627         create Indirection classes to be able to implement the
21628         IMemoryLocation interface on it.
21629
21630 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
21631
21632         * cs-parser.jay (fixed_statement): reference the right statement.
21633
21634         * statement.cs (Fixed.Emit): Finish implementing the fixed
21635         statement for the &x case.
21636
21637 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
21638
21639         * class.cs (Property.Define, Method.Define): Remove newslot when
21640         `implementing'.  
21641
21642         * modifiers.cs: My use of NewSlot when `Abstract' was set was
21643         wrong.  NewSlot should only be used if the `new' keyword is present.
21644
21645         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
21646         locating our system dir.  Sorry about this.
21647
21648 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21649
21650         * driver.cs (GetSystemDir): Compute correctly the location of our
21651         system assemblies.  I was using the compiler directory instead of
21652         the library directory.
21653
21654 2002-02-13  Ravi Pratap  <ravi@ximian.com>
21655
21656         * expression.cs (BetterFunction): Put back in what Miguel commented out
21657         since it is the correct fix. The problem is elsewhere ;-)
21658
21659         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
21660         parameters of the parms method are themselves compatible or not !
21661
21662         (StandardConversionExists): Fix very dangerous bug where we were forgetting
21663         to check that a class implements an interface before saying that an implicit
21664         conversion was allowed. Use ImplementsInterface to do the checking.
21665
21666 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21667
21668         * class.cs (Method.Define): Track whether we are an explicit
21669         implementation or not.  And only call DefineMethodOverride if we
21670         are an explicit implementation.
21671
21672         (Property.DefineMethod): Ditto.
21673
21674 2002-02-11  Ravi Pratap  <ravi@ximian.com>
21675
21676         * expression.cs (BetterFunction): Catch hideous bug which was
21677          preventing us from detecting ambiguous calls due to implicit casts i.e
21678         cs0121.
21679
21680 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
21681
21682         * support.cs (Pair): Remove un-needed method.  I figured why I was
21683         getting the error in cs-parser.jay, the variable in a foreach loop
21684         is readonly, and the compiler does not really treat this as a variable.
21685
21686         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
21687         instead of EQUALS in grammar.  
21688
21689         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
21690
21691         * expression.cs (Unary.DoResolve): Check whether the argument is
21692         managed or not.
21693
21694 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
21695
21696         * support.cs: Api for Pair to set a value.  Despite the fact that
21697         the variables are public the MS C# compiler refuses to compile
21698         code that accesses the field if the variable is part of a foreach
21699         statement. 
21700
21701         * statement.cs (Fixed): Begin implementation of the fixed
21702         statement.
21703
21704         (Block.AddVariable): Return the VariableInfo on success and null
21705         on failure instead of true/false. 
21706
21707         * cs-parser.jay (foreach): Catch errors on variables already
21708         defined (we were ignoring this value before) and properly unwind
21709         the block hierarchy
21710
21711         (fixed_statement): grammar for the fixed statement.
21712
21713 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
21714
21715         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
21716         pointer types to be incretemented.
21717
21718         (SizeOf): Implement.
21719
21720         * cs-parser.jay (pointer_member_access): Implement
21721         expr->IDENTIFIER production.
21722
21723         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
21724         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
21725         on safe contexts.
21726
21727         (Unary): Implement indirection.
21728
21729         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
21730         use in non-unsafe context).
21731
21732         (SimpleName.DoResolve): Check for pointers in field access on safe
21733         contexts. 
21734
21735         (Expression.LoadFromPtr): Factor the load-indirect code in this
21736         function.  This was duplicated in UnboxCast and ParameterReference
21737
21738 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
21739
21740         * expression.cs (ComposedCast): report an error if a pointer cast
21741         is used in a safe region.
21742
21743         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
21744         pointer type casts in unsafe context.
21745
21746         * codegen.cs (EmitContext): Set up IsUnsafe.
21747
21748         * cs-parser.jay (non_expression_type): Add productions for pointer
21749         casts. 
21750
21751         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
21752         code.  We should not use force into static mode if the method is
21753         not virtual.  Fixes bug in MIS
21754
21755         * statement.cs (Do.Emit, While.Emit, For.Emit,
21756         Statement.EmitBoolExpression): Add support to Do and While to
21757         propagate infinite loop as `I do return' semantics.
21758
21759         Improve the For case to also test for boolean constants.
21760
21761         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
21762         to the list of attributes we can add.
21763
21764         Remove `EmitContext' argument.
21765
21766         * class.cs (Method.Define): Apply parameter attributes.
21767         (Constructor.Define): Apply parameter attributes.
21768         (MethodCore.LabelParameters): Move here the core of labeling
21769         parameters. 
21770
21771         * support.cs (ReflectionParameters.ParameterModifier,
21772         InternalParameters.ParameterModifier): Use IsByRef on the type and
21773         only return the OUT bit for these parameters instead of in/out/ref
21774         flags.
21775
21776         This is because I miss-understood things.  The ParameterInfo.IsIn
21777         and IsOut represent whether the parameter has the [In] and [Out]
21778         attributes set.  
21779
21780 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
21781
21782         * ecore.cs (FieldExpr.Emit): Release temporaries.
21783
21784         * assign.cs (LocalTemporary.Release): new function.
21785
21786         * codegen.cs (EmitContext.GetTemporaryStorage,
21787         EmitContext.FreeTemporaryStorage): Rework the way we deal with
21788         temporary storage.  Now we can "put back" localbuilders when we
21789         are done with them
21790
21791 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
21792
21793         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
21794         need to make a copy of the variable to generate verifiable code.
21795
21796 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
21797
21798         * driver.cs: Compute dynamically the system directory.
21799
21800         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
21801         Slower, but more generally useful.  Used by the abstract
21802         registering implementation. 
21803
21804         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
21805         the rules for the special rule on Type/instances.  First check if
21806         we have the same name, and if so, try that special static path
21807         rather than the instance path.
21808
21809 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
21810
21811         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
21812         for, while and if.
21813
21814         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
21815         Enum, ValueType, Delegate or Array for non-corlib compiles.
21816
21817         * cs-tokenizer.cs: Catch long identifiers (645)
21818
21819         * typemanager.cs (IndexerPropetyName): Ravi never tested this
21820         piece of code.
21821
21822         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
21823         fix, we were returning too early, so we were not registering
21824         pending methods from abstract classes.
21825
21826         Do not register pending methods if the class is abstract.
21827
21828         * expression.cs (Conditional.DoResolve): Report circular implicit
21829         conversions when we neecd to compute it for conditional
21830         expressions. 
21831
21832         (Is.DoResolve): If the expression is always of the provided type,
21833         flag warning 183.  If the expression can not ever be of the
21834         provided type flag warning 184.
21835
21836         * class.cs: Catch 169 as well.
21837
21838         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
21839         read. 
21840
21841 2002-01-18  Nick Drochak  <ndrochak@gol.com>
21842
21843         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
21844
21845 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
21846
21847         * interface.cs: (PopulateMethod): Check for pointers being defined
21848         only if the unsafe context is active.
21849         (PopulateProperty): ditto.
21850         (PopulateIndexer): ditto.
21851
21852         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
21853         specified.  If pointers are present, make sure that they are
21854         present in an unsafe context.
21855         (Constructor, Constructor.Define): ditto.
21856         (Field, Field.Define): ditto.
21857         (Property, Property.Define): ditto.
21858         (Event, Event.Define): ditto.
21859
21860         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
21861         hashtable if there are classes or structs defined.
21862
21863         * expression.cs (LocalVariableReference.DoResolve): Simplify this
21864         code, as the constant resolution moved.
21865
21866         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
21867         the metadata, so we can flag error 133. 
21868
21869         * decl.cs (MemberCore.UnsafeOK): New function to test that a
21870         pointer is being declared in an unsafe context.
21871
21872 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
21873
21874         * modifiers.cs (Modifiers.Check): Require a Location argument.
21875         Report error 227 for Unsafe use.
21876
21877         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
21878
21879         * statement.cs (For.Emit): If the test is null, then report that
21880         we do `return', as we wont reach anything afterwards.
21881
21882         (Switch.SwitchGoverningType): Track the expression that matched
21883         the conversion.
21884
21885         * driver.cs: Allow negative numbers as an error code to flag.
21886
21887         * cs-parser.jay: Handle 1551.
21888
21889         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
21890
21891 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21892
21893         * cs-parser.jay: Report 1518 (type declaration can only contain
21894         class, struct, interface, enum or delegate)
21895
21896         (switch_label): Report 1523 (keywords `case' or `default' must
21897         preced code)
21898
21899         (opt_switch_sections): Report 1522 (empty switch)
21900
21901         * driver.cs: Report 1515 (response file specified multiple times)
21902         Report 1516 (Source file specified multiple times).
21903
21904         * expression.cs (Argument.Resolve): Signal 1510
21905
21906         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
21907         access not allowed in static code)
21908
21909 2002-01-11  Ravi Pratap  <ravi@ximian.com>
21910
21911         * typemanager.cs (IsPointerType): Utility method which we are going
21912         to need a lot.
21913
21914         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
21915         the object type, so we take care of that.
21916
21917         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
21918
21919         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
21920         added to non-params parameters :-)
21921
21922         * typemanager.cs (CSharpName): Include 'void' type too. 
21923
21924         (void_ptr_type): Include in the set of core types.
21925
21926         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
21927         duplicating code.
21928
21929         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
21930         an unsafe context.
21931
21932         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
21933         completely forgotten about it.
21934
21935 2002-01-10  Ravi Pratap  <ravi@ximian.com>
21936
21937         * cs-parser.jay (pointer_type): Add. This begins our implementation
21938         of parsing rules for unsafe code.
21939
21940         (unsafe_statement): Implement.
21941
21942         (embedded_statement): Modify to include the above.
21943
21944         * statement.cs (Unsafe): Implement new class for unsafe blocks.
21945
21946         * codegen.cs (EmitContext.InUnsafe): Add. This determines
21947         if the current context is an unsafe one.
21948
21949         * cs-parser.jay (local_variable_pointer_type): Since local variable types
21950         are handled differently, we need separate rules for them.
21951
21952         (local_variable_declaration): Update to use local_variable_pointer_type
21953         to allow variable declarations of unmanaged pointer types.
21954
21955         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
21956         in unsafe contexts.
21957
21958         * ../errors/cs0214.cs : Add.
21959
21960 2002-01-16  Nick Drochak  <ndrochak@gol.com>
21961
21962         * makefile: remove 'response' file when cleaning.
21963
21964 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21965
21966         * cs-parser.jay: Report 1524.
21967
21968 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
21969
21970         * typemanager.cs (RegisterMethod): drop checking if we have
21971         registered this from here
21972
21973 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
21974
21975         * class.cs (Method.EmitDestructor): Implement calling our base
21976         destructor. 
21977
21978         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
21979         value of InFinally.
21980
21981         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
21982         this routine and will wrap the call in a try/catch block.  Deal
21983         with the case.
21984
21985 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
21986
21987         * ecore.cs (Expression.MemberLookup): instead of taking a
21988         parameter `same_type' that was used to tell whether we could
21989         access private members we compute our containing type from the
21990         EmitContext.
21991
21992         (FieldExpr): Added partial support for volatile fields.  This does
21993         not work for volatile fields exposed from assemblies, as I can not
21994         figure out how to extract the modreq from it.
21995
21996         Updated all the source files to use this.
21997
21998         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
21999         because it is referenced by MemberLookup very often. 
22000
22001 2002-01-09  Ravi Pratap  <ravi@ximian.com>
22002
22003         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
22004         TypeBuilder.GetCustomAttributes to retrieve what we need.
22005
22006         Get rid of redundant default_member_attr_type as this is the same as
22007         default_member_type which already exists.
22008
22009         * interface.cs, attribute.cs : Update accordingly.
22010
22011 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
22012
22013         * typemanager.cs: Enable IndexerPropertyName again.  It does not
22014         work for TYpeBuilders though.  Ravi, can you please fix this?
22015
22016         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
22017
22018         * expression.cs (Argument.Emit): Handle the case of ref objects
22019         being passed to ref functions;  
22020
22021         (ParameterReference.EmitLoad): Loads the content of the pointer
22022         without dereferencing.
22023
22024 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22025
22026         * cs-tokenizer.cs: Implemented the pre-processing expressions.
22027
22028 2002-01-08  Ravi Pratap  <ravi@ximian.com>
22029
22030         * class.cs (Indexer.DefineMethod): Incorporate the interface
22031         type in the name of the method if we are doing explicit interface
22032         implementation.
22033
22034         * expression.cs (ConversionExists): Remove as it is completely obsolete.
22035
22036         (BetterConversion): Fix extremely trivial bug where we were referring to
22037         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
22038         again !
22039
22040         * ../errors/bug16.cs : Add although we have fixed it.
22041
22042 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22043
22044         * expression.cs (BaseIndexer): Begin implementation.
22045
22046         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
22047
22048         * cs-parser.jay (indexer_declarator): Use qualified_identifier
22049         production directly to remove a shift/reduce, and implement
22050         explicit interface implementation.
22051
22052         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
22053         after a floating point suffix.
22054
22055         * expression.cs (DoNumericPromotions): Improved the conversion for
22056         uint/uint.  If we have a constant, we avoid doing a typecast to a
22057         larger type.
22058
22059         * class.cs (Indexer): Implement explicit interface implementation
22060         for indexers.
22061
22062 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
22063
22064         * class.cs: make the default instance constructor public and hidebysig.
22065
22066 2001-01-03  Ravi Pratap  <ravi@ximian.com>
22067
22068         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
22069         so we can call it from elsewhere.
22070
22071         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
22072         we emit it internally if the class has a defined indexer; otherwise the user
22073         emits it by decorating the class definition with the DefaultMemberAttribute.
22074
22075         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
22076         attribute is not used on a type which defines an indexer.
22077
22078         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
22079         character when we skip whitespace.
22080
22081         * ../errors/cs0646.cs : Add.
22082
22083 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
22084
22085         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
22086         again. 
22087
22088         * makefile: Add practical target `mcs3.exe' which builds the third
22089         generation compiler. 
22090
22091         * expression.cs (New): Fix structures constructor calling.
22092
22093         * class.cs (Property, Method, Indexer): Emit Final flag on the
22094         method if we are an interface implementation and we are not
22095         abstract. 
22096
22097         * ecore.cs (PropertyExpr): New public field `IsBase', tells
22098         whether this property is referencing a `base' method.
22099
22100         * expression.cs (Invocation.EmitCall): take an extra argument:
22101         is_base, this is used to determine whether the `call' or
22102         `callvirt' opcode should be used.
22103
22104
22105         * delegate.cs: update EmitCall.
22106
22107         * class.cs (Method.Define): Set NewSlot for the cases where we are
22108         not implementing an interface method.
22109
22110         (Property.Define): ditto.
22111
22112 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
22113
22114         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
22115         'r'.  Allows mcs to parse itself fully.
22116
22117 2002-01-02  Ravi Pratap  <ravi@ximian.com>
22118
22119         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
22120         of the number of initializers that require the InitializeArray method.
22121
22122         (CheckIndices): Store the Expression in all cases - not the plain value. Also
22123         update the above field where necessary.
22124
22125         (MakeByteBlob): Update accordingly.
22126
22127         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
22128         greater than 2.
22129
22130         (EmitDynamicInitializers): Update in accordance with the new optimization.
22131
22132         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
22133         same OpCode applies.
22134
22135         * cs-parser.jay : Fix some glaring errors I introduced.
22136
22137 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
22138
22139         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
22140         so that we can check for name clashes there too.
22141
22142         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
22143         for interface indexers.
22144
22145         * interfaces.cs (Define): Emit the default member attribute.
22146
22147         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
22148         variable was being referred to while setting the value ;-)
22149
22150 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
22151
22152         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
22153         byte-by-byte information when we know the data is zero.
22154
22155         Make the block always a multiple of 4, because
22156         DefineInitializedData has a bug.
22157
22158         * assign.cs: Fix, we should assign from the temporary, not from
22159         the source. 
22160
22161         * expression.cs (MakeByteBlob): Fix my incorrect code.
22162
22163 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
22164
22165         * typemanager.cs (EnumToUnderlying): This function is used to get
22166         the underlying type from an enumeration, because it does not
22167         always work. 
22168
22169         * constant.cs: Use the I4_S form for values between -128 and 127.
22170
22171         * statement.cs (Block.LookupLabel): Looks up a label.
22172         (Block): Drop support for labeled blocks.
22173
22174         (LabeledStatement): New kind of statement that represents a label
22175         only.
22176
22177         (Goto): Finally implement this bad boy.
22178
22179         * cs-parser.jay: Update to reflect new mechanism to implement
22180         labels.
22181
22182 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
22183
22184         * codegen.cs (EmitContext.This): a codegen property that keeps the
22185         a single instance of this instead of creating many different this
22186         instances. 
22187
22188         * delegate.cs (Delegate.DoResolve): Update to use the property;
22189
22190         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
22191
22192         * expression.cs (BaseAccess.DoResolve): Ditto.
22193
22194 2001-12-29  Ravi Pratap  <ravi@ximian.com>
22195
22196         * typemanager.cs (methodimpl_attr_type): Add to hold the type
22197         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
22198
22199         (InitCoreTypes): Update accordingly.
22200
22201         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
22202         so we can quickly store the state.
22203
22204         (ApplyAttributes): Set the correct implementation flags
22205         for InternalCall methods.
22206
22207 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
22208
22209         * expression.cs (EmitCall): if a method is not virtual, then do
22210         not use callvirt on it.
22211
22212         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
22213         user defined stuff) requires the use of stobj, which takes an
22214         address on the stack instead of an array and an index.  So emit
22215         the Ldelema operation for it.
22216
22217         (EmitStoreOpcode): Use stobj for valuetypes.
22218
22219         (UnaryMutator.EmitCode): Use the right 1 value depending on
22220         whether we are dealing with int64/uint64, float or doubles.
22221
22222         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
22223         constructors that I implemented last night.
22224
22225         (Constructor.IsDefault): Fix to work properly for static
22226         constructors.
22227
22228         * cs-parser.jay (CheckDef): report method signature errors.
22229         Update error number 103 to be 132.
22230
22231         * decl.cs: New AdditionResult enumeration value: MethodExists.
22232         Although we do this check for methods later on in the semantic
22233         analysis, catching repeated default constructors is so easy that
22234         we catch these here. 
22235
22236         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
22237         promotions code.
22238
22239         (ParameterReference.EmitAssign, Emit): handle
22240         bools as bytes.
22241
22242         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
22243         (ArrayAccess.EmitStoreOpcode): ditto.
22244
22245         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
22246
22247         * expression.cs (MakeByteBlob): Complete all the missing types
22248         (uint, short, ushort, byte, sbyte)
22249
22250         * class.cs: Only init instance field initializers on instance
22251         constructors. 
22252
22253         Rename `constructors' to instance_constructors. 
22254
22255         (TypeContainer.AddConstructor): Only add constructors to the list
22256         if it is not static.
22257
22258         Make sure that we handle default_static_constructor independently
22259         everywhere where we handle instance_constructors
22260
22261 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
22262
22263         * class.cs: Do not lookup or create a base initializer for a
22264         static constructor.
22265
22266         (ConstructorInitializer.Resolve): use the proper type to lookup
22267         for constructors.
22268
22269         * cs-parser.jay: Report error 1585 (modifiers between type and name).
22270
22271         * enum.cs, interface.cs: Remove CloseType, this is taken care by
22272         in DeclSpace. 
22273
22274         * decl.cs: CloseType is now an virtual method, the default
22275         implementation just closes this type.
22276
22277 2001-12-28  Ravi Pratap  <ravi@ximian.com>
22278
22279         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
22280         to PreserveSig by default. Also emit HideBySig on such methods.
22281
22282         Basically, set the defaults to standard values.
22283
22284         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
22285         argument, if candidate is better, it can't be worse than the best !
22286
22287         (Invocation): Re-write bits to differentiate between methods being
22288         applicable in their expanded form and their normal form - for params
22289         methods of course.
22290
22291         Get rid of use_standard everywhere as only standard conversions are allowed
22292         in overload resolution. 
22293
22294         More spec conformance.
22295
22296 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22297
22298         * driver.cs: Add --timestamp, to see where the compiler spends
22299         most of its time.
22300
22301         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
22302         `this' in static code.
22303
22304         (SimpleName.DoResolve): Implement in terms of a helper function
22305         that allows static-references to be passed upstream to
22306         MemberAccess.
22307
22308         (Expression.ResolveWithSimpleName): Resolve specially simple
22309         names when called by MemberAccess to implement the special
22310         semantics. 
22311
22312         (Expression.ImplicitReferenceConversion): Handle conversions from
22313         Null to reference types before others, as Null's type is
22314         System.Object. 
22315
22316         * expression.cs (Invocation.EmitCall): Handle the special case of
22317         calling methods declared on a reference type from a ValueType
22318         (Base classes System.Object and System.Enum)
22319
22320         (MemberAccess.Resolve): Only perform lookups on Enumerations if
22321         the left hand side is a TypeExpr, not on every enumeration. 
22322
22323         (Binary.Resolve): If types are reference types, then do a cast to
22324         object on operators != and == of both arguments.
22325
22326         * typemanager.cs (FindMembers): Extract instance and static
22327         members if requested.
22328
22329         * interface.cs (PopulateProperty): Use void_type instead of null
22330         as the return type for the setter method.
22331
22332         (PopulateIndexer): ditto.
22333
22334 2001-12-27  Ravi Pratap  <ravi@ximian.com>
22335
22336         * support.cs (ReflectionParameters): Fix minor bug where we
22337         were examining the wrong parameter for the ParamArray attribute.
22338
22339         Cope with requests for the type of the parameter at position
22340         greater than the params parameter's. We now return the element
22341         type of the params array as that makes more sense.
22342
22343         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
22344         accordingly as we no longer have to extract the element type
22345         ourselves.
22346
22347         (Invocation.OverloadResolve): Update.
22348
22349 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22350
22351         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
22352         against IEnumerator, test whether the return value is a descendant
22353         of the IEnumerator interface.
22354
22355         * class.cs (Indexer.Define): Use an auxiliary method to implement
22356         the other bits of the method definition.  Begin support for
22357         explicit interface implementation.
22358
22359         (Property.DefineMethod): Use TypeManager.void_type instead of null
22360         for an empty return value.
22361
22362 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
22363
22364         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
22365         dealing with a FieldExpr which is composed of a FieldBuilder, in
22366         the code path we did extract the constant, but we should have
22367         obtained the underlying value to be able to cast it (otherwise we
22368         end up in an infinite loop, this is what Ravi was running into).
22369
22370         (ArrayCreation.UpdateIndices): Arrays might be empty.
22371
22372         (MemberAccess.ResolveMemberAccess): Add support for section
22373         14.5.4.1 that deals with the special case of E.I when E is a type
22374         and something else, that I can be a reference to a static member.
22375
22376         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
22377         handle a particular array type to create byte blobs, it is just
22378         something we dont generate byteblobs for.
22379
22380         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
22381         arguments. 
22382
22383         * location.cs (Push): remove the key from the hashtable that we
22384         are about to add.   This happens for empty files.
22385
22386         * driver.cs: Dispose files after we have parsed them.
22387
22388         (tokenize): new function that only runs the tokenizer on its
22389         input, for speed testing.
22390
22391 2001-12-26  Ravi Pratap  <ravi@ximian.com>
22392
22393         * class.cs (Event.Define): Define the private field only if there
22394         are no accessors defined.
22395
22396         * expression.cs (ResolveMemberAccess): If there is no associated
22397         field with the event, that means we have an event defined with its
22398         own accessors and we should flag error cs0070 since transforming
22399         ourselves into a field is not valid in that case.
22400
22401         * ecore.cs (SimpleName.DoResolve): Same as above.
22402
22403         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
22404         and charset to sane values.
22405
22406 2001-12-25  Ravi Pratap  <ravi@ximian.com>
22407
22408         * assign.cs (DoResolve): Perform check on events only if they 
22409         are being accessed outside the declaring type.
22410
22411         * cs-parser.jay (event_declarations): Update rules to correctly
22412         set the type of the implicit parameter etc.
22413
22414         (add_accessor, remove_accessor): Set current local parameters.
22415
22416         * expression.cs (Binary): For delegate addition and subtraction,
22417         cast the return value from the method into the appropriate delegate
22418         type.
22419
22420 2001-12-24  Ravi Pratap  <ravi@ximian.com>
22421
22422         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
22423         of these as the workaround is unnecessary.
22424
22425         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
22426         delegate data - none of that is needed at all.
22427
22428         Re-write bits to extract the instance expression and the delegate method
22429         correctly.
22430
22431         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
22432         on delegates too.
22433
22434         * attribute.cs (ApplyAttributes): New method to take care of common tasks
22435         of attaching attributes instead of duplicating code everywhere.
22436
22437         * everywhere : Update code to do attribute emission using the above method.
22438
22439 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22440
22441         * expression.cs (IsParamsMethodApplicable): if there are not
22442         parameters, return immediately.
22443
22444         * ecore.cs: The 0 literal can be implicity converted to an enum
22445         type. 
22446
22447         (SimpleName.DoResolve): First lookup the type, then lookup the
22448         members. 
22449
22450         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
22451         want to get its address.  If the InstanceExpression is not
22452         addressable, store the result in a temporary variable, then get
22453         the address of it.
22454
22455         * codegen.cs: Only display 219 errors on warning level or above. 
22456
22457         * expression.cs (ArrayAccess): Make it implement the
22458         IMemoryLocation interface.
22459
22460         (Binary.DoResolve): handle the operator == (object a, object b)
22461         and operator != (object a, object b) without incurring into a
22462         BoxedCast (because 5 != o should never be performed).
22463
22464         Handle binary enumerator operators.
22465
22466         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22467         value type, otherwise use Ldelem_ref.
22468
22469         Use precomputed names;
22470
22471         (AddressOf): Implement address of
22472
22473         * cs-parser.jay (labeled_statement): Fix recursive block
22474         addition by reworking the production.
22475
22476         * expression.cs (New.DoEmit): New has a special case:
22477                 
22478                  If we are dealing with a ValueType, we have a few
22479                  situations to deal with:
22480                 
22481                     * The target of New is a ValueType variable, that is
22482                       easy, we just pass this as the variable reference
22483                 
22484                     * The target of New is being passed as an argument,
22485                       to a boxing operation or a function that takes a
22486                       ValueType.
22487                 
22488                       In this case, we need to create a temporary variable
22489                       that is the argument of New.
22490
22491
22492 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22493
22494         * rootcontext.cs (LookupType): Check that current_type is not null before
22495         going about looking at nested types.
22496
22497         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22498         not implement the IAssignMethod interface any more.
22499
22500         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22501         where we tranform them into FieldExprs if they are being resolved from within
22502         the declaring type.
22503
22504         * ecore.cs (SimpleName.DoResolve): Do the same here.
22505
22506         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22507
22508         * ../errors/bug10.cs : Add.
22509
22510         * ../errors/cs0070.cs : Add.
22511
22512         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22513
22514         * assign.cs : Get rid of EventIsLocal everywhere.
22515
22516 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22517
22518         * ecore.cs (ConvertIntLiteral): finished the implementation.
22519
22520         * statement.cs (SwitchLabel): Convert the value we are using as a
22521         key before looking up the table.
22522
22523 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22524
22525         * codegen.cs (EmitTopBlock): Require a Location argument now.
22526
22527         * cs-parser.jay (constructor_declarator): We need to setup
22528         current_local_parameters before we parse the
22529         opt_constructor_initializer, to allow the variables to be bound
22530         to the constructor arguments.
22531
22532         * rootcontext.cs (LookupType): First lookup nested classes in our
22533         class and our parents before we go looking outside our class.
22534
22535         * expression.cs (ConstantFold): Extract/debox the values at the
22536         beginnning. 
22537
22538         * rootcontext.cs (EmitCode): Resolve the constants first before we
22539         resolve the types.  This is not really needed, but it helps debugging.
22540
22541         * statement.cs: report location.
22542
22543         * cs-parser.jay: pass location to throw statement.
22544
22545         * driver.cs: Small bug fix.
22546
22547         * report.cs: Updated format to be 4-zero filled digits.
22548
22549 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22550
22551         * expression.cs (CheckIndices): Fix minor bug where the wrong
22552         variable was being referred to ;-)
22553
22554         (DoEmit): Do not call EmitStaticInitializers when the 
22555         underlying type is System.Object.
22556
22557 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22558
22559         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22560         and do the usual workaround for SRE.
22561
22562         * class.cs (MyEventBuilder.EventType): New member to get at the type
22563         of the event, quickly.
22564
22565         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22566
22567         * assign.cs (Assign.DoResolve): Handle the case when the target
22568         is an EventExpr and perform the necessary checks.
22569
22570         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22571         interface.
22572
22573         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22574
22575         (EventExpr): Set the type in the constructor itself since we 
22576         are meant to be born fully resolved.
22577
22578         (EventExpr.Define): Revert code I wrote earlier.
22579                 
22580         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22581         instance expression is null. The instance expression is a This in that case
22582         or a null, depending on whether it is a static method or not.
22583
22584         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22585         refers to more than one method.
22586
22587         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22588         and accordingly flag errors.
22589
22590 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22591
22592         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
22593
22594 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22595
22596         * location.cs (ToString): Provide useful rutine.
22597
22598 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22599
22600         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
22601         objects, return the actual integral boxed.
22602
22603         * statement.cs (SwitchLabel): define an ILLabel for each
22604         SwitchLabel. 
22605
22606         (Switch.CheckSwitch): If the value is a Literal, extract
22607         the underlying literal.
22608
22609         Also in the unused hashtable we had, add the SwitchLabel so we can
22610         quickly look this value up.
22611
22612         * constant.cs: Implement a bunch of new constants.  Rewrite
22613         Literal based on this.  Made changes everywhere to adapt to this.
22614
22615         * expression.cs (Expression.MakeByteBlob): Optimize routine by
22616         dereferencing array only once, and also copes with enumrations.
22617
22618         bytes are two bytes wide, not one.
22619
22620         (Cast): Perform constant conversions.
22621
22622         * ecore.cs (TryImplicitIntConversion): Return literals instead of
22623         wrappers to the literals here.
22624
22625         * expression.cs (DoNumericPromotions): long literals can converted
22626         to ulong implicity (this is taken care of elsewhere, but I was
22627         missing this spot).
22628
22629         * ecore.cs (Expression.Literalize): Make the return type Literal,
22630         to improve type checking.
22631
22632         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
22633
22634 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22635
22636         * literal.cs: Revert code from ravi that checked the bounds.  The
22637         bounds are sane by the definition of the type itself. 
22638
22639         * typemanager.cs: Fix implementation of ImplementsInterface.  We
22640         need to actually look up in our parent hierarchy for interfaces
22641         implemented. 
22642
22643         * const.cs: Use the underlying type for enumerations
22644
22645         * delegate.cs: Compute the basename for the delegate creation,
22646         that should fix the delegate test case, and restore the correct
22647         Type Lookup semantics in rootcontext
22648
22649         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
22650         referencing a nested type with the Reflection API is using the "+"
22651         sign. 
22652
22653         * cs-parser.jay: Do not require EOF token at the end.
22654
22655 2001-12-20  Ravi Pratap  <ravi@ximian.com>
22656
22657         * rootcontext.cs (LookupType): Concatenate type names with
22658         a '.' instead of a '+' The test suite passes again.
22659
22660         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
22661         field of the enumeration.
22662
22663         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
22664         the case when the member is an EventExpr.
22665
22666         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
22667         static has an associated instance expression.
22668
22669         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
22670
22671         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
22672
22673         * class.cs (Event.Define): Register event and perform appropriate checks
22674         for error #111.
22675
22676         We define the Add and Remove methods even if the use provides none because
22677         in that case, we provide default implementations ourselves.
22678
22679         Define a private field of the type of the event. This is done by the CSC compiler
22680         and we should be doing it too ;-)
22681
22682         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
22683         More methods we use in code we generate.
22684
22685         (multicast_delegate_type, delegate_type): Two separate types since the distinction
22686         is important.
22687
22688         (InitCoreTypes): Update accordingly for the above.
22689
22690         * class.cs (Event.Emit): Generate code for default accessors that we provide
22691
22692         (EmitDefaultMethod): Do the job in the above.
22693
22694         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
22695         appropriate place.
22696
22697 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22698
22699         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
22700         builders even if we were missing one.
22701
22702         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
22703         pass the Basename as our class name instead of the Name.  The
22704         basename will be correctly composed for us.
22705
22706         * parameter.cs (Paramters): Now takes a Location argument.
22707
22708         * decl.cs (DeclSpace.LookupType): Removed convenience function and
22709         make all the code call directly LookupType in RootContext and take
22710         this chance to pass the Location information everywhere.
22711
22712         * Everywhere: pass Location information.
22713
22714 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
22715
22716         * class.cs (Constructor.Define): Updated way of detecting the
22717         length of the parameters.
22718
22719         (TypeContainer.DefineType): Use basename as the type name for
22720         nested types.
22721
22722         (TypeContainer.Define): Do not recursively define types here, as
22723         definition is taken care in order by the RootContext.
22724
22725         * tree.cs: Keep track of namespaces in a per-file basis.
22726
22727         * parameter.cs (Parameter.ComputeSignature): Update to use
22728         DeclSpace. 
22729
22730         (Parameters.GetSignature): ditto.
22731
22732         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
22733         instead of a TypeContainer.
22734
22735         (Interface.SemanticAnalysis): Use `this' instead of our parent to
22736         resolve names.  Because we need to be resolve in our context, not
22737         our parents.
22738
22739         * driver.cs: Implement response files.
22740
22741         * class.cs (TypeContainer.DefineType): If we are defined, do not
22742         redefine ourselves.
22743
22744         (Event.Emit): Emit the code for add/remove handlers.
22745         (Event.Define): Save the MethodBuilders for add/remove.
22746
22747         * typemanager.cs: Use pair here too.
22748
22749         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
22750         DictionaryEntry requires the first argument to be non-null.  
22751
22752         (enum_declaration): Compute full name for registering the
22753         enumeration.
22754
22755         (delegate_declaration): Instead of using
22756         formal_parameter_list, use opt_formal_parameter_list as the list
22757         can be empty.
22758
22759         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
22760         (EventParsing): New property that controls whether `add' and
22761         `remove' are returned as tokens or identifiers (for events);
22762
22763 2001-12-19  Ravi Pratap  <ravi@ximian.com>
22764
22765         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
22766         use MyEventBuilder only and let it wrap the real builder for us.
22767
22768         (MyEventBuilder): Revamp constructor etc.
22769
22770         Implement all operations that we perform on EventBuilder in precisely the same
22771         way here too.
22772
22773         (FindMembers): Update to use the EventBuilder member.
22774
22775         (Event.Emit): Update accordingly.
22776
22777 2001-12-18  Ravi Pratap  <ravi@ximian.com>
22778
22779         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
22780         by calling the appropriate methods.
22781
22782         (GetCustomAttributes): Make stubs as they cannot possibly do anything
22783         useful.
22784
22785         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
22786
22787 2001-12-17  Ravi Pratap  <ravi@ximian.com>
22788
22789         * delegate.cs (Delegate.Populate): Check that the return type
22790         and various parameters types are indeed accessible.
22791
22792         * class.cs (Constructor.Define): Same here.
22793
22794         (Field.Define): Ditto.
22795
22796         (Event.Define): Ditto.
22797
22798         (Operator.Define): Check that the underlying Method defined itself
22799         correctly - so it's MethodBuilder should not be null.
22800
22801         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
22802         expression happens to be null.
22803
22804         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
22805         members but as of now we don't seem to be able to do anything really useful with it.
22806
22807         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
22808         not the EventBuilder.
22809
22810 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
22811
22812         * cs-tokenizer.cs: Add support for defines.
22813         Add support for #if, #elif, #else, #endif
22814
22815         (eval_var): evaluates a variable.
22816         (eval): stubbed for evaluating functions.
22817
22818         * cs-parser.jay: Pass the defines information
22819
22820         * driver.cs: Add --define command line option.
22821
22822         * decl.cs: Move MemberCore here.
22823
22824         Make it the base class for DeclSpace.  This allows us to catch and
22825         report 108 and 109 for everything now.
22826
22827         * class.cs (TypeContainer.Define): Extract all the members
22828         before populating and emit the warning 108 (new keyword required
22829         to override) instead of having each member implement this.
22830
22831         (MemberCore.Define): New abstract method, we will be using this in
22832         the warning reporting engine in Populate.
22833
22834         (Operator.Define): Adjust to new MemberCore protocol. 
22835
22836         * const.cs (Const): This does not derive from Expression, it is a
22837         temporary object we use to create fields, it is a MemberCore. 
22838
22839         * class.cs (Method.Define): Allow the entry point to be in a
22840         specific class.
22841
22842         * driver.cs: Rewrite the argument handler to clean it up a bit.
22843
22844         * rootcontext.cs: Made it just an auxiliary namespace feature by
22845         making everything static.
22846
22847         * driver.cs: Adapt code to use RootContext type name instead of
22848         instance variable.
22849
22850         * delegate.cs: Remove RootContext argument.
22851
22852         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
22853         argument. 
22854
22855         * class.cs (Event.Define): The lookup can fail.
22856
22857         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
22858
22859         * expression.cs: Resolve the this instance before invoking the code.
22860
22861 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
22862
22863         * cs-parser.jay: Add a production in element_access that allows
22864         the thing to become a "type" reference.  This way we can parse
22865         things like "(string [])" as a type.
22866
22867         Note that this still does not handle the more complex rules of
22868         casts. 
22869
22870
22871         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
22872
22873         * ecore.cs: (CopyNewMethods): new utility function used to
22874         assemble the list of methods from running FindMembers.
22875
22876         (MemberLookup): Rework FindMembers so that 
22877
22878 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
22879
22880         * class.cs (TypeContainer): Remove Delegates who fail to be
22881         defined.
22882
22883         * delegate.cs (Populate): Verify that we dont get null return
22884         values.   TODO: Check for AsAccessible.
22885
22886         * cs-parser.jay: Use basename to emit error 574 (destructor should
22887         have the same name as container class), not the full name.
22888
22889         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
22890         possible representation.  
22891
22892         Also implements integer type suffixes U and L.
22893
22894 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
22895
22896         * expression.cs (ArrayCreation.DoResolve): We need to do the
22897         argument resolution *always*.
22898
22899         * decl.cs: Make this hold the namespace.  Hold the root context as
22900         well.
22901         (LookupType): Move here.
22902
22903         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
22904
22905         * location.cs (Row, Name): Fixed the code, it was always returning
22906         references to the first file.
22907
22908         * interface.cs: Register properties defined through interfaces.
22909
22910         * driver.cs: Add support for globbing on the command line
22911
22912         * class.cs (Field): Make it derive from MemberCore as well.
22913         (Event): ditto.
22914
22915 2001-12-15  Ravi Pratap  <ravi@ximian.com>
22916
22917         * class.cs (Event::Define): Check that the type of the event is a delegate
22918         type else flag error #66.
22919
22920         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
22921         same.
22922
22923         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
22924         values of EntryPoint, CharSet etc etc.
22925
22926         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
22927
22928         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
22929         be null and we should ignore this. I am not sure if this is really clean. Apparently,
22930         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
22931         which needs this to do its work.
22932
22933         * ../errors/cs0066.cs : Add.
22934
22935 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
22936
22937         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
22938         helper functions.
22939
22940         * class.cs: (MethodSignature.MethodSignature): Removed hack that
22941         clears out the parameters field.
22942         (MemberSignatureCompare): Cleanup
22943
22944         (MemberCore): New base class used to share code between MethodCore
22945         and Property.
22946
22947         (RegisterRequiredImplementations) BindingFlags.Public requires
22948         either BindingFlags.Instace or Static.  Use instance here.
22949
22950         (Property): Refactored code to cope better with the full spec.
22951
22952         * parameter.cs (GetParameterInfo): Return an empty array instead
22953         of null on error.
22954
22955         * class.cs (Property): Abstract or extern properties have no bodies.
22956
22957         * parameter.cs (GetParameterInfo): return a zero-sized array.
22958
22959         * class.cs (TypeContainer.MethodModifiersValid): Move all the
22960         method modifier validation to the typecontainer so we can reuse
22961         this on properties.
22962
22963         (MethodCore.ParameterTypes): return an empty sized array of types.
22964
22965         (Property.Define): Test property modifier validity.
22966
22967         Add tests for sealed/override too.
22968
22969         (Method.Emit): abstract or extern methods have no bodies.
22970
22971 2001-12-14  Ravi Pratap  <ravi@ximian.com>
22972
22973         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
22974         thing.
22975
22976         (Method::Define, ::Emit): Modify accordingly.
22977
22978         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
22979
22980         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
22981
22982         * makefile: Pass in /unsafe.
22983
22984 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
22985
22986         * class.cs (MakeKey): Kill routine.
22987
22988         * class.cs (TypeContainer.Define): Correctly define explicit
22989         method implementations (they require the full interface name plus
22990         the method name).
22991
22992         * typemanager.cs: Deply the PtrHashtable here and stop using the
22993         lame keys.  Things work so much better.
22994
22995         This of course broke everyone who depended on `RegisterMethod' to
22996         do the `test for existance' test.  This has to be done elsewhere.
22997
22998         * support.cs (PtrHashtable): A hashtable that avoid comparing with
22999         the object stupid Equals method (because, that like fails all over
23000         the place).  We still do not use it.
23001
23002         * class.cs (TypeContainer.SetRequiredInterface,
23003         TypeContainer.RequireMethods): Killed these two routines and moved
23004         all the functionality to RegisterRequiredImplementations.
23005
23006         (TypeContainer.RegisterRequiredImplementations): This routine now
23007         registers all the implementations required in an array for the
23008         interfaces and abstract methods.  We use an array of structures
23009         which can be computed ahead of time to reduce memory usage and we
23010         also assume that lookups are cheap as most classes will not
23011         implement too many interfaces.
23012
23013         We also avoid creating too many MethodSignatures.
23014
23015         (TypeContainer.IsInterfaceMethod): Update and optionally does not
23016         clear the "pending" bit if we find that there are problems with
23017         the declaration.
23018
23019         (TypeContainer.VerifyPendingMethods): Update to report errors of
23020         methods that look like implementations but are not.
23021
23022         (TypeContainer.Define): Add support for explicit interface method
23023         implementation. 
23024
23025 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
23026
23027         * typemanager.cs: Keep track of the parameters here instead of
23028         being a feature of the TypeContainer.
23029
23030         * class.cs: Drop the registration of parameters here, as
23031         InterfaceMethods are also interface declarations.
23032
23033         * delegate.cs: Register methods with the TypeManager not only with
23034         the TypeContainer.  This code was buggy.
23035
23036         * interface.cs: Full registation here.
23037
23038 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
23039
23040         * expression.cs: Remove reducer for binary expressions, it can not
23041         be done this way.
23042
23043         * const.cs: Put here the code that used to go into constant.cs
23044
23045         * constant.cs: Put here the code for constants, this is a new base
23046         class for Literals.
23047
23048         * literal.cs: Make Literal derive from Constant.
23049
23050 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
23051
23052         * statement.cs (Return.Emit): Report error 157 if the user
23053         attempts to return from a finally block.
23054
23055         (Return.Emit): Instead of emitting a return, jump to the end of
23056         the function.
23057
23058         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
23059         LocalBuilder to store the result of the function.  ReturnLabel is
23060         the target where we jump.
23061
23062
23063 2001-12-09  Radek Doulik  <rodo@ximian.com>
23064
23065         * cs-parser.jay: remember alias in current namespace
23066
23067         * ecore.cs (SimpleName::DoResolve): use aliases for types or
23068         namespaces
23069
23070         * class.cs (LookupAlias): lookup alias in my_namespace
23071
23072         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
23073         aliases hashtable
23074         (LookupAlias): lookup alias in this and if needed in parent
23075         namespaces
23076
23077 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
23078
23079         * support.cs: 
23080
23081         * rootcontext.cs: (ModuleBuilder) Made static, first step into
23082         making things static.  I need this to avoid passing the
23083         TypeContainer when calling ParameterType.
23084
23085         * support.cs (InternalParameters.ParameterType): Remove ugly hack
23086         that did string manipulation to compute the type and then call
23087         GetType.  Use Parameter.ParameterType instead.
23088
23089         * cs-tokenizer.cs: Consume the suffix for floating values.
23090
23091         * expression.cs (ParameterReference): figure out whether this is a
23092         reference parameter or not.  Kill an extra variable by computing
23093         the arg_idx during emission.
23094
23095         * parameter.cs (Parameters.GetParameterInfo): New overloaded
23096         function that returns whether a parameter is an out/ref value or not.
23097
23098         (Parameter.ParameterType): The type of the parameter (base,
23099         without ref/out applied).
23100
23101         (Parameter.Resolve): Perform resolution here.
23102         (Parameter.ExternalType): The full type (with ref/out applied).
23103
23104         * statement.cs (Using.Emit, Using.EmitExpression): Implement
23105         support for expressions on the using statement.
23106
23107 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
23108
23109         * statement.cs (Using.EmitLocalVariableDecls): Split the
23110         localvariable handling of the using statement.
23111
23112         (Block.EmitMeta): Keep track of variable count across blocks.  We
23113         were reusing slots on separate branches of blocks.
23114
23115         (Try.Emit): Emit the general code block, we were not emitting it. 
23116
23117         Check the type of the declaration to be an IDisposable or
23118         something that can be implicity converted to it. 
23119
23120         Emit conversions if required.
23121
23122         * ecore.cs (EmptyExpression): New utility class.
23123         (Expression.ImplicitConversionExists): New utility function.
23124
23125 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
23126
23127         * statement.cs (Using): Implement.
23128
23129         * expression.cs (LocalVariableReference): Support read only variables.
23130
23131         * statement.cs: Remove the explicit emit for the Leave opcode.
23132         (VariableInfo): Add a readonly field.
23133
23134 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
23135
23136         * ecore.cs (ConvCast): new class used to encapsulate the various
23137         explicit integer conversions that works in both checked and
23138         unchecked contexts.
23139
23140         (Expression.ConvertNumericExplicit): Use new ConvCast class to
23141         properly generate the overflow opcodes.
23142
23143 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23144
23145         * statement.cs: The correct type for the EmptyExpression is the
23146         element_type, not the variable type.  Ravi pointed this out.
23147
23148 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23149
23150         * class.cs (Method::Define): Handle PInvoke methods specially
23151         by using DefinePInvokeMethod instead of the usual one.
23152
23153         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
23154         above to do the task of extracting information and defining the method.
23155
23156 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23157
23158         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
23159         of the condition for string type.
23160
23161         (Emit): Move that here. 
23162
23163         (ArrayCreation::CheckIndices): Keep string literals in their expression
23164         form.
23165
23166         (EmitDynamicInitializers): Handle strings appropriately.
23167
23168 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23169
23170         * codegen.cs (EmitContext): Replace multiple variables with a
23171         single pointer to the current Switch statement.
23172
23173         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
23174         EmitContext.
23175
23176 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23177
23178         * statement.cs 
23179
23180         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
23181         default'.
23182
23183         (Foreach.Emit): Foreach on arrays was not setting
23184         up the loop variables (for break/continue).
23185
23186         (GotoCase): Semi-implented.
23187
23188 2001-12-03  Ravi Pratap  <ravi@ximian.com>
23189
23190         * attribute.cs (CheckAttribute): Handle system attributes by using
23191         Attribute.GetAttributes to examine information we need.
23192
23193         (GetValidPlaces): Same here.
23194
23195         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
23196
23197         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
23198
23199         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
23200
23201         (Method::Define): Set appropriate flags if we have a DllImport attribute.
23202
23203         (Method::Emit): Handle the case when we are a PInvoke method.
23204
23205 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23206
23207         * expression.cs: Use ResolveWithSimpleName on compound names.
23208
23209 2001-12-02  Ravi Pratap  <ravi@ximian.com>
23210
23211         * constant.cs (EmitConstant): Make sure we resolve the associated expression
23212         before trying to reduce it.
23213
23214         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
23215
23216         * constant.cs (LookupConstantValue): Implement.
23217
23218         (EmitConstant): Use the above in emitting the constant.
23219
23220         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
23221         that are user-defined by doing a LookupConstantValue on them.
23222
23223         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
23224         too, like above.
23225
23226 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
23227
23228         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
23229
23230         (BaseAccess.DoResolve): Implement.
23231
23232         (MemberAccess.DoResolve): Split this routine into a
23233         ResolveMemberAccess routine that can be used independently
23234
23235 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
23236
23237         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
23238         As that share bits of the implementation.  Is returns a boolean,
23239         while As returns the Type that is being probed.
23240
23241 2001-12-01  Ravi Pratap  <ravi@ximian.com>
23242
23243         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
23244         instead of a Literal - much easier.
23245
23246         (EnumInTransit): Remove - utterly useless :-)
23247
23248         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
23249
23250         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
23251
23252         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
23253         chain when we have no associated expression.
23254
23255 2001-11-30  Ravi Pratap  <ravi@ximian.com>
23256
23257         * constant.cs (Define): Use Location while reporting the errror.
23258
23259         Also emit a warning when 'new' is used and there is no inherited
23260         member to hide.
23261
23262         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
23263         populated.
23264
23265         (LookupEnumValue): Implement to lookup an enum member's value and define it
23266         if necessary.
23267
23268         (Populate): Re-write accordingly to use the above routine.
23269
23270 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
23271
23272         * expression.cs (This): Fix prototype for DoResolveLValue to
23273         override the base class DoResolveLValue.
23274
23275         * cs-parser.cs: Report errors cs574 and cs575 (destructor
23276         declarations) 
23277
23278         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
23279         (we need to load the address of the field here).  This fixes
23280         test-22. 
23281
23282         (FieldExpr.DoResolveLValue): Call the DoResolve
23283         function to initialize the Instance expression.
23284
23285         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
23286         correctly the GetEnumerator operation on a value type.
23287
23288         * cs-parser.jay: Add more simple parsing error catches.
23289
23290         * statement.cs (Switch): Add support for string switches.
23291         Handle null specially.
23292
23293         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
23294
23295 2001-11-28  Ravi Pratap  <ravi@ximian.com>
23296
23297         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
23298
23299         (declare_local_constant): New helper function.
23300
23301         * statement.cs (AddConstant): Keep a separate record of constants
23302
23303         (IsConstant): Implement to determine if a variable is a constant.
23304
23305         (GetConstantExpression): Implement.
23306
23307         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
23308
23309         * statement.cs (IsVariableDefined): Re-write.
23310
23311 2001-11-27  Ravi Pratap  <ravi@ximian.com>
23312
23313         * class.cs (TypeContainer::FindMembers): Look for constants
23314         in the case when we are looking for MemberTypes.Field
23315
23316         * expression.cs (MemberAccess::DoResolve): Check that in the
23317         case we are a FieldExpr and a Literal, we are not being accessed
23318         by an instance reference.
23319
23320         * cs-parser.jay (local_constant_declaration): Implement.
23321
23322         (declaration_statement): Implement for constant declarations.
23323
23324 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
23325
23326         * statement.cs (Switch): Catch double defaults.
23327
23328         (Switch): More work on the switch() statement
23329         implementation.  It works for integral values now, need to finish
23330         string support.
23331
23332
23333 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23334
23335         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
23336         integer literals into other integer literals.  To be used by
23337         switch. 
23338
23339 2001-11-24  Ravi Pratap  <ravi@ximian.com>
23340
23341         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
23342         some memory.
23343
23344         (EmitDynamicInitializers): Cope with the above since we extract data
23345         directly from ArrayData now.
23346
23347         (ExpectInitializers): Keep track of whether initializers are mandatory
23348         or not.
23349
23350         (Bounds): Make it a hashtable to prevent the same dimension being 
23351         recorded for every element in that dimension.
23352
23353         (EmitDynamicInitializers): Fix bug which prevented the Set array method
23354         from being found.
23355
23356         Also fix bug which was causing the indices to be emitted in the reverse
23357         order.
23358
23359 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23360
23361         * expression.cs (ArrayCreation): Implement the bits that Ravi left
23362         unfinished.  They do not work, because the underlying code is
23363         sloppy.
23364
23365 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23366
23367         * cs-parser.jay: Remove bogus fixme.
23368
23369         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
23370         on Switch statement.
23371
23372 2001-11-23  Ravi Pratap  <ravi@ximian.com>
23373
23374         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
23375         the same. 
23376
23377         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
23378         parameter. Apparently, any expression is allowed. 
23379
23380         (ValidateInitializers): Update accordingly.
23381
23382         (CheckIndices): Fix some tricky bugs thanks to recursion.
23383
23384         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
23385         I was being completely brain-dead.
23386
23387         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
23388         and re-write acordingly.
23389
23390         (DelegateInvocation): Re-write accordingly.
23391
23392         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
23393
23394         (MakeByteBlob): Handle types more correctly.
23395
23396         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
23397         initialization from expressions but it is incomplete because I am a complete
23398         Dodo :-|
23399
23400 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23401
23402         * statement.cs (If.Emit): Fix a bug that generated incorrect code
23403         on If.  Basically, we have to return `true' (ie, we do return to
23404         our caller) only if both branches of the if return.
23405
23406         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
23407         short-circuit operators, handle them as short circuit operators. 
23408
23409         (Cast.DoResolve): Resolve type.
23410         (Cast.Cast): Take an expression as the target type.
23411
23412         * cs-parser.jay (cast_expression): Remove old hack that only
23413         allowed a limited set of types to be handled.  Now we take a
23414         unary_expression and we resolve to a type during semantic
23415         analysis.
23416
23417         Use the grammar productions from Rhys to handle casts (this is
23418         not complete like Rhys syntax yet, we fail to handle that corner
23419         case that C# has regarding (-x), but we will get there.
23420
23421 2001-11-22  Ravi Pratap  <ravi@ximian.com>
23422
23423         * class.cs (EmitFieldInitializer): Take care of the case when we have a
23424         field which is an array type.
23425
23426         * cs-parser.jay (declare_local_variables): Support array initialization too.
23427
23428         * typemanager.cs (MakeKey): Implement.
23429
23430         (everywhere): Use the above appropriately.
23431
23432         * cs-parser.jay (for_statement): Update for array initialization while
23433         declaring variables.
23434
23435         * ecore.cs : The error message was correct, it's the variable's names that
23436         were misleading ;-) Make the code more readable.
23437
23438         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
23439         the correct type etc.
23440
23441         (ConvertExplicit): Handle Enum types by examining the underlying type.
23442
23443 2001-11-21  Ravi Pratap  <ravi@ximian.com>
23444
23445         * parameter.cs (GetCallingConvention): Always return
23446         CallingConventions.Standard for now.
23447
23448 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23449
23450         * expression.cs (Binary.ResolveOperator): Update the values of `l'
23451         and `r' after calling DoNumericPromotions.
23452
23453         * ecore.cs: Fix error message (the types were in the wrong order).
23454
23455         * statement.cs (Foreach.ProbeCollectionType): Need to pass
23456         BindingFlags.Instance as well 
23457
23458         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
23459         implicit int literal conversion in an empty cast so that we
23460         propagate the right type upstream.
23461
23462         (UnboxCast): new class used to unbox value types.
23463         (Expression.ConvertExplicit): Add explicit type conversions done
23464         by unboxing.
23465
23466         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23467         the target type before applying the implicit LongLiterals to ULong
23468         literal cast.
23469
23470 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23471
23472         * cs-parser.jay (for_statement): Reworked the way For works: now
23473         we declare manually any variables that are introduced in
23474         for_initializer to solve the problem of having out-of-band code
23475         emition (that is what got for broken).
23476
23477         (declaration_statement): Perform the actual variable declaration
23478         that used to be done in local_variable_declaration here.
23479
23480         (local_variable_declaration): Do not declare anything, just pass
23481         the information on a DictionaryEntry
23482
23483 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23484
23485         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23486         re-write of the logic to now make it recursive.
23487
23488         (UpdateIndices): Re-write accordingly.
23489
23490         Store element data in a separate ArrayData list in the above methods.
23491
23492         (MakeByteBlob): Implement to dump the array data into a byte array.
23493
23494 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23495
23496         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23497         into CheckIndices.
23498
23499         * constant.cs (Define): Implement.
23500
23501         (EmitConstant): Re-write fully.
23502
23503         Pass in location info.
23504
23505         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23506         respectively.
23507
23508         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23509         DictionaryEntry since we need location info too.
23510
23511         (constant_declaration): Update accordingly.
23512
23513         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23514         code into another method : UpdateIndices.
23515
23516 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23517
23518         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23519         some type checking etc.
23520
23521 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23522
23523         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23524         bits to provide dimension info if the user skips doing that.
23525
23526         Update second constructor to store the rank correctly.
23527
23528 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23529
23530         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23531         and try to implement.
23532
23533         * ../errors/cs0150.cs : Add.
23534
23535         * ../errors/cs0178.cs : Add.
23536
23537 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23538
23539         * statement.cs: Implement foreach on multi-dimensional arrays. 
23540
23541         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23542         name of the params argument.
23543
23544         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23545         initializing the array.
23546
23547         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23548         we can use this elsewhere.
23549
23550         * statement.cs: Finish implementation of foreach for single
23551         dimension arrays.
23552
23553         * cs-parser.jay: Use an out-of-band stack to pass information
23554         around, I wonder why I need this.
23555
23556         foreach_block: Make the new foreach_block the current_block.
23557
23558         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23559         function used to return a static Parameters structure.  Used for
23560         empty parameters, as those are created very frequently.
23561
23562         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23563
23564 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23565
23566         * interface.cs : Default modifier is private, not public. The
23567         make verify test passes again.
23568
23569 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23570
23571         * support.cs (ReflectionParameters): Fix logic to determine
23572         whether the last parameter is a params one. Test 9 passes again.
23573
23574         * delegate.cs (Populate): Register the builders we define with
23575         RegisterParameterForBuilder. Test 19 passes again.
23576
23577         * cs-parser.jay (property_declaration): Reference $6 instead
23578         of $$ to get at the location.
23579
23580         (indexer_declaration): Similar stuff.
23581
23582         (attribute): Ditto.
23583
23584         * class.cs (Property): Register parameters for the Get and Set methods
23585         if they exist. Test 23 passes again.
23586
23587         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23588         call to EmitArguments as we are sure there aren't any params arguments. 
23589         Test 32 passes again.
23590
23591         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
23592         IndexOutOfRangeException. 
23593
23594         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
23595         Test 33 now passes again.
23596
23597 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
23598
23599         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
23600         broke a bunch of things.  Will have to come up with a better way
23601         of tracking locations.
23602
23603         * statement.cs: Implemented foreach for single dimension arrays.
23604
23605 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23606
23607         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
23608         an error.  This removes the lookup from the critical path.
23609
23610         * cs-parser.jay: Removed use of temporary_loc, which is completely
23611         broken. 
23612
23613 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
23614
23615         * support.cs (ReflectionParameters.ParameterModifier): Report
23616         whether the argument is a PARAMS argument or not.
23617
23618         * class.cs: Set the attribute `ParamArrayAttribute' on the
23619         parameter argument.
23620
23621         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
23622         and cons_param_array_attribute (ConstructorInfo for
23623         ParamArrayAttribute)., 
23624
23625         * codegen.cs: Emit the return using the `Return' statement, that
23626         way we can report the error correctly for missing return values. 
23627
23628         * class.cs (Method.Emit): Clean up.
23629
23630         * expression.cs (Argument.Resolve): Take another argument: the
23631         location where this argument is used.  Notice that this is not
23632         part of the "Argument" class as to reduce the size of the
23633         structure (we know the approximate location anyways).
23634
23635         Test if the argument is a variable-reference, if not, then
23636         complain with a 206.
23637
23638         (Argument.Emit): Emit addresses of variables.
23639
23640         (Argument.FullDesc): Simplify.
23641
23642         (Invocation.DoResolve): Update for Argument.Resolve.
23643
23644         (ElementAccess.DoResolve): ditto.
23645
23646         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
23647         method should be virtual, as this method is always virtual.
23648
23649         (NewDelegate.DoResolve): Update for Argument.Resolve.
23650
23651         * class.cs (ConstructorInitializer.DoResolve): ditto.
23652
23653         * attribute.cs (Attribute.Resolve): ditto.
23654
23655 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
23656
23657         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
23658
23659         * expression.cs (ParameterReference): Drop IStackStorage and implement
23660         IAssignMethod instead. 
23661
23662         (LocalVariableReference): ditto.
23663
23664         * ecore.cs (FieldExpr): Drop IStackStorage and implement
23665         IAssignMethod instead. 
23666
23667 2001-11-13  Miguel de Icaza <miguel@ximian.com>
23668
23669         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
23670         enumerations that are used in heavily used structures derive from
23671         byte in a laughable and pathetic attempt to reduce memory usage.
23672         This is the kind of pre-optimzations that you should not do at
23673         home without adult supervision.
23674
23675         * expression.cs (UnaryMutator): New class, used to handle ++ and
23676         -- separatedly from the other unary operators.  Cleans up the
23677         code, and kills the ExpressionStatement dependency in Unary.
23678
23679         (Unary): Removed `method' and `Arguments' from this class, making
23680         it smaller, and moving it all to SimpleCall, so I can reuse this
23681         code in other locations and avoid creating a lot of transient data
23682         strucutres when not required.
23683
23684         * cs-parser.jay: Adjust for new changes.
23685
23686 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
23687
23688         * enum.cs (Enum.Populate): If there is a failure during
23689         definition, return
23690
23691         * cs-parser.jay (opt_enum_base): we used to catch type errors
23692         here, but this is really incorrect.  The type error should be
23693         catched during semantic analysis.
23694
23695 2001-12-11  Ravi Pratap  <ravi@ximian.com>
23696
23697         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
23698         current_local_parameters as expected since I, in my stupidity, had forgotten
23699         to do this :-)
23700
23701         * attribute.cs (GetValidPlaces): Fix stupid bug.
23702
23703         * class.cs (Method::Emit): Perform check on applicability of attributes.
23704
23705         (Constructor::Emit): Ditto.
23706
23707         (Field::Emit): Ditto.
23708
23709         (Field.Location): Store location information.
23710
23711         (Property, Event, Indexer, Operator): Ditto.
23712
23713         * cs-parser.jay (field_declaration): Pass in location for each field.
23714
23715         * ../errors/cs0592.cs : Add.
23716
23717 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23718
23719         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
23720
23721         (InitCoreTypes): Update accordingly.
23722
23723         (RegisterAttrType, LookupAttr): Implement.
23724
23725         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
23726         info about the same.
23727
23728         (Resolve): Update to populate the above as necessary.
23729
23730         (Error592): Helper.
23731
23732         (GetValidPlaces): Helper to the above.
23733
23734         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
23735
23736         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
23737
23738 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23739
23740         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
23741
23742         * ../errors/cs0617.cs : Add.
23743
23744 2001-11-11  Ravi Pratap  <ravi@ximian.com>
23745
23746         * enum.cs (Emit): Rename to Populate to be more consistent with what
23747         we expect it to do and when exactly it is called.
23748
23749         * class.cs, rootcontext.cs : Update accordingly.
23750
23751         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
23752         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
23753
23754         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
23755
23756         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
23757         of a fieldinfo using the above, when dealing with a FieldBuilder.
23758
23759 2001-11-10  Ravi Pratap  <ravi@ximian.com>
23760
23761         * ../errors/cs0031.cs : Add.
23762
23763         * ../errors/cs1008.cs : Add.
23764
23765         * ../errrors/cs0543.cs : Add.
23766
23767         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
23768         enum type.
23769
23770         (FindMembers): Implement.
23771
23772         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
23773         enums and delegates too.
23774
23775         (enum_types): Rename to builder_to_enum.
23776
23777         (delegate_types): Rename to builder_to_delegate.
23778
23779         * delegate.cs (FindMembers): Implement.
23780
23781 2001-11-09  Ravi Pratap  <ravi@ximian.com>
23782
23783         * typemanager.cs (IsEnumType): Implement.
23784
23785         * enum.cs (Emit): Re-write parts to account for the underlying type
23786         better and perform checking etc.
23787
23788         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
23789         of the underlying type.
23790
23791         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
23792         value
23793
23794         * enum.cs (error31): Helper to report error #31.
23795
23796         * cs-parser.jay (enum_declaration): Store location of each member too.
23797
23798         * enum.cs (member_to_location): New hashtable. 
23799
23800         (AddEnumMember): Update location hashtable.
23801
23802         (Emit): Use the location of each member while reporting errors.
23803
23804 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23805
23806         * cs-parser.jay: A for_initializer if is a
23807         local_variable_declaration really ammount to have an implicit
23808         block with the variable declaration and no initializer for for.
23809
23810         * statement.cs (For.Emit): Cope with null initializers.
23811
23812         This fixes the infinite loop on for initializers.
23813
23814 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
23815
23816         * enum.cs: More cleanup.
23817
23818         * ecore.cs: Remove dead code.
23819
23820         * class.cs (Property.Emit): More simplification.
23821         (Event.Emit): ditto.
23822
23823         Reworked to have less levels of indentation.
23824
23825 2001-11-08  Ravi Pratap  <ravi@ximian.com>
23826
23827         * class.cs (Property): Emit attributes.
23828
23829         (Field): Ditto.
23830
23831         (Event): Ditto.
23832
23833         (Indexer): Ditto.
23834
23835         (Operator): Ditto.
23836
23837         * enum.cs (Emit): Ditto.
23838
23839         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
23840         Enums too.
23841
23842         * class.cs (Field, Event, etc.): Move attribute generation into the
23843         Emit method everywhere.
23844
23845         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
23846         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
23847         as we had no way of defining nested enums !
23848
23849         * rootcontext.cs : Adjust code accordingly.
23850
23851         * typemanager.cs (AddEnumType): To keep track of enum types separately.
23852
23853 2001-11-07  Ravi Pratap  <ravi@ximian.com>
23854
23855         * expression.cs (EvalConstantExpression): Move into ecore.cs
23856
23857         * enum.cs (Enum): Rename some members and make them public and readonly
23858         according to our convention.
23859
23860         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
23861         nothing else.
23862
23863         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
23864
23865         (Enum::Emit): Write a simple version for now which doesn't try to compute
23866         expressions. I shall modify this to be more robust in just a while.
23867
23868         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
23869
23870         (TypeContainer::CloseType): Create the Enum types too.
23871
23872         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
23873
23874         * expression.cs (EvalConstantExpression): Get rid of completely.
23875
23876         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
23877         user-defined values and other cases.
23878
23879         (IsValidEnumLiteral): Helper function.
23880
23881         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
23882         out there in the case we had a literal FieldExpr.
23883
23884         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
23885
23886         (Literalize): Revamp a bit to take two arguments.
23887
23888         (EnumLiteral): New class which derives from Literal to wrap enum literals.
23889
23890 2001-11-06  Ravi Pratap  <ravi@ximian.com>
23891
23892         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
23893
23894         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
23895
23896         (Resolve): Use the above to ensure we have proper initializers.
23897
23898 2001-11-05  Ravi Pratap  <ravi@ximian.com>
23899
23900         * expression.cs (Expression::EvalConstantExpression): New method to 
23901         evaluate constant expressions.
23902
23903         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
23904
23905 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
23906
23907         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
23908         in an array.
23909
23910         (Binary.ResolveOperator): Handle operator != (object a, object b)
23911         and operator == (object a, object b);
23912
23913         (Binary.DoNumericPromotions): Indicate whether the numeric
23914         promotion was possible.
23915
23916         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
23917         Implement.  
23918
23919         Made the ArrayAccess implement interface IAssignMethod instead of
23920         IStackStore as the order in which arguments are passed reflects
23921         this.
23922
23923         * assign.cs: Instead of using expr.ExprClass to select the way of
23924         assinging, probe for the IStackStore/IAssignMethod interfaces.
23925
23926         * typemanager.cs: Load InitializeArray definition.
23927
23928         * rootcontext.cs (RootContext.MakeStaticData): Used to define
23929         static data that can be used to initialize arrays. 
23930
23931 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
23932
23933         * expression.cs: Handle operator== and operator!= for booleans.
23934
23935         (Conditioal.Reduce): Implement reducer for the ?: operator.
23936
23937         (Conditional.Resolve): Implement dead code elimination.
23938
23939         (Binary.Resolve): Catch string literals and return a new
23940         concatenated string.
23941
23942         (Unary.Reduce): Implement reduction of unary expressions.
23943
23944         * ecore.cs: Split out the expression core handling here.
23945
23946         (Expression.Reduce): New method used to perform constant folding
23947         and CSE.  This is needed to support constant-expressions. 
23948
23949         * statement.cs (Statement.EmitBoolExpression): Pass true and false
23950         targets, and optimize for !x.
23951
23952 2001-11-04  Ravi Pratap  <ravi@ximian.com>
23953
23954         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
23955         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
23956         set custom atttributes.
23957
23958         * literal.cs (Literal::GetValue): New abstract method to return the actual
23959         value of the literal, cast as an object.
23960
23961         (*Literal): Implement GetValue method.
23962
23963         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
23964         expressions to the arraylist but objects of type Argument.
23965
23966         * class.cs (TypeContainer::Emit): Emit our attributes too.
23967
23968         (Method::Emit, Constructor::Emit): Ditto.
23969
23970         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
23971         to be ignoring earlier.
23972
23973 2001-11-03  Ravi Pratap  <ravi@ximian.com>
23974
23975         * attribute.cs (AttributeSection::Define): Implement to do the business
23976         of constructing a CustomAttributeBuilder.
23977
23978         (Attribute): New trivial class. Increases readability of code.  
23979
23980         * cs-parser.jay : Update accordingly.
23981
23982         (positional_argument_list, named_argument_list, named_argument): New rules
23983
23984         (attribute_arguments): Use the above so that we are more correct.
23985
23986 2001-11-02  Ravi Pratap  <ravi@ximian.com>
23987
23988         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
23989         to perform all checks for a method with a params parameter.
23990
23991         (Invocation::OverloadResolve): Update to use the above method and therefore
23992         cope correctly with params method invocations.
23993
23994         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
23995         params too.
23996
23997         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
23998         constructors in our parent too because we can't afford to miss out on 
23999         protected ones ;-)
24000
24001         * attribute.cs (AttributeSection): New name for the class Attribute
24002
24003         Other trivial changes to improve readability.
24004
24005         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
24006         use the new class names.
24007
24008 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24009
24010         * class.cs (Method::Define): Complete definition for params types too
24011
24012         (Indexer::Define): Ditto.
24013
24014         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
24015         Cope everywhere with a request for info about the array parameter.
24016
24017 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24018
24019         * tree.cs (RecordNamespace): Fix up to check for the correct key.
24020
24021         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
24022         local_variable_type to extract the string corresponding to the type.
24023
24024         (local_variable_type): Fixup the action to use the new helper method.
24025
24026         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
24027         go.
24028
24029         * expression.cs : Clean out code which uses the above.
24030
24031 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24032
24033         * typemanager.cs (RegisterMethod): Check if we already have an existing key
24034         and bale out if necessary by returning a false.
24035
24036         (RegisterProperty): Ditto.
24037
24038         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
24039         and print out appropriate error messages.
24040
24041         * interface.cs (everywhere): Ditto.
24042
24043         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
24044         location to constructor.
24045
24046         * class.cs (Property, Event, Indexer): Update accordingly.
24047
24048         * ../errors/cs111.cs : Added.
24049
24050         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
24051         of a method, as laid down by the spec.
24052
24053         (Invocation::OverloadResolve): Use the above method.
24054
24055 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24056
24057         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
24058         now take a TypeContainer and a Parameters object.
24059
24060         (ParameterData): Modify return type of ParameterModifier method to be 
24061         Parameter.Modifier and not a string.
24062
24063         (ReflectionParameters, InternalParameters): Update accordingly.
24064
24065         * expression.cs (Argument::GetParameterModifier): Same here.
24066
24067         * support.cs (InternalParameters::ParameterType): Find a better way of determining
24068         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
24069         symbol in it at all so maybe this is only for now.
24070
24071 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24072
24073         * support.cs (InternalParameters): Constructor now takes an extra argument 
24074         which is the actual Parameters class.
24075
24076         (ParameterDesc): Update to provide info on ref/out modifiers.
24077
24078         * class.cs (everywhere): Update call to InternalParameters to pass in
24079         the second argument too.
24080
24081         * support.cs (ParameterData): Add ParameterModifier, which is a method 
24082         to return the modifier info [ref/out etc]
24083
24084         (InternalParameters, ReflectionParameters): Implement the above.
24085
24086         * expression.cs (Argument::ParameterModifier): Similar function to return
24087         info about the argument's modifiers.
24088
24089         (Invocation::OverloadResolve): Update to take into account matching modifiers 
24090         too.
24091
24092         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
24093         a new SetFormalParameters object which we pass to InternalParameters.
24094
24095 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24096
24097         * expression.cs (NewArray): Merge into the ArrayCreation class.
24098
24099 2001-10-29  Ravi Pratap  <ravi@ximian.com>
24100
24101         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
24102         NewUserdefinedArray into one as there wasn't much of a use in having
24103         two separate ones.
24104
24105         * expression.cs (Argument): Change field's name to ArgType from Type.
24106
24107         (Type): New readonly property which returns the proper type, taking into 
24108         account ref/out modifiers.
24109
24110         (everywhere): Adjust code accordingly for the above.
24111
24112         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
24113         whether we are emitting for a ref or out parameter.
24114
24115         * expression.cs (Argument::Emit): Use the above field to set the state.
24116
24117         (LocalVariableReference::Emit): Update to honour the flag and emit the
24118         right stuff.
24119
24120         * parameter.cs (Attributes): Set the correct flags for ref parameters.
24121
24122         * expression.cs (Argument::FullDesc): New function to provide a full desc.
24123
24124         * support.cs (ParameterData): Add method ParameterDesc to the interface.
24125
24126         (ReflectionParameters, InternalParameters): Implement the above method.
24127
24128         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
24129         reporting errors.
24130
24131         (Invocation::FullMethodDesc): Ditto. 
24132
24133 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
24134
24135         * cs-parser.jay: Add extra production for the second form of array
24136         creation. 
24137
24138         * expression.cs (ArrayCreation): Update to reflect the above
24139         change. 
24140
24141         * Small changes to prepare for Array initialization.
24142
24143 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
24144
24145         * typemanager.cs (ImplementsInterface): interface might be null;
24146         Deal with this problem;
24147
24148         Also, we do store negative hits on the cache (null values), so use
24149         this instead of calling t.GetInterfaces on the type everytime.
24150
24151 2001-10-28  Ravi Pratap  <ravi@ximian.com>
24152
24153         * typemanager.cs (IsBuiltinType): New method to help determine the same.
24154
24155         * expression.cs (New::DoResolve): Get rid of array creation code and instead
24156         split functionality out into different classes.
24157
24158         (New::FormArrayType): Move into NewBuiltinArray.
24159
24160         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
24161         quite useless.
24162
24163         (NewBuiltinArray): New class to handle creation of built-in arrays.
24164
24165         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
24166         account creation of one-dimensional arrays.
24167
24168         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
24169
24170         (NewUserdefinedArray::DoResolve): Implement.
24171
24172         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
24173
24174         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
24175         we maintain inside the TypeManager. This is necessary to perform lookups on the
24176         module builder.
24177
24178         (LookupType): Update to perform GetType on the module builders too.     
24179
24180         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
24181
24182         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
24183
24184 2001-10-23  Ravi Pratap  <ravi@ximian.com>
24185
24186         * expression.cs (New::DoResolve): Implement guts of array creation.
24187
24188         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
24189
24190 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
24191
24192         * expression.cs: Fix bug I introduced lsat night that broke
24193         Delegates. 
24194
24195         (Expression.Resolve): Report a 246 error (can not resolve name)
24196         if we find a SimpleName in the stream.
24197
24198         (Expression.ResolveLValue): Ditto.
24199
24200         (Expression.ResolveWithSimpleName): This function is a variant of
24201         ResolveName, this one allows SimpleNames to be returned without a
24202         warning.  The only consumer of SimpleNames is MemberAccess
24203
24204 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
24205
24206         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
24207         might arrive here.  I have my doubts that this is correct.
24208
24209         * statement.cs (Lock): Implement lock statement.
24210
24211         * cs-parser.jay: Small fixes to support `lock' and `using'
24212
24213         * cs-tokenizer.cs: Remove extra space
24214
24215         * driver.cs: New flag --checked, allows to turn on integer math
24216         checking. 
24217
24218         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
24219         Threading.Monitor.Exit 
24220
24221 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
24222
24223         * expression.cs (IndexerAccess::DoResolveLValue): Set the
24224         Expression Class to be IndexerAccess.
24225
24226         Notice that Indexer::DoResolve sets the eclass to Value.
24227
24228 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
24229
24230         * class.cs (TypeContainer::Emit): Emit code for indexers.
24231
24232         * assign.cs (IAssignMethod): New interface implemented by Indexers
24233         and Properties for handling assignment.
24234
24235         (Assign::Emit): Simplify and reuse code. 
24236
24237         * expression.cs (IndexerAccess, PropertyExpr): Implement
24238         IAssignMethod, clean up old code. 
24239
24240 2001-10-22  Ravi Pratap  <ravi@ximian.com>
24241
24242         * typemanager.cs (ImplementsInterface): New method to determine if a type
24243         implements a given interface. Provides a nice cache too.
24244
24245         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
24246         method.
24247
24248         (ConvertReferenceExplicit): Ditto.
24249
24250         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
24251         various methods, with correct names etc.
24252
24253         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
24254         Operator.UnaryNegation.
24255
24256         * cs-parser.jay (operator_declarator): Be a little clever in the case where
24257         we have a unary plus or minus operator.
24258
24259         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
24260         UnaryMinus.
24261
24262         * everywhere : update accordingly.
24263
24264         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
24265         respectively.
24266
24267         * class.cs (Method::Define): For the case where we are implementing a method
24268         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
24269         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
24270
24271 2001-10-21  Ravi Pratap  <ravi@ximian.com>
24272
24273         * interface.cs (FindMembers): Implement to work around S.R.E
24274         lameness.
24275
24276         * typemanager.cs (IsInterfaceType): Implement.
24277
24278         (FindMembers): Update to handle interface types too.
24279
24280         * expression.cs (ImplicitReferenceConversion): Re-write bits which
24281         use IsAssignableFrom as that is not correct - it doesn't work.
24282
24283         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
24284         and accordingly override EmitStatement.
24285
24286         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
24287         using the correct logic :-)
24288
24289 2001-10-19  Ravi Pratap  <ravi@ximian.com>
24290
24291         * ../errors/cs-11.cs : Add to demonstrate error -11 
24292
24293 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
24294
24295         * assign.cs (Assign::Resolve): Resolve right hand side first, and
24296         then pass this as a hint to ResolveLValue.
24297
24298         * expression.cs (FieldExpr): Add Location information
24299
24300         (FieldExpr::LValueResolve): Report assignment to readonly
24301         variable. 
24302
24303         (Expression::ExprClassFromMemberInfo): Pass location information.
24304
24305         (Expression::ResolveLValue): Add new method that resolves an
24306         LValue. 
24307
24308         (Expression::DoResolveLValue): Default invocation calls
24309         DoResolve. 
24310
24311         (Indexers): New class used to keep track of indexers in a given
24312         Type. 
24313
24314         (IStackStore): Renamed from LValue, as it did not really describe
24315         what this did.  Also ResolveLValue is gone from this interface and
24316         now is part of Expression.
24317
24318         (ElementAccess): Depending on the element access type
24319
24320         * typemanager.cs: Add `indexer_name_type' as a Core type
24321         (System.Runtime.CompilerServices.IndexerNameAttribute)
24322
24323         * statement.cs (Goto): Take a location.
24324
24325 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24326
24327         * delegate.cs (Delegate::VerifyDelegate): New method to verify
24328         if two delegates are compatible.
24329
24330         (NewDelegate::DoResolve): Update to take care of the case when
24331         we instantiate a delegate from another delegate.
24332
24333         * typemanager.cs (FindMembers): Don't even try to look up members
24334         of Delegate types for now.
24335
24336 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24337
24338         * delegate.cs (NewDelegate): New class to take care of delegate
24339         instantiation.
24340
24341         * expression.cs (New): Split the delegate related code out into 
24342         the NewDelegate class.
24343
24344         * delegate.cs (DelegateInvocation): New class to handle delegate 
24345         invocation.
24346
24347         * expression.cs (Invocation): Split out delegate related code into
24348         the DelegateInvocation class.
24349
24350 2001-10-17  Ravi Pratap  <ravi@ximian.com>
24351
24352         * expression.cs (New::DoResolve): Implement delegate creation fully
24353         and according to the spec.
24354
24355         (New::DoEmit): Update to handle delegates differently.
24356
24357         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
24358         because of which we were printing out arguments in reverse order !
24359
24360         * delegate.cs (VerifyMethod): Implement to check if the given method
24361         matches the delegate.
24362
24363         (FullDelegateDesc): Implement.
24364
24365         (VerifyApplicability): Implement.
24366
24367         * expression.cs (Invocation::DoResolve): Update to accordingly handle
24368         delegate invocations too.
24369
24370         (Invocation::Emit): Ditto.
24371
24372         * ../errors/cs1593.cs : Added.
24373
24374         * ../errors/cs1594.cs : Added.
24375
24376         * delegate.cs (InstanceExpression, TargetMethod): New properties.
24377
24378 2001-10-16  Ravi Pratap  <ravi@ximian.com>
24379
24380         * typemanager.cs (intptr_type): Core type for System.IntPtr
24381
24382         (InitCoreTypes): Update for the same.
24383
24384         (iasyncresult_type, asynccallback_type): Ditto.
24385
24386         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
24387         correct.
24388
24389         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
24390         too.
24391
24392         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
24393         the builders for the 4 members of a delegate type :-)
24394
24395         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
24396         type.
24397
24398         * expression.cs (New::DoResolve): Implement guts for delegate creation.
24399
24400         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
24401
24402 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
24403
24404         * statement.cs (Break::Emit): Implement.   
24405         (Continue::Emit): Implement.
24406
24407         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24408         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24409         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24410         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
24411         end loop
24412
24413         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
24414         properties that track the label for the current loop (begin of the
24415         loop and end of the loop).
24416
24417 2001-10-15  Ravi Pratap  <ravi@ximian.com>
24418
24419         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
24420         use of emitting anything at all.
24421
24422         * class.cs, rootcontext.cs : Get rid of calls to the same.
24423
24424         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
24425
24426         (Populate): Define the constructor correctly and set the implementation
24427         attributes.
24428
24429         * typemanager.cs (delegate_types): New hashtable to hold delegates that
24430         have been defined.
24431
24432         (AddDelegateType): Implement.
24433
24434         (IsDelegateType): Implement helper method.
24435
24436         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
24437
24438         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
24439         and accordingly handle it.
24440
24441         * delegate.cs (Populate): Take TypeContainer argument.
24442         Implement bits to define the Invoke method. However, I still haven't figured out
24443         how to take care of the native int bit :-(
24444
24445         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
24446         Qualify the name of the delegate, not its return type !
24447
24448         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
24449         conversion.
24450
24451         (StandardConversionExists): Checking for array types turns out to be recursive.
24452
24453         (ConvertReferenceExplicit): Implement array conversion.
24454
24455         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
24456
24457 2001-10-12  Ravi Pratap  <ravi@ximian.com>
24458
24459         * cs-parser.jay (delegate_declaration): Store the fully qualified
24460         name as it is a type declaration.
24461
24462         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24463         readonly.
24464
24465         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24466         as TypeContainer::DefineType.
24467
24468         (Populate): Method in which all the definition of the various methods (Invoke)
24469         etc is done.
24470
24471         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24472         see.
24473
24474         (CloseDelegate): Finally creates the delegate.
24475
24476         * class.cs (TypeContainer::DefineType): Update to define delegates.
24477         (Populate, Emit and CloseType): Do the same thing here too.
24478
24479         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24480         delegates in all these operations.
24481
24482 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24483
24484         * expression.cs: LocalTemporary: a new expression used to
24485         reference a temporary that has been created.
24486
24487         * assign.cs: Handle PropertyAccess back here, so that we can
24488         provide the proper semantic access to properties.
24489
24490         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24491         a few more explicit conversions. 
24492
24493         * modifiers.cs: `NEW' modifier maps to HideBySig.
24494
24495         * expression.cs (PropertyExpr): Make this into an
24496         ExpressionStatement, and support the EmitStatement code path. 
24497
24498         Perform get/set error checking, clean up the interface.
24499
24500         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24501         them into toplevel access objects.
24502
24503 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24504
24505         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24506         SRE.
24507
24508         * typemanager.cs: Keep track here of our PropertyBuilders again to
24509         work around lameness in SRE.
24510
24511 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24512
24513         * expression.cs (LValue::LValueResolve): New method in the
24514         interface, used to perform a second resolution pass for LValues. 
24515
24516         (This::DoResolve): Catch the use of this in static methods.
24517
24518         (This::LValueResolve): Implement.
24519
24520         (This::Store): Remove warning, assigning to `this' in structures
24521         is 
24522
24523         (Invocation::Emit): Deal with invocation of
24524         methods on value types.  We need to pass the address to structure
24525         methods rather than the object itself.  (The equivalent code to
24526         emit "this" for structures leaves the entire structure on the
24527         stack instead of a pointer to it). 
24528
24529         (ParameterReference::DoResolve): Compute the real index for the
24530         argument based on whether the method takes or not a `this' pointer
24531         (ie, the method is static).
24532
24533         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24534         value types returned from functions when we need to invoke a
24535         method on the sturcture.
24536
24537
24538 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24539
24540         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24541         defining the type in the Modulebuilder or Typebuilder. This is to take
24542         care of nested types which need to be defined on the TypeBuilder using
24543         DefineNestedMethod.
24544
24545         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24546         methods in RootContext, only ported to be part of TypeContainer.
24547
24548         (TypeContainer::GetInterfaceOrClass): Ditto.
24549
24550         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24551
24552         * interface.cs (Interface::DefineInterface): New method. Does exactly
24553         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24554         too.
24555
24556         (Interface::GetInterfaces): Move from RootContext here and port.
24557
24558         (Interface::GetInterfaceByName): Same here.
24559
24560         * rootcontext.cs (ResolveTree): Re-write.
24561
24562         (PopulateTypes): Re-write.
24563
24564         * class.cs (TypeContainer::Populate): Populate nested types too.
24565         (TypeContainer::Emit): Emit nested members too.
24566
24567         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24568         instead just use the name argument passed in as it is already fully
24569         qualified.
24570
24571         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24572         to TypeContainer mapping to see if a type is user-defined.
24573
24574         * class.cs (TypeContainer::CloseType): Implement. 
24575
24576         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24577         the default constructor.
24578
24579         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24580         twice.
24581
24582         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24583
24584         * interface.cs (CloseType): Create the type here.
24585
24586         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24587         the hierarchy.
24588
24589         Remove all the methods which are now in TypeContainer.
24590
24591 2001-10-10  Ravi Pratap  <ravi@ximian.com>
24592
24593         * delegate.cs (Define): Re-write bits to define the delegate
24594         correctly.
24595
24596 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
24597
24598         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
24599
24600         * expression.cs (ImplicitReferenceConversion): handle null as well
24601         as a source to convert to any reference type.
24602
24603         * statement.cs (Return): Perform any implicit conversions to
24604         expected return type.  
24605
24606         Validate use of return statement.  
24607
24608         * codegen.cs (EmitContext): Pass the expected return type here.
24609
24610         * class.cs (Method, Constructor, Property): Pass expected return
24611         type to EmitContext.
24612
24613 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
24614
24615         * expression.cs: Make DoResolve take an EmitContext instead of a
24616         TypeContainer.
24617
24618         Replaced `l' and `location' for `loc', for consistency.
24619
24620         (Error, Warning): Remove unneeded Tc argument.
24621
24622         * assign.cs, literal.cs, constant.cs: Update to new calling
24623         convention. 
24624
24625         * codegen.cs: EmitContext now contains a flag indicating whether
24626         code is being generated in a static method or not.
24627
24628         * cs-parser.jay: DecomposeQI, new function that replaces the old
24629         QualifiedIdentifier.  Now we always decompose the assembled
24630         strings from qualified_identifier productions into a group of
24631         memberaccesses.
24632
24633 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
24634
24635         * rootcontext.cs: Deal with field-less struct types correctly now
24636         by passing the size option to Define Type.
24637
24638         * class.cs: Removed hack that created one static field. 
24639
24640 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24641
24642         * statement.cs: Moved most of the code generation here. 
24643
24644 2001-10-09  Ravi Pratap  <ravi@ximian.com>
24645
24646         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
24647         seem very right.
24648
24649         (ElementAccess): Remove useless bits for now - keep checks as the spec
24650         says.
24651
24652 2001-10-08  Ravi Pratap  <ravi@ximian.com>
24653
24654         * expression.cs (ElementAccess::DoResolve): Remove my crap code
24655         and start performing checks according to the spec.
24656
24657 2001-10-07  Ravi Pratap  <ravi@ximian.com>
24658
24659         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
24660         rank_specifiers instead.
24661
24662         (rank_specifiers): Change the order in which the rank specifiers are stored
24663
24664         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
24665
24666         * expression.cs (ElementAccess): Implement the LValue interface too.
24667
24668 2001-10-06  Ravi Pratap  <ravi@ximian.com>
24669
24670         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
24671         except that user defined conversions are not included.
24672
24673         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
24674         perform the conversion of the return type, if necessary.
24675
24676         (New::DoResolve): Check whether we are creating an array or an object
24677         and accordingly do the needful.
24678
24679         (New::Emit): Same here.
24680
24681         (New::DoResolve): Implement guts of array creation.
24682
24683         (New::FormLookupType): Helper function.
24684
24685 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24686
24687         * codegen.cs: Removed most of the code generation here, and move the
24688         corresponding code generation bits to the statement classes. 
24689
24690         Added support for try/catch/finalize and throw.
24691
24692         * cs-parser.jay: Added support for try/catch/finalize.
24693
24694         * class.cs: Catch static methods having the flags override,
24695         virtual or abstract.
24696
24697         * expression.cs (UserCast): This user cast was not really doing
24698         what it was supposed to do.  Which is to be born in fully resolved
24699         state.  Parts of the resolution were being performed at Emit time! 
24700
24701         Fixed this code.
24702
24703 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24704
24705         * expression.cs: Implicity convert the result from UserCast.
24706
24707 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24708
24709         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
24710         prevented it from working correctly. 
24711
24712         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
24713         merely ConvertImplicit.
24714
24715 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24716
24717         * typemanager.cs: Make the LookupTypeContainer function static,
24718         and not per-instance.  
24719
24720         * class.cs: Make static FindMembers (the one that takes a Type
24721         argument). 
24722
24723         * codegen.cs: Add EmitForeach here.
24724
24725         * cs-parser.jay: Make foreach a toplevel object instead of the
24726         inline expansion, as we need to perform semantic analysis on it. 
24727
24728 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24729
24730         * expression.cs (Expression::ImplicitUserConversion): Rename to
24731         UserDefinedConversion.
24732
24733         (Expression::UserDefinedConversion): Take an extra argument specifying 
24734         whether we look for explicit user conversions too.
24735
24736         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
24737
24738         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
24739
24740         (ExplicitUserConversion): Make it a call to UserDefinedConversion
24741         with the appropriate arguments.
24742
24743         * cs-parser.jay (cast_expression): Record location too.
24744
24745         * expression.cs (Cast): Record location info.
24746
24747         (Expression::ConvertExplicit): Take location argument.
24748
24749         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
24750         to determine if we are doing explicit conversions.
24751
24752         (UserCast::Emit): Update accordingly.
24753
24754         (Expression::ConvertExplicit): Report an error if everything fails.
24755
24756         * ../errors/cs0030.cs : Add.
24757
24758 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
24759
24760         * modifiers.cs: If the ABSTRACT keyword is present, also set the
24761         virtual and newslot bits. 
24762
24763         * class.cs (TypeContainer::RegisterRequiredImplementations):
24764         Record methods we need.
24765
24766         (TypeContainer::MakeKey): Helper function to make keys for
24767         MethodBases, since the Methodbase key is useless.
24768
24769         (TypeContainer::Populate): Call RegisterRequiredImplementations
24770         before defining the methods.   
24771
24772         Create a mapping for method_builders_to_methods ahead of time
24773         instead of inside a tight loop.
24774
24775         (::RequireMethods):  Accept an object as the data to set into the
24776         hashtable so we can report interface vs abstract method mismatch.
24777
24778 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24779
24780         * report.cs: Make all of it static.
24781
24782         * rootcontext.cs: Drop object_type and value_type computations, as
24783         we have those in the TypeManager anyways.
24784
24785         Drop report instance variable too, now it is a global.
24786
24787         * driver.cs: Use try/catch on command line handling.
24788
24789         Add --probe option to debug the error reporting system with a test
24790         suite. 
24791
24792         * report.cs: Add support for exiting program when a probe
24793         condition is reached.
24794
24795 2001-10-03  Ravi Pratap  <ravi@ximian.com>
24796
24797         * expression.cs (Binary::DoNumericPromotions): Fix the case when
24798         we do a forcible conversion regardless of type, to check if 
24799         ForceConversion returns a null.
24800
24801         (Binary::error19): Use location to report error.
24802
24803         (Unary::error23): Use location here too.
24804
24805         * ../errors/cs0019.cs : Check in.
24806
24807         * ../errors/cs0023.cs : Check in.
24808
24809         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
24810         case of a non-null MethodInfo object with a length of 0 !
24811
24812         (Binary::ResolveOperator): Flag error if overload resolution fails to find
24813         an applicable member - according to the spec :-)
24814         Also fix logic to find members in base types.
24815
24816         (Unary::ResolveOperator): Same here.
24817
24818         (Unary::report23): Change name to error23 and make first argument a TypeContainer
24819         as I was getting thoroughly confused between this and error19 :-)
24820
24821         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
24822         (::FindMostEncompassedType): Implement.
24823         (::FindMostEncompassingType): Implement.
24824         (::StandardConversionExists): Implement.
24825
24826         (UserImplicitCast): Re-vamp. We now need info about most specific
24827         source and target types so that we can do the necessary conversions.
24828
24829         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
24830         mathematical union with no duplicates.
24831
24832 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24833
24834         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
24835         in order from base classes to child classes, so that we can in
24836         child classes look up in our parent for method names and
24837         attributes (required for handling abstract, virtual, new, override
24838         constructs: we need to instrospect our base class, and if we dont
24839         populate the classes in order, the introspection might be
24840         incorrect.  For example, a method could query its parent before
24841         the parent has any methods and would determine that the parent has
24842         no abstract methods (while it could have had them)).
24843
24844         (RootContext::CreateType): Record the order in which we define the
24845         classes.
24846
24847 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
24848
24849         * class.cs (TypeContainer::Populate): Also method definitions can
24850         fail now, keep track of this.
24851
24852         (TypeContainer::FindMembers): Implement support for
24853         DeclaredOnly/noDeclaredOnly flag.
24854
24855         (Constructor::Emit) Return the ConstructorBuilder.
24856
24857         (Method::Emit) Return the MethodBuilder. 
24858         Check for abstract or virtual methods to be public.
24859
24860         * rootcontext.cs (RootContext::CreateType): Register all the
24861         abstract methods required for the class to be complete and the
24862         interface methods that must be implemented. 
24863
24864         * cs-parser.jay: Report error 501 (method requires body if it is
24865         not marked abstract or extern).
24866
24867         * expression.cs (TypeOf::Emit): Implement.
24868
24869         * typemanager.cs: runtime_handle_type, new global type.
24870
24871         * class.cs (Property::Emit): Generate code for properties.
24872
24873 2001-10-02  Ravi Pratap  <ravi@ximian.com>
24874
24875         * expression.cs (Unary::ResolveOperator): Find operators on base type
24876         too - we now conform exactly to the spec.
24877
24878         (Binary::ResolveOperator): Same here.
24879
24880         * class.cs (Operator::Define): Fix minor quirk in the tests.
24881
24882         * ../errors/cs0215.cs : Added.
24883
24884         * ../errors/cs0556.cs : Added.
24885
24886         * ../errors/cs0555.cs : Added.
24887
24888 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24889
24890         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
24891         single integer which is really efficient
24892
24893 2001-10-01  Ravi Pratap  <ravi@ximian.com>
24894
24895         *  expression.cs (Expression::ImplicitUserConversion): Use location
24896         even in the case when we are examining True operators.
24897  
24898         * class.cs (Operator::Define): Perform extensive checks to conform
24899         with the rules for operator overloading in the spec.
24900
24901         * expression.cs (Expression::ImplicitReferenceConversion): Implement
24902         some of the other conversions mentioned in the spec.
24903
24904         * typemanager.cs (array_type): New static member for the System.Array built-in
24905         type.
24906
24907         (cloneable_interface): For System.ICloneable interface.
24908
24909         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
24910         we start resolving the tree and populating types.
24911
24912         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
24913  
24914 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24915
24916         * expression.cs (Expression::ExprClassFromMemberInfo,
24917         Expression::Literalize): Create literal expressions from
24918         FieldInfos which are literals.
24919
24920         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
24921         type casts, because they were wrong.  The test suite in tests
24922         caught these ones.
24923
24924         (ImplicitNumericConversion): ushort to ulong requires a widening
24925         cast. 
24926
24927         Int32 constant to long requires widening cast as well.
24928
24929         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
24930         for integers because the type on the stack is not i4.
24931
24932 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
24933
24934         * expression.cs (report118): require location argument. 
24935
24936         * parameter.cs: Do not dereference potential null value.
24937
24938         * class.cs: Catch methods that lack the `new' keyword when
24939         overriding a name.  Report warnings when `new' is used without
24940         anything being there to override.
24941
24942         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
24943
24944         * class.cs: Only add constructor to hashtable if it is non-null
24945         (as now constructors can fail on define).
24946
24947         (TypeManager, Class, Struct): Take location arguments.
24948
24949         Catch field instance initialization in structs as errors.
24950
24951         accepting_filter: a new filter for FindMembers that is static so
24952         that we dont create an instance per invocation.
24953
24954         (Constructor::Define): Catch errors where a struct constructor is
24955         parameterless 
24956
24957         * cs-parser.jay: Pass location information for various new
24958         constructs. 
24959
24960         * delegate.cs (Delegate): take a location argument.
24961
24962         * driver.cs: Do not call EmitCode if there were problesm in the
24963         Definition of the types, as many Builders wont be there. 
24964
24965         * decl.cs (Decl::Decl): Require a location argument.
24966
24967         * cs-tokenizer.cs: Handle properly hex constants that can not fit
24968         into integers, and find the most appropiate integer for it.
24969
24970         * literal.cs: Implement ULongLiteral.
24971
24972         * rootcontext.cs: Provide better information about the location of
24973         failure when CreateType fails.
24974
24975 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
24976
24977         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
24978         as well.
24979
24980         * expression.cs (Binary::CheckShiftArguments): Add missing type
24981         computation.
24982         (Binary::ResolveOperator): Add type to the logical and and logical
24983         or, Bitwise And/Or and Exclusive Or code paths, it was missing
24984         before.
24985
24986         (Binary::DoNumericPromotions): In the case where either argument
24987         is ulong (and most signed types combined with ulong cause an
24988         error) perform implicit integer constant conversions as well.
24989
24990 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
24991
24992         * expression.cs (UserImplicitCast): Method should always be
24993         non-null. 
24994         (Invocation::BetterConversion): Simplified test for IntLiteral.
24995
24996         (Expression::ImplicitNumericConversion): Split this routine out.
24997         Put the code that performs implicit constant integer conversions
24998         here. 
24999
25000         (Expression::Resolve): Become a wrapper around DoResolve so we can
25001         check eclass and type being set after resolve.
25002
25003         (Invocation::Badness): Remove this dead function
25004
25005         (Binary::ResolveOperator): Do not compute the expensive argumnets
25006         unless we have a union for it.
25007
25008         (Probe::Emit): Is needs to do an isinst and then
25009         compare against null.
25010
25011         (::CanConvert): Added Location argument.  If the Location argument
25012         is null (Location.Null), then we do not report errors.  This is
25013         used by the `probe' mechanism of the Explicit conversion.  We do
25014         not want to generate an error for something that the user
25015         explicitly requested to be casted.  But the pipeline for an
25016         explicit cast first tests for potential implicit casts.
25017
25018         So for now, if the Location is null, it means `Probe only' to
25019         avoid adding another argument.   Might have to revise this
25020         strategy later.
25021
25022         (ClassCast): New class used to type cast objects into arbitrary
25023         classes (used in Explicit Reference Conversions).
25024
25025         Implement `as' as well.
25026
25027         Reverted all the patches from Ravi below: they were broken:
25028
25029                 * The use of `level' as a mechanism to stop recursive
25030                   invocations is wrong.  That was there just to catch the
25031                   bug with a strack trace but not as a way of addressing
25032                   the problem.
25033
25034                   To fix the problem we have to *understand* what is going
25035                   on and the interactions and come up with a plan, not
25036                   just get things going.
25037
25038                 * The use of the type conversion cache that I proposed
25039                   last night had an open topic: How does this work across
25040                   protection domains.  A user defined conversion might not
25041                   be public in the location where we are applying the
25042                   conversion, a different conversion might be selected
25043                   (ie, private A->B (better) but public B->A (worse),
25044                   inside A, A->B applies, but outside it, B->A will
25045                   apply).
25046
25047                 * On top of that (ie, even if the above is solved),
25048                   conversions in a cache need to be abstract.  Ie, `To
25049                   convert from an Int to a Short use an OpcodeCast', not
25050                   `To convert from an Int to a Short use the OpcodeCast on
25051                   the variable 5' (which is what this patch was doing).
25052
25053 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25054
25055         * expression.cs (Invocation::ConversionExists): Re-write to use
25056         the conversion cache
25057
25058         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
25059         cache all conversions done, not just user-defined ones.
25060
25061         (Invocation::BetterConversion): The real culprit. Use ConversionExists
25062         to determine if a conversion exists instead of acutually trying to 
25063         perform the conversion. It's faster too.
25064
25065         (Expression::ConvertExplicit): Modify to use ConversionExists to check
25066         and only then attempt the implicit conversion.
25067
25068 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25069
25070         * expression.cs (ConvertImplicit): Use a cache for conversions
25071         already found. Check level of recursion and bail out if necessary.
25072
25073 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25074
25075         * typemanager.cs (string_concat_string_string, string_concat_object_object):
25076         Export standard methods that we expect for string operations.
25077
25078         * statement.cs (Block::UsageWarning): Track usage of variables and
25079         report the errors for not used variables.
25080
25081         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
25082         operator. 
25083
25084 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25085
25086         * codegen.cs: remove unnneded code 
25087
25088         * expression.cs: Removed BuiltinTypeAccess class
25089
25090         Fix the order in which implicit conversions are
25091         done.  
25092
25093         The previous fixed dropped support for boxed conversions (adding a
25094         test to the test suite now)
25095
25096         (UserImplicitCast::CanConvert): Remove test for source being null,
25097         that code is broken.  We should not feed a null to begin with, if
25098         we do, then we should track the bug where the problem originates
25099         and not try to cover it up here.
25100
25101         Return a resolved expression of type UserImplicitCast on success
25102         rather than true/false.  Ravi: this is what I was talking about,
25103         the pattern is to use a static method as a "constructor" for
25104         objects. 
25105
25106         Also, do not create arguments until the very last minute,
25107         otherwise we always create the arguments even for lookups that
25108         will never be performed. 
25109
25110         (UserImplicitCast::Resolve): Eliminate, objects of type
25111         UserImplicitCast are born in a fully resolved state. 
25112
25113         * typemanager.cs (InitCoreTypes): Init also value_type
25114         (System.ValueType). 
25115
25116         * expression.cs (Cast::Resolve): First resolve the child expression.
25117
25118         (LValue): Add new method AddressOf to be used by
25119         the `&' operator.  
25120
25121         Change the argument of Store to take an EmitContext instead of an
25122         ILGenerator, because things like FieldExpr need to be able to call
25123         their children expression to generate the instance code. 
25124
25125         (Expression::Error, Expression::Warning): Sugar functions for
25126         reporting errors.
25127
25128         (Expression::MemberLookup): Accept a TypeContainer instead of a
25129         Report as the first argument.
25130
25131         (Expression::ResolvePrimary): Killed.  I still want to improve
25132         this as currently the code is just not right.
25133
25134         (Expression::ResolveMemberAccess): Simplify, but it is still
25135         wrong. 
25136
25137         (Unary::Resolve): Catch errors in AddressOf operators.
25138
25139         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
25140         index to a byte for the short-version, or the compiler will choose
25141         the wrong Emit call, which generates the wrong data.
25142
25143         (ParameterReference::Emit, ::Store): same.
25144
25145         (FieldExpr::AddressOf): Implement.
25146
25147         * typemanager.cs: TypeManager: made public variable instead of
25148         property.
25149
25150         * driver.cs: document --fatal.
25151
25152         * report.cs (ErrorMessage, WarningMessage): new names for the old
25153         Error and Warning classes.
25154
25155         * cs-parser.jay (member_access): Turn built-in access to types
25156         into a normal simplename
25157
25158 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25159
25160         * expression.cs (Invocation::BetterConversion): Fix to cope
25161         with q being null, since this was introducing a bug.
25162
25163         * expression.cs (ConvertImplicit): Do built-in conversions first.
25164
25165 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25166
25167         * expression.cs (UserImplicitCast::Resolve): Fix bug.
25168
25169 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25170
25171         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
25172         I had introduced long ago (what's new ?).
25173
25174         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
25175         the work of all the checking. 
25176         (ConvertImplicit): Call CanConvert and only then create object if necessary.
25177         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
25178
25179         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
25180         that is the right way. 
25181
25182         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
25183         overloading resolution. Use everywhere instead of cutting and pasting code.
25184
25185         (Binary::ResolveOperator): Use MakeUnionSet.
25186
25187         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
25188         we have to convert to bool types. Not complete yet.
25189
25190 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25191
25192         * typemanager.cs (TypeManager::CSharpName): support ushort.
25193
25194         * expression.cs (Expression::TryImplicitIntConversion): Attempts
25195         to provide an expression that performsn an implicit constant int
25196         conversion (section 6.1.6).
25197         (Expression::ConvertImplicitRequired): Reworked to include
25198         implicit constant expression conversions.
25199
25200         (Expression::ConvertNumericExplicit): Finished.
25201
25202         (Invocation::Emit): If InstanceExpression is null, then it means
25203         that we perform a call on this.
25204
25205 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25206
25207         * expression.cs (Unary::Emit): Remove some dead code.
25208         (Probe): Implement Resolve and Emit for `is'.
25209         (Expression::ConvertImplicitRequired): Attempt to do constant
25210         expression conversions here.  Maybe should be moved to
25211         ConvertImplicit, but I am not sure.
25212         (Expression::ImplicitLongConstantConversionPossible,
25213         Expression::ImplicitIntConstantConversionPossible): New functions
25214         that tell whether is it possible to apply an implicit constant
25215         expression conversion.
25216
25217         (ConvertNumericExplicit): Started work on explicit numeric
25218         conversions.
25219
25220         * cs-parser.jay: Update operator constants.
25221
25222         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
25223         (Parameters::GetSignature): Hook up VerifyArgs here.
25224         (Parameters::VerifyArgs): Verifies that no two arguments have the
25225         same name. 
25226
25227         * class.cs (Operator): Update the operator names to reflect the
25228         ones that the spec expects (as we are just stringizing the
25229         operator names).
25230
25231         * expression.cs (Unary::ResolveOperator): Fix bug: Use
25232         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
25233         previous usage did only work for our methods.
25234         (Expression::ConvertImplicit): Handle decimal implicit numeric
25235         conversions as well.
25236         (Expression::InternalTypeConstructor): Used to invoke constructors
25237         on internal types for default promotions.
25238
25239         (Unary::Emit): Implement special handling for the pre/post
25240         increment/decrement for overloaded operators, as they need to have
25241         the same semantics as the other operators.
25242
25243         (Binary::ResolveOperator): ditto.
25244         (Invocation::ConversionExists): ditto.
25245         (UserImplicitCast::Resolve): ditto.
25246
25247 2001-09-26  Ravi Pratap  <ravi@ximian.com>
25248
25249         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
25250         operator, return after emitting body. Regression tests pass again !
25251
25252         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
25253         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
25254         (Invocation::OverloadResolve): Ditto.
25255         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
25256
25257         * everywhere : update calls to the above methods accordingly.
25258
25259 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25260
25261         * assign.cs (Assign): Make it inherit from ExpressionStatement.
25262
25263         * expression.cs (ExpressionStatement): New base class used for
25264         expressions that can appear in statements, so that we can provide
25265         an alternate path to generate expression that do not leave a value
25266         on the stack.
25267
25268         (Expression::Emit, and all the derivatives): We no longer return
25269         whether a value is left on the stack or not.  Every expression
25270         after being emitted leaves a single value on the stack.
25271
25272         * codegen.cs (EmitContext::EmitStatementExpression): Use the
25273         facilties of ExpressionStatement if possible.
25274
25275         * cs-parser.jay: Update statement_expression.
25276
25277 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
25278
25279         * driver.cs: Change the wording of message
25280
25281 2001-09-25  Ravi Pratap  <ravi@ximian.com>
25282
25283         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
25284         the type of the expression to the return type of the method if
25285         we have an overloaded operator match ! The regression tests pass again !
25286         (Unary::ResolveOperator): Ditto.
25287
25288         * expression.cs (Invocation::ConversionExists): Correct the member lookup
25289         to find "op_Implicit", not "implicit" ;-)
25290         (UserImplicitCast): New class to take care of user-defined implicit conversions.
25291         (ConvertImplicit, ForceConversion): Take TypeContainer argument
25292
25293         * everywhere : Correct calls to the above accordingly.
25294
25295         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
25296         (ConvertImplicit): Do user-defined conversion if it exists.
25297
25298 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
25299
25300         * assign.cs: track location.
25301         (Resolve): Use implicit conversions on assignment.
25302
25303         * literal.cs: Oops.  Not good, Emit of short access values should
25304         pass (Bytes) or the wrong argument will be selected.
25305
25306         * expression.cs (Unary::Emit): Emit code for -expr.
25307
25308         (Unary::ResolveOperator): Handle `Substract' for non-constants
25309         (substract from zero from the non-constants).
25310         Deal with Doubles as well. 
25311
25312         (Expression::ConvertImplicitRequired): New routine that reports an
25313         error if no implicit conversion exists. 
25314
25315         (Invocation::OverloadResolve): Store the converted implicit
25316         expressions if we make them
25317
25318 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25319
25320         * class.cs (ConstructorInitializer): Take a Location argument.
25321         (ConstructorBaseInitializer): Same here.
25322         (ConstructorThisInitializer): Same here.
25323
25324         * cs-parser.jay : Update all calls accordingly.
25325
25326         * expression.cs (Unary, Binary, New): Take location argument.
25327         Update accordingly everywhere.
25328
25329         * cs-parser.jay : Update all calls to the above to take a location
25330         argument.
25331
25332         * class.cs : Ditto.
25333
25334 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25335
25336         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
25337         (Invocation::BetterConversion): Same here
25338         (Invocation::ConversionExists): Ditto.
25339
25340         (Invocation::ConversionExists): Implement.
25341
25342 2001-09-22  Ravi Pratap  <ravi@ximian.com>
25343
25344         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
25345         Also take an additional TypeContainer argument.
25346
25347         * All over : Pass in TypeContainer as argument to OverloadResolve.
25348
25349         * typemanager.cs (CSharpName): Update to check for the string type and return
25350         that too.
25351
25352         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
25353         a given method.
25354
25355 2001-09-21  Ravi Pratap  <ravi@ximian.com>
25356
25357         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
25358         (Invocation::BetterFunction): Implement.
25359         (Invocation::BetterConversion): Implement.
25360         (Invocation::ConversionExists): Skeleton, no implementation yet.
25361
25362         Okay, things work fine !
25363
25364 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
25365
25366         * typemanager.cs: declare and load enum_type, delegate_type and
25367         void_type. 
25368
25369         * expression.cs (Expression::Emit): Now emit returns a value that
25370         tells whether a value is left on the stack or not.  This strategy
25371         might be reveted tomorrow with a mechanism that would address
25372         multiple assignments.
25373         (Expression::report118): Utility routine to report mismatches on
25374         the ExprClass.
25375
25376         (Unary::Report23): Report impossible type/operator combination
25377         utility function.
25378
25379         (Unary::IsIncrementableNumber): Whether the type can be
25380         incremented or decremented with add.
25381         (Unary::ResolveOperator): Also allow enumerations to be bitwise
25382         complemented. 
25383         (Unary::ResolveOperator): Implement ++, !, ~,
25384
25385         (Invocation::Emit): Deal with new Emit convetion.
25386
25387         * All Expression derivatives: Updated their Emit method to return
25388         whether they leave values on the stack or not.
25389
25390         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
25391         stack for expressions that are statements. 
25392
25393 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25394
25395         * expression.cs (LValue): New interface.  Must be implemented by
25396         LValue objects.
25397         (LocalVariableReference, ParameterReference, FieldExpr): Implement
25398         LValue interface.
25399
25400         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
25401         interface for generating code, simplifies the code.
25402
25403 2001-09-20  Ravi Pratap  <ravi@ximian.com>
25404
25405         * expression.cs (everywhere): Comment out return statements in ::Resolve
25406         methods to avoid the warnings.
25407
25408 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25409
25410         * driver.cs (parse): Report error 2001 if we can not open the
25411         source file.
25412
25413         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
25414         not resolve it.
25415
25416         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
25417         object. 
25418
25419         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
25420         otherwise nested blocks end up with the same index.
25421
25422         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
25423
25424         * expression.cs:  Instead of having FIXMEs in the Resolve
25425         functions, throw exceptions so it is obvious that we are facing a
25426         bug. 
25427
25428         * cs-parser.jay (invocation_expression): Pass Location information.
25429
25430         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
25431         Use a basename for those routines because .NET does not like paths
25432         on them. 
25433
25434         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
25435         already defined.
25436
25437 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
25438
25439         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
25440         are loading the correct data types (throws an exception if not).
25441         (TypeManager::InitCoreTypes): Use CoreLookupType
25442
25443         * expression.cs (Unary::ResolveOperator): return the child
25444         expression for expressions which are just +expr.
25445         (Unary::ResolveOperator): Return negative literals for -LITERAL
25446         expressions (otherwise they are Unary {Literal}).
25447         (Invocation::Badness): Take into account `Implicit constant
25448         expression conversions'.
25449
25450         * literal.cs (LongLiteral): Implement long literal class.
25451         (IntLiteral): export the `Value' of the intliteral. 
25452
25453 2001-09-19  Ravi Pratap  <ravi@ximian.com>
25454
25455         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
25456
25457         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
25458         instead of 'Operator'
25459
25460         * expression.cs (Binary::ResolveOperator): Update accordingly.
25461         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
25462         and 'Minus'
25463
25464         * cs-parser.jay (unary_expression): Update to use the new names.
25465
25466         * gen-treedump.cs (GetUnary): Same here.
25467
25468         * expression.cs (Unary::Resolve): Implement.
25469         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25470         operators are found instead of making noise ;-)
25471         (Unary::ResolveOperator): New method to do precisely the same thing which
25472         Binary::ResolveOperator does for Binary expressions.
25473         (Unary.method, .Arguments): Add.
25474         (Unary::OperName): Implement.   
25475         (Unary::ForceConversion): Copy and Paste !
25476
25477         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25478         a unary operator.
25479
25480         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25481         for the inbuilt operators. Only overloading works for now ;-)
25482
25483 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25484
25485         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25486         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25487
25488         * expression.cs (This::Emit): Implement. 
25489         (This::Resolve): Implement.
25490         (TypeOf:Resolve): Implement.
25491         (Expression::ResolveSimpleName): Add an implicit this to instance
25492         field references. 
25493         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25494         Bind instance variable to Field expressions.
25495         (FieldExpr::Instance): New field used to track the expression that
25496         represents the object instance.
25497         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25498         binding 
25499         (FieldExpr::Emit): Implement.
25500
25501         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25502         the last instruction contains a return opcode to avoid generating
25503         the last `ret' instruction (this generates correct code, and it is
25504         nice to pass the peverify output).
25505
25506         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25507         initializer for static and instance variables.
25508         (Constructor::Emit): Allow initializer to be null in the case of
25509         static constructors.  Only emit initializer for instance
25510         constructors. 
25511
25512         (TypeContainer::FindMembers): Return a null array if there are no
25513         matches.
25514
25515         Also fix the code for the MemberTypes.Method branch, as it was not
25516         scanning that for operators (or tried to access null variables before).
25517
25518         * assign.cs (Assign::Emit): Handle instance and static fields. 
25519
25520         * TODO: Updated.
25521
25522         * driver.cs: Stop compilation if there are parse errors.
25523
25524         * cs-parser.jay (constructor_declaration): Provide default base
25525         initializer for non-static constructors.
25526         (constructor_declarator): Do not provide a default base
25527         initializers if none was specified.
25528         Catch the fact that constructors should not have parameters.
25529
25530         * class.cs: Do not emit parent class initializers for static
25531         constructors, that should be flagged as an error.
25532
25533 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25534
25535         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25536         Move back code into TypeContainer::Populate.
25537
25538 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25539
25540         * class.cs (TypeContainer::AddConstructor): Fix the check to
25541         compare against Name, not Basename. 
25542         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25543
25544         * cs-parser.jay : Update accordingly.
25545
25546         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25547         for methods, don't forget to look into the operators too.
25548         (RegisterMethodBuilder): Helper method to take care of this for
25549         methods, constructors and operators.
25550         (Operator::Define): Completely revamp.
25551         (Operator.OperatorMethod, MethodName): New fields.
25552         (TypeContainer::Populate): Move the registering of builders into
25553         RegisterMethodBuilder.
25554         (Operator::Emit): Re-write.
25555
25556         * expression.cs (Binary::Emit): Comment out code path to emit method
25557         invocation stuff for the case when we have a user defined operator. I am
25558         just not able to get it right !
25559
25560 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25561
25562         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25563         argument. 
25564
25565         (Expression::MemberLookup): Provide a version that allows to
25566         specify the MemberTypes and BindingFlags. 
25567
25568         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25569         so it was not fetching variable information from outer blocks.
25570
25571         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25572         Beforefieldinit as it was buggy.
25573
25574         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25575         that Ravi put here.  
25576
25577         * class.cs (Constructor::Emit): Only emit if block is not null.
25578         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25579         deal with this by semantically definining it as if the user had
25580         done it.
25581
25582         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25583         constructors as we now "emit" them at a higher level.
25584
25585         (TypeContainer::DefineDefaultConstructor): Used to define the
25586         default constructors if none was provided.
25587
25588         (ConstructorInitializer): Add methods Resolve and Emit. 
25589
25590         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25591
25592 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25593
25594         * class.cs (TypeContainer::EmitDefaultConstructor): Register
25595         the default constructor builder with our hashtable for methodbuilders
25596         to methodcores.
25597
25598         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
25599         and argument_count is 0 in which case we have a match.
25600         (Binary::ResolveOperator): More null checking and miscellaneous coding
25601         style cleanup.
25602
25603 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25604
25605         * rootcontext.cs (IsNameSpace): Compare against null.
25606
25607         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
25608
25609         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
25610         and Unary::Operator.
25611
25612         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
25613         accordingly.
25614
25615         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
25616         we have overloaded operators.
25617         (Binary::ResolveOperator): Implement the part which does the operator overload
25618         resolution.
25619
25620         * class.cs (Operator::Emit): Implement.
25621         (TypeContainer::Emit): Emit the operators we have too.
25622
25623         * expression.cs (Binary::Emit): Update to emit the appropriate code for
25624         the case when we have a user-defined operator.
25625
25626 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25627
25628         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
25629
25630 2001-09-16  Ravi Pratap  <ravi@ximian.com>
25631
25632         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
25633         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
25634         (Constructor::Emit): Implement.
25635         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
25636         if we have no work to do. 
25637         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
25638         Emit method.
25639
25640         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
25641         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
25642
25643         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
25644         of parent.parent.
25645
25646 2001-09-15  Ravi Pratap  <ravi@ximian.com>
25647
25648         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
25649         in the source.
25650         (Tree::RecordNamespace): Method to do what the name says ;-)
25651         (Tree::Namespaces): Property to get at the namespaces hashtable.
25652
25653         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
25654         keep track.
25655
25656         * rootcontext.cs (IsNamespace): Fixed it :-)
25657
25658 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25659
25660         * class.cs (TypeContainer::FindMembers): Add support for
25661         constructors. 
25662         (MethodCore): New class that encapsulates both the shared aspects
25663         of a Constructor and a Method.  
25664         (Method, Constructor): Factored pieces into MethodCore.
25665
25666         * driver.cs: Added --fatal which makes errors throw exceptions.
25667         Load System assembly as well as part of the standard library.
25668
25669         * report.cs: Allow throwing exceptions on errors for debugging.
25670
25671         * modifiers.cs: Do not use `parent', instead use the real type
25672         container to evaluate permission settings.
25673
25674         * class.cs: Put Ravi's patch back in.  He is right, and we will
25675         have to cope with the
25676
25677 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25678
25679         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
25680         FamORAssem, not FamANDAssem.
25681
25682 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25683
25684         * driver.cs: Added --parse option that only parses its input files
25685         and terminates.
25686
25687         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
25688         incorrect.  IsTopLevel is not used to tell whether an object is
25689         root_types or not (that can be achieved by testing this ==
25690         root_types).  But to see if this is a top-level *class* (not
25691         necessarly our "toplevel" container). 
25692
25693 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25694
25695         * enum.cs (Enum::Define): Modify to call the Lookup method on the
25696         parent instead of a direct call to GetType.
25697
25698 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25699
25700         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
25701         Modifiers.TypeAttr. This should just be a call to that method.
25702
25703         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
25704         object so that we can determine if we are top-level or not.
25705
25706         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
25707         TypeContainer too.
25708
25709         * enum.cs (Enum::Define): Ditto.
25710
25711         * modifiers.cs (FieldAttr): Re-write.
25712
25713         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
25714         (TypeContainer::HaveStaticConstructor): New property to provide access
25715         to precisely that info.
25716
25717         * modifiers.cs (MethodAttr): Re-write.
25718         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
25719
25720         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
25721         of top-level types as claimed.
25722
25723 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25724
25725         * expression.cs (MemberLookup): Fruitless attempt to lookup
25726         constructors.  Maybe I need to emit default constructors?  That
25727         might be it (currently .NET emits this for me automatically).
25728         (Invocation::OverloadResolve): Cope with Arguments == null.
25729         (Invocation::EmitArguments): new function, shared by the new
25730         constructor and us.
25731         (Invocation::Emit): Handle static and instance methods.  Emit
25732         proper call instruction for virtual or non-virtual invocations.
25733         (New::Emit): Implement.
25734         (New::Resolve): Implement.
25735         (MemberAccess:Resolve): Implement.
25736         (MethodGroupExpr::InstanceExpression): used conforming to the spec
25737         to track instances.
25738         (FieldExpr::Resolve): Set type.
25739
25740         * support.cs: Handle empty arguments.
25741                 
25742         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
25743         SimpleLookup): Auxiliary routines to help parse a qualifier
25744         identifier.  
25745
25746         Update qualifier_identifier rule.
25747
25748         * codegen.cs: Removed debugging messages.
25749
25750         * class.cs: Make this a global thing, this acts just as a "key" to
25751         objects that we might have around.
25752
25753         (Populate): Only initialize method_builders_to_methods once.
25754
25755         * expression.cs (PropertyExpr): Initialize type from the
25756         PropertyType. 
25757
25758         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
25759         Resolve pattern.  Attempt to implicitly convert value to boolean.
25760         Emit code.
25761
25762         * expression.cs: Set the type for the int32/int32 argument case.
25763         (Binary::ResolveOperator): Set the return type to boolean for
25764         comparission operators
25765
25766         * typemanager.cs: Remove debugging print code.
25767
25768         (Invocation::Resolve): resolve type.
25769
25770         * class.cs: Allocate a MemberInfo of the correct size, as the code
25771         elsewhere depends on the test to reflect the correct contents.
25772
25773         (Method::) Keep track of parameters, due to System.Reflection holes
25774
25775         (TypeContainer::Populate): Keep track of MethodBuilders to Method
25776         mapping here.
25777
25778         (TypeContainer::FindMembers): Use ArrayList and then copy an array
25779         of the exact size and return that.
25780
25781         (Class::LookupMethodByBuilder): New function that maps
25782         MethodBuilders to its methods.  Required to locate the information
25783         on methods because System.Reflection bit us again.
25784
25785         * support.cs: New file, contains an interface ParameterData and
25786         two implementations: ReflectionParameters and InternalParameters
25787         used to access Parameter information.  We will need to grow this
25788         as required.
25789
25790         * expression.cs (Invocation::GetParameterData): implement a cache
25791         and a wrapper around the ParameterData creation for methods. 
25792         (Invocation::OverloadResolve): Use new code.
25793
25794 2001-09-13  Ravi Pratap  <ravi@ximian.com>
25795
25796         * class.cs (TypeContainer::EmitField): Remove and move into 
25797         (Field::Define): here and modify accordingly.
25798         (Field.FieldBuilder): New member.
25799         (TypeContainer::Populate): Update accordingly.
25800         (TypeContainer::FindMembers): Implement.
25801
25802 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25803
25804         * statement.cs: (VariableInfo::VariableType): New field to be
25805         initialized with the full type once it is resolved. 
25806
25807 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
25808
25809         * parameter.cs (GetParameterInfo): Use a type cache to compute
25810         things only once, and to reuse this information
25811
25812         * expression.cs (LocalVariableReference::Emit): Implement.
25813         (OpcodeCast::Emit): fix.
25814
25815         (ParameterReference::Resolve): Implement.
25816         (ParameterReference::Emit): Implement.
25817
25818         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
25819         that are expressions need to stay as Expressions.
25820
25821         * typemanager.cs (CSharpName): Returns the C# name of a type if
25822         possible. 
25823
25824         * expression.cs (Expression::ConvertImplicit): New function that
25825         implements implicit type conversions.
25826
25827         (Expression::ImplicitReferenceConversion): Implements implicit
25828         reference conversions.
25829
25830         (EmptyCast): New type for transparent casts.
25831
25832         (OpcodeCast): New type for casts of types that are performed with
25833         a sequence of bytecodes.
25834
25835         (BoxedCast): New type used for casting value types into reference
25836         types.  Emits a box opcode.
25837
25838         (Binary::DoNumericPromotions): Implements numeric promotions of
25839         and computation of the Binary::Type.
25840
25841         (Binary::EmitBranchable): Optimization.
25842
25843         (Binary::Emit): Implement code emission for expressions.
25844
25845         * typemanager.cs (TypeManager): Added two new core types: sbyte
25846         and byte.
25847
25848 2001-09-12  Ravi Pratap  <ravi@ximian.com>
25849
25850         * class.cs (TypeContainer::FindMembers): Method which does exactly
25851         what Type.FindMembers does, only we don't have to use reflection. No
25852         implementation yet.
25853
25854         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
25855         typecontainer objects as we need to get at them.
25856         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
25857
25858         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
25859         typecontainer object.
25860
25861         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
25862         of just a Report object.
25863
25864 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25865
25866         * class.cs (Event::Define): Go back to using the prefixes "add_" and
25867         "remove_"
25868         (TypeContainer::Populate): Now define the delegates of the type too.
25869         (TypeContainer.Delegates): Property to access the list of delegates defined
25870         in the type.
25871
25872         * delegates.cs (Delegate::Define): Implement partially.
25873
25874         * modifiers.cs (TypeAttr): Handle more flags.
25875
25876 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25877
25878         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
25879         and not <=
25880         (Operator::Define): Re-write logic to get types by using the LookupType method
25881         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
25882         (Indexer::Define): Ditto.
25883         (Event::Define): Ditto.
25884         (Property::Define): Ditto.
25885
25886 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25887
25888         * class.cs (TypeContainer::Populate): Now define operators too. 
25889         (TypeContainer.Operators): New property to access the list of operators
25890         in a type.
25891         (Operator.OperatorMethodBuilder): New member to hold the method builder
25892         for the operator we are defining.
25893         (Operator::Define): Implement.
25894
25895 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25896
25897         * class.cs (Event::Define): Make the prefixes of the accessor methods
25898         addOn_ and removeOn_ 
25899
25900         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
25901         of the location being passed in too. Ideally, this should go later since all
25902         error reporting should be done through the Report object.
25903
25904         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
25905         (Populate): Iterate thru the indexers we have and define them too.
25906         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
25907         for the get and set accessors.
25908         (Indexer::Define): Implement.
25909
25910 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
25911
25912         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
25913         my previous implementation, did not work.
25914
25915         * typemanager.cs: Add a couple of missing types (the longs).
25916
25917         * literal.cs: Use TypeManager.bool_type instead of getting it.
25918
25919         * expression.cs (EventExpr): New kind of expressions.
25920         (Expressio::ExprClassFromMemberInfo): finish
25921
25922 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
25923
25924         * assign.cs: Emit stores to static fields differently.
25925
25926 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25927
25928         * Merge in changes and adjust code to tackle conflicts. Backed out my
25929         code in Assign::Resolve ;-) 
25930
25931 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25932
25933         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
25934         instead Report.Error and also pass in the location.
25935         (CSharpParser::Lexer): New readonly property to return the reference
25936         to the Tokenizer object.
25937         (declare_local_variables): Use Report.Error with location instead of plain 
25938         old error.
25939         (CheckDef): Ditto.
25940
25941         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
25942         (Operator.CheckBinaryOperator): Ditto.
25943
25944         * cs-parser.jay (operator_declarator): Update accordingly.
25945
25946         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
25947         (CheckBinaryOperator): Same here.
25948
25949         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
25950         on the name without any prefixes of namespace names etc. This is because we
25951         already might have something already fully qualified like 
25952         'System.Console.WriteLine'
25953
25954         * assign.cs (Resolve): Begin implementation. Stuck ;-)
25955
25956 2001-09-07  Ravi Pratap  <ravi@ximian.com>
25957
25958         * cs-tokenizer.cs (location): Return a string which also contains
25959         the file name.
25960
25961         * expression.cs (ElementAccess): New class for expressions of the
25962         type 'element access.'
25963         (BaseAccess): New class for expressions of the type 'base access.'
25964         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
25965         respectively.
25966
25967         * cs-parser.jay (element_access): Implement action.
25968         (base_access): Implement actions.
25969         (checked_expression, unchecked_expression): Implement.
25970
25971         * cs-parser.jay (local_variable_type): Correct and implement.
25972         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
25973
25974         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
25975
25976         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
25977         name and the specifiers.
25978
25979         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
25980
25981         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
25982         making them all public ;-)
25983
25984         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
25985         class anyways.
25986
25987 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
25988
25989         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
25990         PropertyExprs.
25991         (FieldExpr, PropertyExprs): New resolved expressions.
25992         (SimpleName::MemberStaticCheck): Perform static checks for access
25993         to non-static fields on static methods. Maybe this should be
25994         generalized for MemberAccesses. 
25995         (SimpleName::ResolveSimpleName): More work on simple name
25996         resolution. 
25997
25998         * cs-parser.jay (primary_expression/qualified_identifier): track
25999         the parameter index.
26000
26001         * codegen.cs (CodeGen::Save): Catch save exception, report error.
26002         (EmitContext::EmitBoolExpression): Chain to expression generation
26003         instead of temporary hack.
26004         (::EmitStatementExpression): Put generic expression code generation.
26005
26006         * assign.cs (Assign::Emit): Implement variable assignments to
26007         local variables, parameters and fields.
26008
26009 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
26010
26011         * statement.cs (Block::GetVariableInfo): New method, returns the
26012         VariableInfo for a variable name in a block.
26013         (Block::GetVariableType): Implement in terms of GetVariableInfo
26014
26015         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
26016         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
26017
26018 2001-09-06  Ravi Pratap  <ravi@ximian.com>
26019
26020         * cs-parser.jay (operator_declaration): Continue on my quest : update
26021         to take attributes argument.
26022         (event_declaration): Ditto.
26023         (enum_declaration): Ditto.
26024         (indexer_declaration): Ditto.
26025
26026         * class.cs (Operator::Operator): Update constructor accordingly.
26027         (Event::Event): Ditto.
26028
26029         * delegate.cs (Delegate::Delegate): Same here.
26030
26031         * enum.cs (Enum::Enum): Same here.
26032
26033 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26034
26035         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
26036
26037         * ../tests/cs0658.cs : New file to demonstrate error 0658.
26038
26039         * attribute.cs (Attributes): New class to encapsulate all attributes which were
26040         being passed around as an arraylist.
26041         (Attributes::AddAttribute): Method to add attribute sections.
26042
26043         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
26044         (struct_declaration): Update accordingly.
26045         (constant_declaration): Update.
26046         (field_declaration): Update.
26047         (method_header): Update.
26048         (fixed_parameter): Update.
26049         (parameter_array): Ditto.
26050         (property_declaration): Ditto.
26051         (destructor_declaration): Ditto.
26052
26053         * class.cs (Struct::Struct): Update constructors accordingly.
26054         (Class::Class): Ditto.
26055         (Field::Field): Ditto.
26056         (Method::Method): Ditto.
26057         (Property::Property): Ditto.
26058         (TypeContainer::OptAttribute): update property's return type.
26059
26060         * interface.cs (Interface.opt_attributes): New member.
26061         (Interface::Interface): Update to take the extra Attributes argument.
26062
26063         * parameter.cs (Parameter::Parameter): Ditto.
26064
26065         * constant.cs (Constant::Constant): Ditto.
26066
26067         * interface.cs (InterfaceMemberBase): New OptAttributes field.
26068         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
26069         the attributes as a parameter.
26070         (InterfaceProperty): Update constructor call.
26071         (InterfaceEvent): Ditto.
26072         (InterfaceMethod): Ditto.
26073         (InterfaceIndexer): Ditto.
26074
26075         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
26076         pass the attributes too.
26077         (interface_event_declaration): Ditto.
26078         (interface_property_declaration): Ditto.
26079         (interface_method_declaration): Ditto.
26080         (interface_declaration): Ditto.
26081
26082 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
26083
26084         * class.cs (Method::Define): Track the "static Main" definition to
26085         create an entry point. 
26086
26087         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
26088         EntryPoint if we find it. 
26089
26090         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
26091         (EmitContext::ig): Make this variable public.
26092
26093         * driver.cs: Make the default output file be the first file name
26094         with the .exe extension.  
26095
26096         Detect empty compilations
26097
26098         Handle various kinds of output targets.  Handle --target and
26099         rename -t to --dumper.
26100
26101         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
26102         methods inherited from Expression return now an Expression.  This
26103         will is used during the tree rewriting as we resolve them during
26104         semantic analysis.
26105
26106         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
26107         the spec.  Missing entirely is the information about
26108         accessability of elements of it.
26109
26110         (Expression::ExprClassFromMemberInfo): New constructor for
26111         Expressions that creates a fully initialized Expression based on
26112         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
26113         a Type.
26114
26115         (Invocation::Resolve): Begin implementing resolution of invocations.
26116
26117         * literal.cs (StringLiteral):  Implement Emit.
26118
26119 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26120
26121         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
26122         member.
26123
26124 2001-09-04  Ravi Pratap  <ravi@ximian.com>
26125
26126         * cs-parser.jay (attribute_arguments): Implement actions.
26127         (attribute): Fix bug in production. Implement action.
26128         (attribute_list): Implement.
26129         (attribute_target): Implement.
26130         (attribute_target_specifier, opt_target_specifier): Implement
26131         (CheckAttributeTarget): New method to check if the attribute target
26132         is valid.
26133         (attribute_section): Implement.
26134         (opt_attributes): Implement.
26135
26136         * attribute.cs : New file to handle attributes.
26137         (Attribute): Class to hold attribute info.
26138
26139         * cs-parser.jay (opt_attribute_target_specifier): Remove production
26140         (attribute_section): Modify production to use 2 different rules to 
26141         achieve the same thing. 1 s/r conflict down !
26142         Clean out commented, useless, non-reducing dimension_separator rules.
26143
26144         * class.cs (TypeContainer.attributes): New member to hold list
26145         of attributes for a type.
26146         (Struct::Struct): Modify to take one more argument, the attribute list.
26147         (Class::Class): Ditto.
26148         (Field::Field): Ditto.
26149         (Method::Method): Ditto.
26150         (Property::Property): Ditto.
26151
26152         * cs-parser.jay (struct_declaration): Update constructor call to
26153         pass in the attributes too.
26154         (class_declaration): Ditto.
26155         (constant_declaration): Ditto.
26156         (field_declaration): Ditto.
26157         (method_header): Ditto.
26158         (fixed_parameter): Ditto.
26159         (parameter_array): Ditto.
26160         (property_declaration): Ditto.
26161
26162         * constant.cs (Constant::Constant): Update constructor similarly.
26163         Use System.Collections.
26164
26165         * parameter.cs (Parameter::Parameter): Update as above.
26166
26167 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26168
26169         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
26170         (TypeContainer.delegates): New member to hold list of delegates.
26171
26172         * cs-parser.jay (delegate_declaration): Implement the action correctly 
26173         this time as I seem to be on crack ;-)
26174
26175 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
26176
26177         * rootcontext.cs (RootContext::IsNamespace): new function, used to
26178         tell whether an identifier represents a namespace.
26179
26180         * expression.cs (NamespaceExpr): A namespace expression, used only
26181         temporarly during expression resolution.
26182         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
26183         utility functions to resolve names on expressions.
26184
26185 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
26186
26187         * codegen.cs: Add hook for StatementExpressions. 
26188
26189         * class.cs: Fix inverted test for static flag in methods.
26190
26191 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26192
26193         * class.cs (Operator::CheckUnaryOperator): Correct error number used
26194         to make it coincide with MS' number.
26195         (Operator::CheckBinaryOperator): Ditto.
26196
26197         * ../errors/errors.txt : Remove error numbers added earlier.
26198
26199         * ../errors/cs1019.cs : Test case for error # 1019
26200
26201         * ../errros/cs1020.cs : Test case for error # 1020
26202
26203         * cs-parser.jay : Clean out commented cruft.
26204         (dimension_separators, dimension_separator): Comment out. Ostensibly not
26205         used anywhere - non-reducing rule.
26206         (namespace_declarations): Non-reducing rule - comment out.
26207
26208         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
26209         with TypeContainer::AddEnum.
26210
26211         * delegate.cs : New file for delegate handling classes.
26212         (Delegate): Class for declaring delegates.
26213
26214         * makefile : Update.
26215
26216         * cs-parser.jay (delegate_declaration): Implement.
26217
26218 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
26219
26220         * class.cs (Event::Define): Implement.
26221         (Event.EventBuilder): New member.
26222
26223         * class.cs (TypeContainer::Populate): Update to define all enums and events
26224         we have.
26225         (Events): New property for the events arraylist we hold. Shouldn't we move to using
26226         readonly fields for all these cases ?
26227
26228 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26229
26230         * class.cs (Property): Revamp to use the convention of making fields readonly.
26231         Accordingly modify code elsewhere.
26232
26233         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
26234         the Define method of the Property class.
26235
26236         * class.cs : Clean up applied patch and update references to variables etc. Fix 
26237         trivial bug.
26238         (TypeContainer::Populate): Update to define all the properties we have. Also
26239         define all enumerations.
26240
26241         * enum.cs (Define): Implement.
26242
26243 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26244
26245         * cs-parser.jay (overloadable_operator): The semantic value is an
26246         enum of the Operator class.
26247         (operator_declarator): Implement actions.
26248         (operator_declaration): Implement.
26249
26250         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
26251         validity of definitions.
26252         (Operator::CheckBinaryOperator): Static method to check for binary operators
26253         (TypeContainer::AddOperator): New method to add an operator to a type.
26254
26255         * cs-parser.jay (indexer_declaration): Added line to actually call the
26256         AddIndexer method so it gets added ;-)
26257
26258         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
26259         already taken care of by the MS compiler ?  
26260
26261 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26262
26263         * class.cs (Operator): New class for operator declarations.
26264         (Operator::OpType): Enum for the various operators.
26265
26266 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26267
26268         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
26269         ostensibly handle this in semantic analysis.
26270
26271         * cs-parser.jay (general_catch_clause): Comment out
26272         (specific_catch_clauses, specific_catch_clause): Ditto.
26273         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
26274         (catch_args, opt_catch_args): New productions.
26275         (catch_clause): Rewrite to use the new productions above
26276         (catch_clauses): Modify accordingly.
26277         (opt_catch_clauses): New production to use in try_statement
26278         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
26279         and re-write the code in the actions to extract the specific and
26280         general catch clauses by being a little smart ;-)
26281
26282         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
26283         Hooray, try and catch statements parse fine !
26284
26285 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26286
26287         * statement.cs (Block::GetVariableType): Fix logic to extract the type
26288         string from the hashtable of variables.
26289
26290         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
26291         I end up making that mistake ;-)
26292         (catch_clauses): Fixed gross error which made Key and Value of the 
26293         DictionaryEntry the same : $1 !!
26294
26295 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26296
26297         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
26298
26299         * cs-parser.jay (event_declaration): Correct to remove the semicolon
26300         when the add and remove accessors are specified. 
26301
26302 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26303
26304         * cs-parser.jay (IndexerDeclaration): New helper class to hold
26305         information about indexer_declarator.
26306         (indexer_declarator): Implement actions.
26307         (parsing_indexer): New local boolean used to keep track of whether
26308         we are parsing indexers or properties. This is necessary because 
26309         implicit_parameters come into picture even for the get accessor in the 
26310         case of an indexer.
26311         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
26312
26313         * class.cs (Indexer): New class for indexer declarations.
26314         (TypeContainer::AddIndexer): New method to add an indexer to a type.
26315         (TypeContainer::indexers): New member to hold list of indexers for the
26316         type.
26317
26318 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26319
26320         * cs-parser.jay (add_accessor_declaration): Implement action.
26321         (remove_accessor_declaration): Implement action.
26322         (event_accessors_declaration): Implement
26323         (variable_declarators): swap statements for first rule - trivial.
26324
26325         * class.cs (Event): New class to hold information about event
26326         declarations.
26327         (TypeContainer::AddEvent): New method to add an event to a type
26328         (TypeContainer::events): New member to hold list of events.
26329
26330         * cs-parser.jay (event_declaration): Implement actions.
26331
26332 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26333
26334         * cs-parser.jay (dim_separators): Implement. Make it a string
26335         concatenating all the commas together, just as they appear.
26336         (opt_dim_separators): Modify accordingly
26337         (rank_specifiers): Update accordingly. Basically do the same
26338         thing - instead, collect the brackets here.
26339         (opt_rank_sepcifiers): Modify accordingly.
26340         (array_type): Modify to actually return the complete type string
26341         instead of ignoring the rank_specifiers.
26342         (expression_list): Implement to collect the expressions
26343         (variable_initializer): Implement. We make it a list of expressions
26344         essentially so that we can handle the array_initializer case neatly too.
26345         (variable_initializer_list): Implement.
26346         (array_initializer): Make it a list of variable_initializers
26347         (opt_array_initializer): Modify accordingly.
26348
26349         * expression.cs (New::NType): Add enumeration to help us
26350         keep track of whether we have an object/delegate creation
26351         or an array creation.
26352         (New:NewType, New::Rank, New::Indices, New::Initializers): New
26353         members to hold data about array creation.
26354         (New:New): Modify to update NewType
26355         (New:New): New Overloaded contructor for the array creation
26356         case.
26357
26358         * cs-parser.jay (array_creation_expression): Implement to call
26359         the overloaded New constructor.
26360
26361 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
26362
26363         * class.cs (TypeContainer::Constructors): Return member
26364         constructors instead of returning null.
26365
26366 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
26367
26368         * typemanager.cs (InitCoreTypes): Initialize the various core
26369         types after we have populated the type manager with the user
26370         defined types (this distinction will be important later while
26371         compiling corlib.dll)
26372
26373         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
26374         on Expression Classification.  Now all expressions have a method
26375         `Resolve' and a method `Emit'.
26376
26377         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
26378         generation from working.     Also add some temporary debugging
26379         code. 
26380
26381 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
26382
26383         * codegen.cs: Lots of code generation pieces.  This is only the
26384         beginning, will continue tomorrow with more touches of polish.  We
26385         handle the fundamentals of if, while, do, for, return.  Others are
26386         trickier and I need to start working on invocations soon.
26387
26388         * gen-treedump.cs: Bug fix, use s.Increment here instead of
26389         s.InitStatement. 
26390
26391         * codegen.cs (EmitContext): New struct, used during code
26392         emission to keep a context.   Most of the code generation will be
26393         here. 
26394
26395         * cs-parser.jay: Add embedded blocks to the list of statements of
26396         this block.  So code generation proceeds in a top down fashion.
26397
26398 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
26399
26400         * statement.cs: Add support for multiple child blocks.
26401
26402 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
26403
26404         * codegen.cs (EmitCode): New function, will emit the code for a
26405         Block of code given a TypeContainer and its ILGenerator. 
26406
26407         * statement.cs (Block): Standard public readonly optimization.
26408         (Block::Block constructors): Link children. 
26409         (Block::Child): Child Linker.
26410         (Block::EmitVariables): Emits IL variable declarations.
26411
26412         * class.cs: Drop support for MethodGroups here, delay until
26413         Semantic Analysis.
26414         (Method::): Applied the same simplification that I did before, and
26415         move from Properties to public readonly fields.
26416         (Method::ParameterTypes): Returns the parameter types for the
26417         function, and implements a cache that will be useful later when I
26418         do error checking and the semantic analysis on the methods is
26419         performed.
26420         (Constructor::GetCallingConvention): Renamed from CallingConvetion
26421         and made a method, optional argument tells whether this is a class
26422         or a structure to apply the `has-this' bit.
26423         (Method::GetCallingConvention): Implement, returns the calling
26424         convention. 
26425         (Method::Define): Defines the type, a second pass is performed
26426         later to populate the methods.
26427
26428         (Constructor::ParameterTypes): implement a cache similar to the
26429         one on Method::ParameterTypes, useful later when we do semantic
26430         analysis. 
26431
26432         (TypeContainer::EmitMethod):  New method.  Emits methods.
26433
26434         * expression.cs: Removed MethodGroup class from here.
26435
26436         * parameter.cs (Parameters::GetCallingConvention): new method.
26437
26438 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
26439
26440         * class.cs (TypeContainer::Populate): Drop RootContext from the
26441         argument. 
26442
26443         (Constructor::CallingConvention): Returns the calling convention.
26444         (Constructor::ParameterTypes): Returns the constructor parameter
26445         types. 
26446
26447         (TypeContainer::AddConstructor): Keep track of default constructor
26448         and the default static constructor.
26449
26450         (Constructor::) Another class that starts using `public readonly'
26451         instead of properties. 
26452
26453         (Constructor::IsDefault): Whether this is a default constructor. 
26454
26455         (Field::) use readonly public fields instead of properties also.
26456
26457         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
26458         track of static constructors;  If none is used, turn on
26459         BeforeFieldInit in the TypeAttributes. 
26460
26461         * cs-parser.jay (opt_argument_list): now the return can be null
26462         for the cases where there are no arguments. 
26463
26464         (constructor_declarator): If there is no implicit `base' or
26465         `this', then invoke the default parent constructor. 
26466
26467         * modifiers.cs (MethodAttr): New static function maps a set of
26468         modifiers flags into a MethodAttributes enum
26469         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26470         MethodAttr, TypeAttr to represent the various mappings where the
26471         modifiers are used.
26472         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26473
26474 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26475
26476         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26477         method arguments.
26478
26479         * interface.cs (PopulateIndexer): Implemented the code generator
26480         for interface indexers.
26481
26482 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26483
26484         * interface.cs (InterfaceMemberBase): Now we track the new status
26485         here.  
26486
26487         (PopulateProperty): Implement property population.  Woohoo!  Got
26488         Methods and Properties going today. 
26489
26490         Removed all the properties for interfaces, and replaced them with
26491         `public readonly' fields. 
26492
26493 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26494
26495         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26496         initialize their hashtables/arraylists only when they are needed
26497         instead of doing this always.
26498
26499         * parameter.cs: Handle refs and out parameters.
26500
26501         * cs-parser.jay: Use an ArrayList to construct the arguments
26502         instead of the ParameterCollection, and then cast that to a
26503         Parameter[] array.
26504
26505         * parameter.cs: Drop the use of ParameterCollection and use
26506         instead arrays of Parameters.
26507
26508         (GetParameterInfo): Use the Type, not the Name when resolving
26509         types. 
26510
26511 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26512
26513         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26514         and instead use public readonly fields.
26515
26516         * class.cs: Put back walking code for type containers.
26517
26518 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26519
26520         * class.cs (MakeConstant): Code to define constants.
26521
26522         * rootcontext.cs (LookupType): New function.  Used to locate types 
26523
26524
26525 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26526
26527         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26528         this System.Reflection code is.  Kudos to Microsoft
26529
26530         * typemanager.cs: Implement a type cache and avoid loading all
26531         types at boot time.  Wrap in LookupType the internals.  This made
26532         the compiler so much faster.  Wow.  I rule!
26533
26534         * driver.cs: Make sure we always load mscorlib first (for
26535         debugging purposes, nothing really important).
26536
26537         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26538         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26539
26540         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26541         on namespaces that have been imported using the `using' keyword.
26542
26543         * class.cs (TypeContainer::TypeAttr): Virtualize.
26544         (Class::TypeAttr): Return attributes suitable for this bad boy.
26545         (Struct::TypeAttr): ditto.
26546         Handle nested classes.
26547         (TypeContainer::) Remove all the type visiting code, it is now
26548         replaced with the rootcontext.cs code
26549
26550         * rootcontext.cs (GetClassBases): Added support for structs. 
26551
26552 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26553
26554         * interface.cs, statement.cs, class.cs, parameter.cs,
26555         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26556         Drop use of TypeRefs, and use strings instead.
26557
26558 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26559
26560         * rootcontext.cs: 
26561
26562         * class.cs (Struct::Struct): set the SEALED flags after
26563         checking the modifiers.
26564         (TypeContainer::TypeAttr): new property, returns the
26565         TypeAttributes for a class.  
26566
26567         * cs-parser.jay (type_list): Oops, list production was creating a
26568         new list of base types.
26569
26570         * rootcontext.cs (StdLib): New property.
26571         (GetInterfaceTypeByName): returns an interface by type name, and
26572         encapsulates error handling here.
26573         (GetInterfaces): simplified.
26574         (ResolveTree): Encapsulated all the tree resolution here.
26575         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26576         types. 
26577
26578         * driver.cs: Add support for --nostdlib, to avoid loading the
26579         default assemblies.
26580         (Main): Do not put tree resolution here. 
26581
26582         * rootcontext.cs: Beginning of the class resolution.
26583
26584 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26585
26586         * rootcontext.cs: Provide better error reporting. 
26587
26588         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26589
26590         * rootcontext.cs (CreateInterface): Handle the case where there
26591         are no parent interfaces.
26592
26593         (CloseTypes): Routine to flush types at the end.
26594         (CreateInterface): Track types.
26595         (GetInterfaces): Returns an array of Types from the list of
26596         defined interfaces.
26597
26598         * typemanager.c (AddUserType): Mechanism to track user types (puts
26599         the type on the global type hash, and allows us to close it at the
26600         end). 
26601
26602 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
26603
26604         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
26605         RecordInterface instead.
26606
26607         * cs-parser.jay: Updated to reflect changes above.
26608
26609         * decl.cs (Definition): Keep track of the TypeBuilder type that
26610         represents this type here.  Not sure we will use it in the long
26611         run, but wont hurt for now.
26612
26613         * driver.cs: Smaller changes to accomodate the new code.
26614
26615         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
26616         when done. 
26617
26618         * rootcontext.cs (CreateInterface):  New method, used to create
26619         the System.TypeBuilder type for interfaces.
26620         (ResolveInterfaces): new entry point to resolve the interface
26621         hierarchy. 
26622         (CodeGen): Property, used to keep track of the code generator.
26623
26624 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
26625
26626         * cs-parser.jay: Add a second production for delegate_declaration
26627         with `VOID'.
26628
26629         (enum_body): Put an opt_comma here instead of putting it on
26630         enum_body or enum_member_declarations so we can handle trailing
26631         commas on enumeration members.  Gets rid of a shift/reduce.
26632
26633         (type_list): Need a COMMA in the middle.
26634
26635         (indexer_declaration): Tell tokenizer to recognize get/set
26636
26637         * Remove old targets.
26638
26639         * Re-add the parser target.
26640
26641 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26642
26643         * cs-parser.jay: Add precendence rules for a number of operators
26644         ot reduce the number of shift/reduce conflicts in the grammar.
26645
26646 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
26647
26648         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
26649         and put it here.
26650
26651         Get rid of old crufty code.
26652
26653         * rootcontext.cs: Use this to keep track of the parsed
26654         representation and the defined types available to the program. 
26655
26656         * gen-treedump.cs: adjust for new convention.
26657
26658         * type.cs: Split out the type manager, and the assembly builder
26659         from here. 
26660
26661         * typemanager.cs: the type manager will live here now.
26662
26663         * cil-codegen.cs: And the code generator here. 
26664
26665 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
26666
26667         * makefile: Fixed up for easy making.
26668
26669 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26670
26671         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
26672         the 
26673
26674         (unary_expression): Expand pre_increment_expression and
26675         post_decrement_expression to reduce a shift/reduce.
26676
26677 2001-07-11  Simon Cozens
26678
26679         * cs-tokenizer.cs: Hex numbers should begin with a 0.
26680
26681         Improve allow_keyword_as_indent name.
26682
26683 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
26684
26685         * Adjustments for Beta2. 
26686
26687 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
26688
26689         * decl.cs: Added `Define' abstract method.
26690         (InTransit): new property, used to catch recursive definitions. 
26691
26692         * interface.cs: Implement `Define'. 
26693
26694         * modifiers.cs: Map Modifiers.constants to
26695         System.Reflection.TypeAttribute flags.
26696
26697         * class.cs: Keep track of types and user-defined types.
26698         (BuilderInit): New method for creating an assembly
26699         (ResolveType): New function to launch the resolution process, only
26700         used by interfaces for now.
26701
26702         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
26703         that are inserted into the name space. 
26704
26705 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
26706
26707         * ARGH.  I have screwed up my tree so many times due to the use of
26708         rsync rather than using CVS.  Going to fix this at once. 
26709
26710         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
26711         load types.
26712
26713 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
26714
26715         * Experiment successful: Use System.Type rather that our own
26716         version of Type.  
26717
26718 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
26719
26720         * cs-parser.jay: Removed nsAliases from here.
26721
26722         Use new namespaces, handle `using XXX;' 
26723
26724         * namespace.cs: Reimplemented namespace handling, use a recursive
26725         definition of the class.  Now we can keep track of using clauses
26726         and catch invalid using clauses.
26727
26728 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
26729
26730         * gen-treedump.cs: Adapted for all the renaming.
26731
26732         * expression.cs (Expression): this class now has a Type property
26733         which returns an expression Type.
26734
26735         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
26736         `Type', as this has a different meaning now in the base
26737
26738 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
26739
26740         * interface.cs, class.cs: Removed from all the sources the
26741         references to signature computation, as we can not do method
26742         signature computation during the parsing time, as we are not
26743         trying to solve at that point distinguishing:
26744
26745         class X {
26746                 void a (Blah x) {}
26747                 void a (NS.Blah x) {}
26748         }
26749
26750         Which depending on the context might be valid or not, as we do not
26751         know if Blah is the same thing as NS.Blah at that point.
26752
26753         * Redid everything so the code uses TypeRefs now instead of
26754         Types.  TypeRefs are just temporary type placeholders, that need
26755         to be resolved.  They initially have a pointer to a string and the
26756         current scope in which they are used.  This is used later by the
26757         compiler to resolve the reference to an actual Type. 
26758
26759         * DeclSpace is no longer a CIR.Type, and neither are
26760         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
26761         are all DeclSpaces, but no Types. 
26762
26763         * type.cs (TypeRefManager): This implements the TypeRef manager,
26764         which keeps track of all the types that need to be resolved after
26765         the parsing has finished. 
26766
26767 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
26768
26769         * ARGH.  We are going to have to store `foreach' as a class rather
26770         than resolving it, as we need to verify error 1579 after name
26771         resolution.   *OR* we could keep a flag that says `This request to
26772         IEnumerator comes from a foreach statement' which we can then use
26773         to generate the error.
26774
26775 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
26776
26777         * class.cs (TypeContainer.AddMethod): we now add methods to the
26778         MethodGroup instead of the method hashtable.  
26779
26780         * expression.cs: Add MethodGroup abstraction, which gets us one
26781         step closer to the specification in the way we handle method
26782         declarations.  
26783
26784         * cs-parser.jay (primary_expression): qualified_identifier now
26785         tried to match up an identifier to a local variable reference or
26786         to a parameter reference.
26787
26788         current_local_parameters is now a parser global variable that
26789         points to the current parameters for the block, used during name
26790         lookup.
26791
26792         (property_declaration): Now creates an implicit `value' argument to
26793         the set accessor.
26794
26795 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
26796
26797         * parameter.cs: Do not use `param' arguments as part of the
26798         signature, per the spec.
26799
26800 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
26801
26802         * decl.cs: Base class for classes, structs and interfaces.  This
26803         is the "Declaration Space" 
26804
26805         * cs-parser.jay: Use CheckDef for checking declaration errors
26806         instead of having one on each function.
26807
26808         * class.cs: Factor out some code for handling error handling in
26809         accordance to the "Declarations" section in the "Basic Concepts"
26810         chapter in the ECMA C# spec.
26811
26812         * interface.cs: Make all interface member classes derive from
26813         InterfaceMemberBase.
26814
26815 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
26816
26817         * Many things: all interfaces are parsed and generated in
26818         gen-treedump.  Support for member variables, constructors,
26819         destructors, properties, constants is there.
26820
26821         Beginning of the IL backend, but very little done, just there for
26822         testing purposes. 
26823
26824 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
26825
26826         * cs-parser.jay: Fix labeled statement.
26827
26828         * cs-tokenizer.cs (escape): Escape " and ' always.
26829         ref_line, ref_name: keep track of the line/filename as instructed
26830         by #line by the compiler.
26831         Parse #line.
26832
26833 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
26834
26835         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
26836         to match the values in System.CodeDOM.
26837
26838         Divid renamed to Divide.
26839
26840         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
26841         statements. 
26842         (Statements.set): remove.
26843
26844         * System.CodeDOM/CodeCatchClause.cs: always have a valid
26845         statements. 
26846
26847         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
26848         falseStatements always have valid values. 
26849
26850         * cs-parser.jay: Use System.CodeDOM now.
26851