LinkButtonTest.cs added new tests for 2.0
[mono.git] / mcs / gmcs / ChangeLog
1 2006-11-21  Marek Safar  <marek.safar@gmail.com>
2
3         * cs-parser.jay: Tiny change to work with mcs tokenizer.
4
5         * cs-tokenizer.cs: Remove after unification with mcs.
6
7 2006-10-28  Marek Safar  <marek.safar@gmail.com>
8
9         A fix for bug #78998
10         * generic.cs (ConstructedType.AsAccessible): Check accessibility of type
11         arguments as well.
12
13 2006-10-26  Marek Safar  <marek.safar@gmail.com>
14
15         A fix for bug #76591
16         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous methods.
17
18 2006-10-25  Brian Crowell  <brian@fluggo.com>
19
20         Fix #79703
21         * generic.cs (CheckConstraints): Allow generic parameters with
22         inheritance constraints to satisfy reference type constraints.
23
24 2006-10-09  Martin Baulig  <martin@ximian.com>
25
26         * generic.cs
27         (NullCoalescingOperator.DoResolve): Fix #78964; added gtest-294.cs.
28
29 2006-09-25  Martin Baulig  <martin@ximian.com>
30
31         * class.cs: Remove after unification with mcs source.
32
33 2006-09-24  Raja R Harinath  <harinath@gmail.com>
34
35         * convert.cs: Remove after unification with mcs source.
36
37 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
38
39         * class.cs (MemberBase.VerifyClsCompliance): When method has type
40         parameters verify them as well.
41
42         * generic.cs (Constraints.VerifyClsCompliance): Verify CLS-Compliance of
43         the type parameter constraints.
44         (Generics.VerifyClsCompliance): Ditto.
45
46 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
47
48         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
49         for anonymous block with out argument.
50
51 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
52
53         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
54         not used private events only.
55
56 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
57
58         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
59
60         * cs-parser.jay: Parse correctly cast of default (T).
61
62         * generic.cs (DefaultValueExpression.DoResolve): Check for void type.
63         Store original type via EmptyConstantCast.
64
65 2006-09-22  Martin Baulig  <martin@ximian.com>
66
67         * delegate.cs: Removed; this file is now shared with mcs.
68
69         * attribute.cs: Removed; this file is now shared with mcs.
70
71 2006-09-22  Martin Baulig  <martin@ximian.com>
72
73         * ecore.cs: Removed; this file is now shared with mcs.
74
75 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
76
77         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
78
79         * ecore.cs (NullCast): Derives from NullConstant.
80
81         * generic.cs (DefaultValueExpression): Fixed to cope with the constant
82         results.
83
84 2006-09-21  Martin Baulig  <martin@ximian.com>
85
86         * decl.cs: Removed; this file is now shared with mcs.
87
88 2006-09-21  Raja R Harinath  <rharinath@novell.com>
89
90         * rootcontext.cs: Remove after unification with mcs source.
91
92         * report.cs: Remove after unification with mcs source.
93         * generic.cs (AddTypeParameter, LookupTypeParameter): Move to
94         mcs/typemanager.cs.
95         (InitGenerics, CleanUpGenerics): Remove.
96
97         * support.cs: Remove after unification with mcs source.
98
99 2006-09-20  Raja R Harinath  <rharinath@novell.com>
100
101         * codegen.cs: Remove after unification with mcs source.
102
103 2006-09-19  Martin Baulig  <martin@ximian.com>
104
105         * expression.cs: Removed; this file is now shared with mcs.
106
107 2006-09-19  Martin Baulig  <martin@ximian.com>
108
109         * generic.cs
110         (TypeManager.IsEqual): Moved into ../mcs/typemanager.cs.
111         (TypeManager.DropGenericTypeArguments): Likewise.
112         (TypeManager.DropGenericMethodArguments): Likewise.
113         (TypeManager.GetTypeArguments): Likewise.
114         (TypeManager.HasGenericArguments): Likewise.
115
116 2006-09-19  Martin Baulig  <martin@ximian.com>
117
118         * ecore.cs (PropertyExpr.InstanceResolve): Fix the CS1540 check.
119
120 2006-09-19  Martin Baulig  <martin@ximian.com>
121
122         * typemanager.cs: Removed; this file is now shared with mcs.
123
124 2006-09-16  Raja R Harinath  <rharinath@novell.com>
125
126         * Makefile (LOCAL_MCS_FLAGS): Use instead of PROFILE_MCS_FLAGS.
127         * AssemblyInfo.cs, driver.cs: Remove after unification with mcs source.
128
129 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
130
131         A fix for #79401
132         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
133         only if parent type is class.
134         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
135         update.
136
137 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
138
139         * cs-parser.jay,
140         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
141         keywords are used.
142         * typemanager.cs(CSharpName): Converts NullType to null.
143
144 2006-09-15  Martin Baulig  <martin@ximian.com>
145
146         * pending.cs: Removed; this file is now shared with mcs.
147
148 2006-09-15  Martin Baulig  <martin@ximian.com>
149
150         * statement.cs: Removed; this file is now shared with mcs.
151
152 2006-09-15  Martin Baulig  <martin@ximian.com>
153
154         * rootcontext.cs (RootContext.BrokenCircularDeps): Removed.
155
156         * driver.cs: Removed the `--broken-cycles' argument.
157
158 2006-09-15  Martin Baulig  <martin@ximian.com>
159
160         * namespace.cs: Removed; this file is now shared with mcs.
161
162 2006-09-15  Martin Baulig  <martin@ximian.com>
163
164         * decl.cs (MemberName): Minor code cleanups.
165
166 2006-09-15  Martin Baulig  <martin@ximian.com>
167
168         * parameter.cs: Removed; this file is now shared with mcs.
169
170 2006-09-15  Martin Baulig  <martin@ximian.com>
171
172         * enum.cs: Removed; this file is now shared with mcs.
173
174 2006-09-15  Martin Baulig  <martin@ximian.com>
175
176         * Makefile: Define `GMCS_SOURCE'.
177
178         * flowanalysis.cs: Removed; this file is now shared with mcs.
179
180 2006-09-15  Martin Baulig  <martin@ximian.com>
181
182         Removed modifiers.cs, literal.cs, location.cs, roottypes.cs,
183         assign.cs, const.cs, cfold.cs, constant.cs, symbolwriter.cs and
184         doc.cs - they are now shared with mcs.
185
186         * gmcs.exe.sources: Include these files from ../mcs/.
187
188 2006-09-15  Martin Baulig  <martin@ximian.com>
189
190         * old-code.cs, gen-il.cs, gen-treedump.cs: Removed old stuff.
191         * g1.cs, sample-hello.cs, sample-stack.il: Likewise.
192
193 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
194
195         * assign.cs, ecore.cs, expression.cs: Share error message text.
196         * class.cs (FieldMember.Define): Check for variable of static type.
197         * decl.cs (check_type_parameter): Report correct type name.
198         * driver.cs (LoadAssembly): Uses error output for errors.
199         * generic.cs (Constraints.Resolve): Add check for constraint accessibility
200         (TypeArguments.Resolve): Static class cannot be used as an argument.
201         * statement.cs (ResolveMeta): Constants cannot be generic types.
202
203 2006-09-12  Martin Baulig  <martin@ximian.com>
204
205         * generic.cs (TypeManager.IsIList): Moved into convert.cs.
206
207         * convert.cs (Convert.Array_To_IList): Moved here and correctly
208         implement it; fixes #79345.
209
210 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
211
212         * decl.cs (DeclSpace.SetParameterInfo): Check for nonexistent type
213         parameter.
214         * expression.cs (TypeOf.GetAttributableValue): Check for open generic
215         types.
216         * generic.cs: Improved error messages.
217         * typemanager.cs (RemoveGenericArity): Made public.
218
219 2006-09-08  Martin Baulig  <martin@ximian.com>
220
221         * typemanager.cs (TypeManager.interlocked_type): New public field.
222         (TypeManager.int_interlocked_compare-exchange): New public field.
223         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
224         enumerator types here and call InitGenericCoreTypes().
225         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
226         after calling InitEnumUnderlyingTypes().
227
228         * rootcontext.cs
229         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
230         `classes_second_stage'. 
231
232 2006-09-07  Marek Safar  <marek.safar@seznam.cz>
233  
234         * class.cs, generic.cs (GenericMethod.Define): Check for type parameter
235         collisions.
236         * statement.cs (Block.Variables): Made public.
237
238 2006-09-07  Martin Baulig  <martin@ximian.com>
239
240         * driver.cs
241         (MainDriver): Revert r62663 from Marek; see #70506 for details.
242
243 2006-09-01  Martin Baulig  <martin@ximian.com>
244
245         * generic.cs
246         (TypeManager.IsIList): Also handle base classes and interfaces. 
247
248 2006-09-01  Raja R Harinath  <rharinath@novell.com>
249
250         Fix #79238
251         * expression.cs (Invocation.MoreSpecific): Check for reference
252         types earlier.
253
254 2006-08-29  Miguel de Icaza  <miguel@novell.com>
255
256         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
257
258 2006-08-17  Miguel de Icaza  <miguel@novell.com>
259
260         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
261         #52019 and #79064, the use of the \uXXXX sequence in source code
262         to represent unicode characters.
263
264 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
265  
266         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
267         support.
268         * class.cs, ecore.cs, statement.cs: Merged to one error message.
269
270 2006-08-14  Raja R Harinath  <rharinath@novell.com>
271
272         Fix #79067
273         * cs-tokenizer.cs (parse_less_than): Allow '*' to appear in a type
274         parameter too.  This only avoids a parse error -- the semantic
275         error is caught elsewhere.
276
277 2006-08-13  Miguel de Icaza  <miguel@novell.com>
278
279         * assign.cs: Catch attempts to assign to a method groups in += and
280         report as 1656
281
282 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
283
284         A fix for #79056
285         * cs-parser.jay: Don't destroy current array type by typeof of array's.
286
287 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
288
289         * cs-parser.jay: Check whether a constraint clause has already been
290         specified for type parameter.
291         * generic.cs (Constraints): Exposed location.
292
293 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
294
295         * class.cs (Method.Define): Issue a warning when generic method looks like
296         an entry point.
297         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
298         as well.
299         * report.cs: New warning number.
300
301 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
302  
303         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
304         looking for ctor.
305         * decl.cs (MemberCache.FindMembers): When container is interface we need to
306         search all base interfaces as a member can be ambiguous.
307         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
308         Constructor member type filter. 
309         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
310         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
311         reporting for returned memberinfos.
312         * report.cs: Updated.
313         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
314         version to work on all runtimes.
315         (TypeManager.RealMemberLookup): Removed members filtering.
316
317 2006-08-08  Raja R Harinath  <rharinath@novell.com>
318
319         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
320         (PropertyExpr.EmitAssign): Likewise.
321         * expression.cs (Indirection.EmitAssign): Likewise.
322         (LocalVariableReference.EmitAssign): Likewise.
323         (ParameterReference.EmitAssign): Likewise.
324         (Invocation.EmitArguments): Likewise.
325         (ArrayAccess.EmitAssign): Likewise.
326         (IndexerAccess.EmitAssign): Likewise.
327         (This.EmitAssign): Likewise.
328         (ConditionalLogicalOperator.Emit): Likewise.
329
330         Fix #79026
331         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
332         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
333         leave it in after returning it.
334         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
335
336 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
337
338         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
339         message.
340
341 2006-08-05  Marek Safar  <marek.safar@seznam.cz>
342
343         * class.cs (TypeContainer.AddPartial): Add check for partial declarations
344         with different type names.
345         (TypeContainer.UpdateTypeParameterConstraints): Updated an error message.
346
347 2006-08-03  Raja R Harinath  <rharinath@novell.com>
348
349         Fix cs0146-3.cs and cs0146-4.cs.
350         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
351         enclosing types don't depend on the current type.
352
353 2006-08-02  Raja R Harinath  <rharinath@novell.com>
354
355         Fix #77963
356         * class.cs (TypeContainer.DoDefineMembers): Use
357         FindBaseMemberWithSameName on Parent, since we're interested in
358         whether we hide inherited members or not.
359         (FindBaseMemberWithSameName): Make slightly more robust.
360
361         Fix #77396
362         * codegen.cs (IResolveContext.GenericDeclContainer): New.
363         (EmitContext): Implement new interface requirement.
364         * namespace.cs (UsingEntry, LocalAliasEntry): Likewise.
365         * decl.cs (MemberCore): Likewise.
366         (DeclSpace.GenericDeclContainer): Rename from DeclContainer.
367         * ecore.cs (SimpleName.ResolveAsTypeTerminal): Use
368         ec.GenericDeclContainer to check for generic parameters.
369         (SimpleName.DoSimpleNameResolve): Likewise.
370         * generic.cs (TypeParameter.DeclContainer): Remove override.
371
372         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
373         declspaces for doppelgangers too.
374         (UsingEntry): Implement IResolveContext.
375         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
376         'this' as the resolve context.
377         (LocalAliasEntry): Likewise.
378
379         Implement parts of #77403
380         * roottypes.cs (RootDeclSpace): New.  Used to represent the
381         toplevel declaration space.  Each namespace declaration introduces
382         a "partial" root declaretion space.
383         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
384         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
385         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
386         from 'current_namespace.SlaveDeclSpace'.
387         (namespace_declaration): Likewise.
388         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
389         check.  It can't happen now.
390         * decl.cs (DeclSpace.LookupType): Likewise.
391         * driver.cs (MainDriver): Sanity check.
392
393 2006-08-01  Raja R Harinath  <rharinath@novell.com>
394
395         * decl.cs (DeclSpace.FindNestedType): Remove.
396         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
397         LookupTypeContainer to get the container of the nested type.
398         * class.cs (TypeContainer.FindNestedType): Make non-override.
399
400 2006-07-31  Raja R Harinath  <rharinath@novell.com>
401
402         * decl.cs (DeclSpace.PartialContainer): Move field from ...
403         * class.cs (TypeContainer.PartialContainer): ... here.
404         (TypeContainer.AddBasesForPart): New helper.
405         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
406         instead.
407         * cs-parser.jay (current_class): Convert to DeclSpace.
408         (struct_declaration, interface_declaration, class_declaration):
409         Use AddBasesForPart instead of .Bases directly.
410         * const.cs, iterators.cs: Update to changes.
411
412 2006-07-28  Raja R Harinath  <rharinath@novell.com>
413
414         * class.cs (TypeContainer.AddMemberType): Rename from
415         AddToTypeContainer.
416         (TypeContainer.AddMember): Rename from AddToMemberContainer.
417         (AddTypeContainer): New.  Combine AddClassOrStruct and
418         AddInterface.
419         (AddPartial): Update.  Add 'is_partial' argument.
420         * roottypes.cs: Update to changes.
421         * cs-parser.jay (push_current_class): New helper for handling
422         current_container and current_class.
423         (struct_declaration, interface_declaration, class_declaration):
424         Use it.
425
426 2006-07-26  Raja R Harinath  <rharinath@novell.com>
427
428         * roottypes.cs: Rename from tree.cs.
429
430         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
431         * tree.cs (Tree, ITreeDump): Remove types.
432         * rootcontext.cs (tree, Tree): Remove fields.
433         (root, ToplevelTypes): New.
434         * *.cs: Update to rename.
435
436         * tree.cs (Tree.RecordDecl): Remove.
437         (RootTypes.AddToTypeContainer): Record the toplevel type in its
438         namespace here.
439         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
440
441 2006-07-23  Raja R Harinath  <harinath@gmail.com>
442
443         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
444         DoFlowAnalysis and OmitStructFlowAnalysis here.
445         (ec.With): Rename from WithUnsafe and generalize.
446         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
447         (ec.WithFlowAnalyis): New.
448         * ecore.cs, expression.cs, statement.cs: Update.
449
450 2006-07-22  Raja R Harinath  <harinath@gmail.com>
451
452         * statement.cs (Block.ResolveMeta): Simplify slightly.
453
454         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
455         multiple boolean fields.  Convert InUnsafe, constant_check_state,
456         check_state to flags.
457         (CheckState, ConstantCheckState): Update.
458         (InUnsafe): New read-only property.
459         (FlagsHandle): Rename from CheckStateHandle and convert to handle
460         arbitrary flags.
461         (WithUnsafe): New helper similar to WithCheckState.
462         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
463         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
464
465 2006-07-21  Raja R Harinath  <rharinath@novell.com>
466
467         Make comparisons use the same IL irrespective of whether they're
468         in a 'checked' or 'unchecked' context: one of the issues in #78899
469         * codegen.cs (EmitContext.CheckState): Make read-only property.
470         (EmitContext.ConstantCheckState): Likewise.
471         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
472         helper that implement a save/restore stack for CheckState
473         values.  This is the only way to change check-state.
474         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
475         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
476         (CheckedExpr.EmitBranchable): New forwarding method.
477         (UnCheckedExpr): Likewise.
478         * statement.cs (Block.ResolveMeta): Use WithCheckState.
479         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
480         (Checked.Resolve, checked.DoEmit): Likewise.
481
482 2006-07-21  Martin Baulig  <martin@ximian.com>
483
484         * generic.cs (TypeManager.InferType): When inferring an array
485         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
486
487 2006-07-21  Martin Baulig  <martin@ximian.com>
488
489         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
490         and allow IList`1 and all its base interfaces.
491
492         * convert.cs (Convert.ImplicitReferenceConversion): Allow
493         converting from an array-type of T to IList<T>.
494
495 2006-07-21  Martin Baulig  <martin@ximian.com>
496
497         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
498
499 2006-07-20  Miguel de Icaza  <miguel@novell.com>
500
501         * anonymous.cs: Cache the resolved anonymous delegate, and return
502         this so that the ResolveTopBlock is only triggered once, not
503         twice.
504
505         Currently we trigger ResolvetopBlock twice due to a first pass of
506         argument check compatibility, and a second pass that does the
507         actual resolution.   
508
509 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
510
511         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
512         modifiers.
513         * rootcontext.cs (Reset): Add helper_classes.
514
515 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
516
517         A fix for #78860
518         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
519         correctly.
520
521 2006-07-13  Miguel de Icaza  <miguel@novell.com>
522
523         * statement.cs (Lock): Handle expressions of type
524         TypeManager.null_type specially.  Fixes #78770
525
526 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
527
528         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
529         to an event.
530
531 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
532
533         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
534         for accessors as well.
535         * ecore.cs (EventExpr): Add AccessorTable.
536
537 2006-07-03  Martin Baulig  <martin@ximian.com>
538
539         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
540         instances of value types.
541
542         * convert.cs (Convert.ExplicitConversion): Correctly handle
543         object->nullable conversions.   
544
545 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
546
547         A fix for #78738
548         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
549         for CS0122 where appropriate.
550         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
551         level attributes.
552         (Filter): Assembly can be null in the case of top level attributes.
553
554 2006-06-28  Raja R Harinath  <rharinath@novell.com>
555
556         Fix #78716
557         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
558         no arguments, return 'false': nothing can be inferred.
559
560 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
561
562         A fix for #78690
563
564         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
565         is done at global level.
566
567 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
568
569         A fix for #77002, Implemented TypeForwarder support.
570
571         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
572         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
573         attribute handling.
574         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
575         * typemanager.cs (): Add type_forwarder_attr_type.
576
577 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
578
579         * report.cs: Add CS0469 warning.
580
581 2006-06-22  Martin Baulig  <martin@ximian.com>
582
583         * class.cs
584         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
585         for interfaces; fixes #78686, which is a modification of #78380
586         with interfaces instead of classes.
587
588 2006-06-21  Martin Baulig  <martin@ximian.com>
589
590         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
591         the `try'-block, so we also report CS0016 etc. there.
592
593 2006-06-21  Martin Baulig  <martin@ximian.com>
594
595         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
596         handle SetAssigned() and SetMemberIsUsed() for generic types;
597         fixes #77545.
598
599 2006-06-21  Martin Baulig  <martin@ximian.com>
600
601         * delegate.cs
602         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
603
604 2006-06-21  Martin Baulig  <martin@ximian.com>
605
606         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
607         also report CS1686 for parameters.
608
609 2006-06-21  Martin Baulig  <martin@ximian.com>
610
611         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
612         instead of an error if the value is not implicitly convertible to
613         the switch types; fixes #77964.
614
615 2006-06-21  Raja R Harinath  <rharinath@novell.com>
616
617         Fix #78673
618         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
619         FieldBuilder is null.
620
621         Fix #78662
622         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
623         'left' and 'right' before error-checking.
624
625 2006-06-19  Martin Baulig  <martin@ximian.com>
626
627         * convert.cs
628         (Convert.ImplicitConversionStandard): Cleanup and correctly
629         implement nullable conversions.
630         (Convert.ImplicitStandardConversionExists): Likewise.
631         (Convert.ExplicitConversion): Likewise.
632
633 2006-06-19  Martin Baulig  <martin@ximian.com>
634
635         * generic.cs
636         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
637         methods; make the ctors protected.
638
639 2006-06-19  Martin Baulig  <martin@ximian.com>
640
641         Fixed #78380; added gtest-273.cs.
642
643         * ecore.cs
644         (Expression.ResolveAsBaseTerminal): Move the constraint checking
645         into ResolveAsTypeTerminal().
646
647         * generic.cs
648         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
649         TypeManager.FindMembers() to check for the default ctor.
650
651 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
652
653         * generic.cs: Fixed NullableInfo accessibility.
654
655 2006-06-16  Martin Baulig  <martin@ximian.com>
656
657         * generic.cs
658         (Constraints.InflatedConstraints.inflate): Correctly inflate
659         generic types; fixes #78400.
660
661 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
662
663         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
664         Fixed bug #78601.
665         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
666         (FieldExpr.DoResolve): likewise.
667         (PropertyExpr.InstanceResolve): likewise.
668         (EventExpr.InstanceResolve): likewise. 
669
670 2006-06-15  Martin Baulig  <martin@ximian.com>
671
672         * statement.cs
673         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
674         argument; always allow a `null' label if true.
675         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
676         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
677         we have a `null' label and mark the new `null_target' label;
678         default to the `default' label.
679         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
680
681 2006-06-15  Martin Baulig  <martin@ximian.com>
682
683         * class.cs (Operator.Define): Allow an implicit/explicit operator
684         to convert to/from a nullable value of the enclosing type.
685
686         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
687         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
688
689         * convert.cs
690         (Convert.ImplicitStandardConversionExists): Add support for lifted
691         implicit/explicit conversions.
692         (Convert.ImplicitConversionStandard): Likewise.
693
694 2006-06-13  Martin Baulig  <martin@ximian.com>
695
696         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
697         type arguments and create a ConstructedType if necessary.  Fixes #78400.
698
699 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
700
701         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
702         attribute applicable tests for attribute argument.
703
704 2006-06-02  Raja R Harinath  <rharinath@novell.com>
705
706         Fix #78079
707         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
708         (Binary.OverloadResolve_PredefinedIntegral): New.
709         (Binary.OverloadResolve_PredefinedFloating): New.
710         (Binary.OverloadResolve_PredefinedString): New.
711         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
712         Follow the standard more closely, and treat numeric promotions in
713         terms of overload resolution.
714         (Binary.CheckShiftArguments): Simplify.
715
716 2006-06-01  Raja R Harinath  <rharinath@novell.com>
717
718         * flowanalysis.cs (MyBitVector): Simplify representation.
719         (MyBitVector.Clone): Avoid allocating BitArray.
720         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
721         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
722         (*): Update.  Change all references to MyBitVector.And and
723         MyBitVector.Or to &= and |=.
724
725 2006-05-31  Raja R Harinath  <rharinath@novell.com>
726
727         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
728         Use bne.un instead of ceq+brfalse.
729
730         Fix cs0208-[23].cs
731         * typemanager.cs (IsUnmanagedType): Disallow generic types and
732         generic parameters.
733
734 2006-05-29  Raja R Harinath  <rharinath@novell.com>
735
736         Fix cs0231-[34].cs.
737         * cs-parser.jay (formal_parameter_list): Extend the pattern below
738         to param arguments too.
739
740 2006-05-26  Miguel de Icaza  <miguel@novell.com>
741
742         * cs-parser.jay: Catch another parsing form for arglist being
743         followed by other arguments.  Fixes #78313.
744
745 2006-05-25  Raja R Harinath  <rharinath@novell.com>
746
747         Fix #78324
748         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
749         also when one of the operands is a null literal.
750         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
751         to improve clarity, and generate slightly better code.
752
753 2006-05-24  Raja R Harinath  <rharinath@novell.com>
754
755         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
756         checking of out parameters to ...
757         (FlowBranchingToplevel.Merge): ... here.
758         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
759         set, propagate the origin upward, and only complain if there was
760         no other error.
761         (FlowBranchingException.AddContinueOrigin): Likewise.
762         (FlowBranchingException.AddReturnOrigin): Likewise.
763         (FlowBranchingException.AddGotoOrigin): Likewise.       
764
765 2006-05-23  Raja R Harinath  <rharinath@novell.com>
766
767         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
768         unreachable, skip it.
769         (FlowBranchingException.Merge): Always propagate jumps, even if
770         the finally block renders subsequent code unreachable.
771
772 2006-05-18  Raja R Harinath  <rharinath@novell.com>
773
774         Fix #77601
775         * statement.cs (Goto.Resolve): Move responsibility for resolving
776         'goto' to FlowBranching.AddGotoOrigin.
777         (Goto.SetResolvedTarget): New.  Callback to set the
778         LabeledStatement that's the target of the goto.
779         (Goto.DoEmit): Use Leave instead of Br when crossing an
780         unwind-protect boundary.
781         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
782         LookupLabel and adjust to new semantics.
783         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
784         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
785         Goto.SetResolvedTarget to update target.
786         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
787         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
788         AddBreakOrigin & co.  Delay propagation until ...
789         (FlowBranchingException.Merge): ... this.
790
791         * statement.cs (Block.Resolve): Always depend on flow-branching to
792         determine unreachability.  Kill workaround that originally emitted
793         only one statement after an "unreachable" label (see infloop in
794         test-515.cs).
795
796         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
797         This is still "wrong", but anything better would probably need a
798         multi-pass algorithm.
799         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
800         usage vector.  Force current usage vector to be reachable, to
801         optimistically signify backward jumps.
802         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
803         detected.
804         (FlowBranchingLabeled.Merge): New.  If no backward jump was
805         detected, return the original salted-away usage vector instead,
806         updated with appropriate changes.  Print unreachable warning if
807         necessary.
808         * statement.cs (Block.Resolve): Don't print unreachable warning on
809         a labeled statement.
810
811 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
812
813         * driver.cs: Pass filename without path to AssemblyBuilder's
814         AddResourceFile. Fixes bug #78407.
815
816 2006-05-17  Raja R Harinath  <rharinath@novell.com>
817
818         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
819         * flowanalysis.cs (FlowBranchingLabeled): ... here.
820         (FlowBranching.MergeChild): Overwrite
821         reachability information from Labeled branchings too.
822
823 2006-05-16  Raja R Harinath  <rharinath@novell.com>
824
825         * statement.cs (Goto.Resolve): Merge jump origins here ...
826         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
827
828         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
829         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
830         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
831         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
832         here, ...
833         * statement.cs (Goto.Resolve): ... not here.
834         (Goto.Emit): Remove CS1632 check.
835
836 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
837
838         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
839         error message.
840
841 2006-05-11  Raja R Harinath  <rharinath@novell.com>
842
843         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
844         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
845         (FlowBranchingException.Label): Likewise.
846
847         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
848         given value.
849         (MyBitVector.Or): Use it to avoid losing information (Count).
850         (FlowBranching.MergeOrigins): Likewise.
851
852         * flowanalysis.cs (UsageVector.IsDirty): Remove.
853         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
854         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
855         (UsageVector.ToString): Simplify.
856         (UsageVector.MergeSiblings): Move here from ...
857         (FlowBranching.Merge): ... here.
858         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
859         not a MyBitVector.
860
861 2006-05-10  Raja R Harinath  <rharinath@novell.com>
862
863         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
864         null bitvector is treated as all-true.
865
866         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
867         (MyBitVector): Rationalize invariants.  'vector != null' implies
868         that we have our own copy of the bitvector.  Otherwise,
869         'InheritsFrom == null' implies all inherited bits are true.
870
871 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
872
873         * statement.cs (LocalInfo): Add IsConstant.
874         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
875         local variable for constants.
876
877 2006-05-09  Raja R Harinath  <rharinath@novell.com>
878
879         * flowanalysis.cs (MyBitVector.Empty): New.
880         (MyBitVector): Don't allow InheritedFrom to be null.
881         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
882         (UsageVector, FlowBranching): Update to changes.
883
884         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
885         recursion.  The 'Parent == null' condition isn't sufficient for
886         anonymous methods.
887         (FlowBranching.AddBreakOrigin): Likewise.
888         (FlowBranching.AddContinueOrigin): Likewise.
889         (FlowBranching.AddReturnOrigin): Likewise.
890         (FlowBranching.StealFinallyClauses): Likewise.
891         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
892         (FlowBranching.CheckOutParameters): Likewise.
893         (FlowBranchingToplevel): Terminate all the above recursions here.
894         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
895         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
896
897         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
898         toplevel block.
899         (FlowBranchingToplevel): New.  Empty for now.
900         (FlowBranching.MergeTopBlock): Update.
901         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
902         branching for the anonymous delegate.
903         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
904
905         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
906         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
907         information at the start of the merge.  Reorganize.
908
909 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
910
911         * class.cs (MethodData.Define): Method cannot implement interface accessor.
912
913 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
914
915         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
916         to newly introduced ctor.
917
918         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
919         message to one place.
920         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
921         global namespace.
922
923 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
924
925         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
926
927         * ecore.cs (Expression.ResolveAsConstant): Updated.
928
929         * statement.cs (ResolveMeta): Updated.
930
931 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
932
933         * cs-parser.jay: __arglist cannot be used in initializer.
934
935 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
936
937         A fix for #77879
938         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
939         private types.
940
941 2006-05-05  Raja R Harinath  <rharinath@novell.com>
942
943         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
944         (LabeledStatement): Add 'name' parameter.
945         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
946         (Block.AddLabel): Update to changes.
947         * cs-parser.jay (labeled_statement): Likewise.
948
949         * flowanalysis.cs (BranchingType.Labeled): New.
950         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
951         (FlowBranchingLabeled): New.  Does nothing for now, but will
952         eventually handle 'goto' flows.
953         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
954         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
955         that's terminated ...
956         (Block.Resolve): ... here.
957
958         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
959         (UsageVector.MergeFinallyOrigins): Likewise.
960         (FlowBranching.InTryOrCatch): Likewise.
961         (FlowBranching.AddFinallyVector): Likewise.
962         (FlowBranchingException): Update to changes.
963
964         Fix #78290
965         * statement.cs (Return.Resolve): Move error checking to ...
966         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
967         (FlowBranchingException): Handle return origins like break and
968         continue origins.
969         (FlowBranching.UsageVector.CheckOutParameters): Remove.
970
971 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
972
973         A fix for #76122
974         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
975         filter.
976
977 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
978
979         A fix for #77543
980         * class.cs (MethodData.Define): Do public accessor check only when method
981         implements an interface.
982
983 2006-05-04  Raja R Harinath  <rharinath@novell.com>
984
985         Remove special handling of 'break'
986         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
987         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
988         (UsageVector.Break): Remove.
989         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
990         reachability.
991         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
992
993         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
994         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
995
996 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
997
998         A fix for #75726
999         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
1000         be the interface member.
1001
1002 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1003
1004         A fix for #60069
1005         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
1006         for emitting small (int) values.
1007
1008 2006-05-03  Raja R Harinath  <rharinath@novell.com>
1009
1010         Fix #59427
1011         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
1012         control-flow passes through the 'finally' after merging-in all the
1013         control-flows from 'try' and the 'catch' clauses.
1014
1015         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
1016         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
1017         always true at the only non-recursive entry point.
1018         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
1019         FlowBranchingBreakable.
1020         (FlowBranchingLoop): Remove.
1021         * statement.cs (Return.DoResolve): Update to changes.
1022
1023         Fix #76471, #76665
1024         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
1025         (FlowBranching.CreateBranching): Handle it: create a
1026         FlowBranchingContinuable.
1027         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
1028         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
1029         except that it handles the 'continue' command.
1030         (FlowBranching.UsageVector.MergeOrigins): Rename from
1031         MergeBreakOrigins.
1032         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
1033         except that it overrides AddContinueOrigin.
1034         (FlowBranchingException): Override AddContinueOrigin, similar to
1035         AddBreakOrigin.
1036         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
1037         Create a new branching around the embedded statement.
1038         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
1039         control flow after the embedded statement.
1040         (Continue.Resolve): Move all error checking to AddContinueOrigin.
1041
1042         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
1043         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
1044         FlowBranchingBreakable.
1045         (FlowBranchingSwitch): Remove.
1046
1047         Fix test-503.cs
1048         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
1049         error reporting to ...
1050         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
1051         Rename from 'AddBreakVector'.  Add new location argument.  Return
1052         a bool indicating whether the 'break' crosses an unwind-protect.
1053         (FlowBranchingException.AddBreakOrigin): Add.
1054         (FlowBranchingException.Merge): Propagate 'break's to surrounding
1055         flowbranching after updating with the effects of the 'finally'
1056         clause.
1057         (FlowBranchingBreakable): New common base class for
1058         FlowBranchingLoop and FlowBranchingSwitch.
1059
1060         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
1061         embedded statement.
1062         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
1063
1064 2006-05-02  Raja R Harinath  <rharinath@novell.com>
1065
1066         * statement.cs (Do.Resolve): If the loop is infinite, set the
1067         barrier.
1068         (While.Resolve, For.Resolve): Set a barrier after the embedded
1069         statement.  There's no direct control flow that goes from the end
1070         of the embedded statement to the end of the loop.
1071         * flowanalysis.cs (FlowBranching.Infinite): Remove.
1072         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
1073         above ensure that the reachability is correctly computed.
1074
1075         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
1076         (UsageVector.MergeBreakOrigins): If the current path is
1077         unreachable, treat it as if all parameters/locals are initialized.
1078         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
1079         infinite loops before merging-in break origins.
1080
1081         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
1082         (Reachability.Reachable): Split part into ...
1083         (Reachability.Unreachable): ... this.  Simplify.
1084         (Reachability.IsUnreachable): Use 'Unreachable' instead.
1085
1086         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
1087         (Reachability.SetThrowsSometimes): Likewise.
1088         (FlowBranchingBlock.MergeTopBlock): Don't compare against
1089         TriState.Always, use corresponding property.
1090         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
1091         (Block.Resolve): Likewise.  Remove some redundant checks.
1092
1093 2006-05-02  Raja R Harinath  <harinath@gmail.com>
1094
1095         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
1096         (Reachability.Meet): Don't bother checking AlwaysThrows --
1097         barrier is always set.
1098         (FlowBranchingBlock.Merge): Likewise.
1099
1100 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
1101
1102         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
1103         defined, so it's references should also compile only for NET_2_0
1104         (as occurs in mcs version)
1105
1106 2006-05-01  Raja R Harinath  <harinath@gmail.com>
1107
1108         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
1109         checks for unreachable.
1110
1111 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
1112
1113         A fix for #77980
1114         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
1115
1116         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
1117         whether field is really assigned.
1118
1119 2006-04-30  Raja R Harinath  <harinath@gmail.com>
1120
1121         * flowanalysis.cs (Reachability): Make 4-argument constructor
1122         private.
1123         (Reachability.Meet): Rename from 'And'.  Remove static variant.
1124         (Reachability.Always): Rename from the highly misleading
1125         'Reachability.Never'.
1126         (FlowBranching.Merge): Update to changes.  Mark an impossible
1127         situation with a 'throw'.
1128         (*): Update to changes.
1129
1130 2006-04-29  Raja R Harinath  <harinath@gmail.com>
1131
1132         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
1133         Remove 'Undefined'.
1134         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
1135         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
1136         (*): Update to changes.
1137         * statement.cs: Update to changes.
1138
1139 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
1140
1141         A fix for #78049
1142         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
1143
1144 2006-04-28  Raja R Harinath  <harinath@gmail.com>
1145
1146         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
1147         dummy UsageVector.
1148
1149         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
1150         argument to two arguments: an usage-vector and a bool.  Move call
1151         to FlowBranching.Merge () ...
1152         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
1153
1154         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
1155         handling of loop and switch reachability to ...
1156         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
1157
1158 2006-04-27  Raja R Harinath  <harinath@gmail.com>
1159
1160         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
1161         handling to FlowBranchingLoop.InLoop.
1162         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
1163
1164 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
1165
1166         A fix for #78115
1167         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
1168         anonymous method is allowed from AnonymousContainer here.
1169
1170         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
1171
1172 2006-04-24  Raja R Harinath  <rharinath@novell.com>
1173
1174         Fix #78156
1175         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
1176
1177 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
1178
1179         A fix for #49011.
1180         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
1181         (DoubleConstant.Reduce): Ditto.
1182
1183 2006-04-23  Raja R Harinath  <rharinath@novell.com>
1184
1185         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
1186         Remove 'lvalue_right_side' argument.  Move parts to ...
1187         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
1188         (LocalVariable.DoResolveLValue): ... these.
1189
1190 2006-04-21  Raja R Harinath  <rharinath@novell.com>
1191
1192         Fix cs1655.cs
1193         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
1194         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
1195         (LocalVariableReference.DoResolveBase): Use it to implement new
1196         CS1655 check.
1197         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
1198         (Argument.Resolve): Simplify.  Move CS1510 check ...
1199         * ecore.cs (Expression.ResolveLValue): ... here.
1200         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
1201         (PropertyExpr.DoResolveLValue): Likewise.
1202         (FieldExpr.Report_AssignToReadonly): Likewise.
1203         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
1204         LValueMemberAccess or LValueMemberOutAccess on instance depending
1205         on it.
1206         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
1207         DoResolve as appropriate.
1208
1209 2006-04-20  Raja R Harinath  <rharinath@novell.com>
1210
1211         Fix #75800
1212         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
1213         implicit conversions on 'out' and 'ref' arguments.
1214
1215         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
1216         improve clarity.  Remove dead code.
1217
1218         Fix #66031
1219         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
1220         (Catch.Resolve): Resolve VarBlock if it exists.
1221
1222 2006-04-19  Miguel de Icaza  <miguel@novell.com>
1223
1224         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
1225         twice, this was some residual code, the enumerator was emitted
1226         properly in the two branche of if later.
1227
1228         Fixes #78031
1229         
1230         Thanks to Martin for finding the source of the problem
1231         
1232 2006-04-19  Raja R Harinath  <rharinath@novell.com>
1233
1234         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
1235         cast is never an lvalue.
1236         (Cast.DoResolve, Cast.ResolveRest): Combine.
1237         (Argument.Emit): Simplify slightly.  Move 'Expr is
1238         IMemoryLocation' check ...
1239         (Argument.Resolve): ... here.
1240         (Argument.Error_LValueRequired): Remove.  Inline into only user.
1241
1242         Simplifications.  Fix cs0191-2.cs
1243         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
1244         CS1649 and CS1651 to ...
1245         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
1246         the actual selection of the error code and message to a lookup
1247         table.  Add a dummy return value to simplify callsites.
1248         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
1249         readonly fields of other instances of the same type.  Move CS0197
1250         warning from ...
1251         * expression.cs (Argument.Resolve): ... here.  Simplify code.
1252         Ensure that ec.InRefOutArgumentResolving is only set during LValue
1253         resolution of an out or ref argument.  The code simplification
1254         above uses this invariant.
1255
1256 2006-04-18  Raja R Harinath  <rharinath@novell.com>
1257
1258         Possibly fix #77752.  Fix cs1690-[4-7].cs.
1259         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
1260         CheckMarshallByRefAccess.  Drop parameter.
1261         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
1262         warning.
1263         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
1264         InstanceExpression.
1265         * report.cs (AllWarnings): Add CS1690.
1266         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
1267         for ref access too.
1268         (LocalVariableReference.DoResolveBase): Update.
1269
1270 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1271
1272         * class.cs (MethodOrOperator): Moved common parts from method class.
1273         detect obsolete attributes.
1274         (Method.Define): Simplified as it reuses code from base.
1275         (Constructor.ValidAttributeTargets): Fixed issue found during
1276         refactoring.
1277         (Destructor.ValidAttributeTargets): Fixed issue found during
1278         refactoring.
1279         (Operator): Finished refactoring set off by #78020. Operator class is now
1280         ordinary method class.
1281
1282         * anonymous.cs: Updated.
1283
1284 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1285
1286         * class.cs (Constructor.Emit): Don't emit the attributes twice.
1287
1288 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1289
1290         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
1291         detect obsolete attributes.
1292         (Method.CreateEmitContext): Moved to MethodOrOperator.
1293
1294 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1295
1296         A fix for #78048.
1297         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
1298         customized exception to make crash detection easier.
1299         (MethodOrOperator): Started to work on new base class for methods and
1300         operators.
1301         (Method): Derives from MethodOrOperator.
1302         (Constructor.Emit): Emits its own attributes.
1303         (AbstractPropertyEventMethod.Emit): Ditto.
1304         (Operator): Derives from MethodOrOperator, will refactor fully in extra
1305         patch.
1306         (Operator.Emit): It's temporary more tricky than should be.
1307         
1308         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
1309
1310         * report.cs (InternalErrorException): Add ctor with inner exception.
1311
1312 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
1313
1314         A fix for #76744.
1315         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
1316         only not visible.
1317
1318 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
1319
1320         A fix for #77916.
1321         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
1322         array.
1323
1324 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1325
1326         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
1327         attribute is present and Guid not.
1328         (Interface.ApplyAttributeBuilder): Ditto.
1329
1330         * attribute.cs: Add error message.
1331
1332 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1333
1334         A fix for #78020.
1335
1336         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
1337         sources (it's composite) so hold them in extra array as they are used in
1338         Emit phase only. It worked in the previous versions by mistake.
1339         (Attribute.Emit): Emit attribute for more owners when exist.
1340
1341         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
1342         it has now different behaviour.
1343
1344 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
1345
1346         * constant.cs (Constant.IsDefaultInitializer): New method.
1347
1348         * class.cs: Updated.
1349
1350         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
1351         re-initialize default values. It saves KBs almost for every assembly.
1352         Thanks Zoltan for the idea.
1353         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
1354         (ArrayCreation.DoResolve): Resolve only once.
1355         (ArrayCreation.Emit): Emit static initializer only when it is faster.
1356         (ArrayCreation.GetAttributableValue): Cope with optimized values.
1357
1358 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
1359
1360         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
1361         From #77961.
1362
1363 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1364
1365         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
1366         in an embedded statement too.
1367
1368 2006-04-01  Raja R Harinath  <rharinath@novell.com>
1369
1370         Fix #77929
1371         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
1372         testing.
1373
1374         Fix #77958
1375         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
1376
1377         Fix #77962
1378         * report.cs (SymbolRelatedToPreviousError): Drop generic type
1379         arguments before checking whether a type is reflected or not.
1380
1381         Fix #77954
1382         * expression.cs (Invocation.IsApplicable): Ensure a generic method
1383         definition doesn't take part in overload resolution.
1384         (Invocation.IsParamsMethodApplicable): Likewise.
1385         (Invocation.OverloadResolve): When replacing a reflected override
1386         method with its base definition, ensure that type arguments are
1387         applied.
1388
1389 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1390
1391         A fix for #77966.
1392
1393         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
1394         was not specified.
1395
1396         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
1397
1398 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
1399
1400         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
1401         phase.
1402
1403         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
1404         LocalTemporary change.
1405
1406         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
1407         TypeContainer.
1408         (ClassOrStruct.DefineFieldInitializers): Implemented static field
1409         initializers optimization.
1410         (ClassOrStruct.TypeAttr): Moved from modifiers.
1411         (Constructor.CheckBase): Don't crash when static ctor has parameters.
1412         (FieldBase.ResolveInitializer): Resolves initializer.
1413         (FieldBase.HasDefaultInitializer): New property.
1414
1415         * cs-parser.jay: Removed message.
1416
1417         * expression.cs (CompilerGeneratedThis): New specialization.
1418
1419         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
1420
1421 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
1422
1423         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
1424
1425 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1426
1427         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
1428         be now EnumConstants only.
1429
1430 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1431
1432         * attribute.cs, driver.cs: Reset more caches.
1433
1434 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1435
1436         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
1437
1438 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1439
1440         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
1441         for easier reuse. Updated all overrides.
1442         (IntegralConstant): New base class for all integral constants.
1443         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1444         of the constant range, report custom error.
1445         (UIntConstant.Reduce): Fixed uint conversion.
1446
1447         * ecore.cs, literal.cs: Reduce updates.
1448
1449 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1450
1451         A fix for #75813.
1452
1453         * class.cs (Constructor.Define): Removed extra if for default ctors.
1454         A patch from Atsushi Enomoto.
1455
1456 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1457
1458         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1459         GetAttributableValue.
1460
1461         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1462         when required.
1463
1464         * convert.cs (ImplicitConversionRequired): Error message moved to
1465         DoubleLiteral.
1466
1467         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1468         automatic implicit conversion of an output value.
1469         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1470
1471         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1472         conversion.
1473         (TypeOf.GetAttributableValue): Add extra handling for object type.
1474
1475         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1476         special error message.
1477
1478 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1479
1480         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1481         InternalCall.
1482         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1483         compatible with MS runtime.
1484
1485 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1486
1487         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1488         attribute arguments here.
1489
1490         * class.cs (Indexer.Define): The check was moved to attribute class.
1491
1492 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1493
1494         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1495
1496 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1497
1498         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1499
1500         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1501         the blocks too.
1502
1503 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1504
1505         * doc-bootstrap.cs : fix build.
1506
1507 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1508
1509         * expression.cs (StringConcat.Append): Issue a warning when empty string
1510         is going to append.
1511
1512 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1513
1514         * assign.cs (CompoundAssign.ResolveSource): Removed.
1515
1516         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1517         clean up.
1518
1519         * class.cs (TypeContainer.FindMethods): Removed.
1520         (TypeContainer.CheckMemberUsage): Made static.
1521
1522         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1523
1524         * constant.cs (CheckRange): Removed unused type argument.
1525         (CheckUnsigned): Removed unused type argument.
1526
1527         * cs-parser.jay: Updated after MemberAccess clean up.
1528         Uses Length for empty string test.
1529
1530         * cs-tokenizer.cs: Uses Length for empty string test.
1531         (IsCastToken): Made static.
1532         (is_hex): Made static.
1533         (real_type_suffix): Made static.
1534
1535         * decl.cs (SetupCache): Made static.
1536         (OnGenerateDocComment): Removed unused ds argument.
1537
1538         * delegate.cs (VerifyDelegate): Removed unused argument.
1539
1540         * doc.cs: Uses Length for empty string test.
1541
1542         * driver.cs: Uses Length for empty string test.
1543
1544         * enum.cs (IsValidEnumType): Made static
1545
1546         * expression.cs (EnumLiftUp): Removed unused argument.
1547         (ResolveMethodGroup): Ditto.
1548         (BetterConversion): Ditto.
1549         (GetVarargsTypes): Ditto.
1550         (UpdateIndices): Ditto.
1551         (ValidateInitializers): Ditto.
1552         (MemberAccess.ctor): Ditto.
1553         (GetIndexersForType): Ditto.
1554
1555         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1556
1557         * iterators.cs: Updated after MemberAccess clean up.
1558
1559         * location.cs: Uses Length for empty string test.
1560
1561         * namespace.cs: Uses Length for empty string test.
1562
1563          * report.cs (CheckWarningCode): Made static.
1564
1565         * statement.cs (LabeledStatement): Removed unused argument.
1566
1567         * typemanager.cs (FilterNone): Removed.
1568
1569 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1570
1571         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
1572         obsolete.
1573
1574         * class.cs: Updated.
1575
1576 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1577
1578         * cs-parser.jay.cs: __arglist is not allowed for delegates.
1579
1580 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1581
1582         A fix for #77816.
1583
1584         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
1585         host container.
1586         (AnonymousMethod.ImplicitStandardConversionExists): New method.
1587         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
1588         Add more error reporting; Fixed issue with params.
1589
1590         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
1591
1592         * cs-parser.jay: AnonymousMethod requires host container.
1593
1594         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
1595
1596 2006-03-18  Raja R Harinath  <harinath@gmail.com>
1597
1598         * class.cs: Change 'TypeContainer ds' constructor argument to
1599         'DeclSpace parent'.  Some classes were missed below due to
1600         different naming convention.
1601
1602         * class.cs (MemberCore.Parent): Delete.  This makes the
1603         ParentContainer changes below enforceable by the compiler.
1604
1605         Treat pointers to enclosing declaration space as 'DeclSpace', not
1606         'TypeContainer'.
1607         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
1608         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
1609
1610         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
1611         of TypeContainer.
1612         (Block.AddThisVariable): Likewise.
1613         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
1614         (AbstractPropertyEventMethod.Emit): Likewise.
1615         (AbstractPropertyEventMethod.EmitMethod): Likewise.
1616         (GetMethod.Define, SetMethod.Define): Likewise.
1617         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
1618         (DelegateMethod.EmitMethod): Likewise.
1619
1620         Fix regression test-partial-13.cs.
1621         Rationalize use of PartialContainer.  Ensure that the partial
1622         class semantics can be tied to type-correctness, i.e., any
1623         violation will cause a compile error.
1624         * class.cs, const.cs: Access all fields that belong to class
1625         TypeContainer via ParentContainer.  Arguments of EmitContexts and
1626         Resolve()-like functions still use 'Parent'.
1627
1628         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
1629         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
1630         (PropertyMethod.CheckModifiers): Remove unused argument.
1631         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
1632         DeclSpace.
1633
1634 2006-03-28  Raja R Harinath  <rharinath@novell.com>
1635
1636         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
1637
1638 2006-03-17  Raja R Harinath  <harinath@gmail.com>
1639
1640         Make semantics of PartialContainer simpler.
1641         * decl.cs (DeclSpace.IsPartial): Remove.
1642         * class.cs (TypeContainer.IsPartial): Likewise.
1643         (TypeContainer..ctor): Set PartialContainer to point to self.
1644         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
1645         (TypeContainer.FindNestedType): Likewise.
1646         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
1647
1648 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
1649
1650         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
1651
1652 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1653
1654         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
1655         classes.
1656
1657 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1658
1659         * class.cs (Operator.Define): An error for base conversion was not
1660         reported correctly.
1661
1662 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
1663
1664         A fix for #77593, #77574.
1665
1666         * class.cs (MethodCore.CheckBase): Another if for operator.
1667
1668 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1669
1670         A fix for #77822.
1671
1672         * expression.cs (VerifyArgumentsCompat): Reverted to double error
1673         reporting, it's more tricky than I thought.
1674
1675 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
1676
1677         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
1678         were not resolved
1679
1680         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
1681         (DelegateCreation.ImplicitStandardConversionExists): New method for just
1682         conversion test.
1683         
1684         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
1685         not needed.
1686
1687 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
1688
1689         A fix for #77353.
1690
1691         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
1692         (Event.Define): ditto
1693         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
1694
1695         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
1696         Removed redundant code and set NewSlot for Invoke method too.
1697
1698         * parameter.cs (Parameters.ctor): Add custom, type ctor.
1699         (Parameters.MergeGenerated): New method. Use this method when you merge
1700         compiler generated argument with user arguments.
1701
1702 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
1703
1704         * attribute.cs (ResolveAsTypeTerminal): Removed.
1705
1706         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
1707         specialization for predefined types; 30% speed up.
1708         Finally placed obsolete check to right place.
1709         (Expression.ResolveType): Removed.
1710
1711         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
1712         Updated after ResolveType was removed.
1713
1714         * expression.cs (Cast.ctor): Check void cast.
1715         (Binary.ResolveAsTypeTerminal): Is never type.
1716         (Conditional.ResolveAsTypeTerminal): Is never type.
1717
1718         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
1719
1720 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1721
1722         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
1723
1724 2006-03-23  Martin Baulig  <martin@ximian.com>
1725
1726         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
1727         type check if either of the types is an open generic type.
1728
1729 2006-03-23  Martin Baulig  <martin@ximian.com>
1730
1731         * convert.cs
1732         (Convert.ExplicitTypeParameterConversion): New method; implement
1733         explicit type parameter conversions.
1734
1735 2006-03-23  Martin Baulig  <martin@ximian.com>
1736
1737         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
1738         blindly allow all conversions if we do not have any constraints.
1739
1740 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
1741
1742         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
1743         these two separated members to simplify the code.
1744         (Attribute.Resolve): Refactored to use new fields and methods.
1745         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
1746         implemented obsolete attribute checking.
1747         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
1748         implemented obsolete checking again. It look line never ending quest ;-)
1749         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
1750
1751         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
1752
1753         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
1754
1755         *class.cs (Property.Define): Add RegisterProperty call.
1756
1757         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
1758         argument groups (only 2).
1759
1760         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
1761         encoding expression to arguments.
1762         (Expression.ExprClassToResolveFlags): Just turned to property.
1763
1764         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
1765         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
1766         optimized as well as implemented support for zero-length attributes.
1767
1768         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
1769         Add caching of PropertyInfo's.
1770
1771 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1772
1773         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
1774         error multiple times.
1775
1776 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1777
1778         New partial class implementation.
1779         A fix for #77027, #77029, #77403
1780
1781         * attribute.cs (Attributable): Made attributes protected.
1782
1783         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
1784         the replacements of ClassPart and PartialContainer.
1785         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
1786         (TypeContainer.AddInterface): Ditto.
1787         (TypeContainer.AddPartial): The main method for partial classes. It checks
1788         for errors and merges ModFlags and attributes. At the end class is added to
1789         partial_parts list.
1790         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
1791         required here.
1792         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
1793         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
1794         from the rest of partial classes.
1795         (TypeContainer.GetClassBases): Simplified.
1796         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
1797         DefineType.
1798         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
1799         (TypeContainer.HasExplicitLayout): Uses Flags now.
1800         (PartialContainer): Removed.
1801         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
1802         (StaticClass): Was merged with Class.
1803         (Class.GetClassBases): class and static class bases are verified here.
1804         (Class.TypeAttr): Added static attributes when class is static.
1805         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
1806         (MemberBase): In some cases we need to call parent container for partial
1807         class. It should be eliminated but it's not easy now.
1808
1809         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
1810
1811         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
1812         partial classed to accumulate class comments.
1813         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
1814
1815         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
1816
1817         * driver.cs (MainDriver): Tree.GetDecl was removed.
1818
1819         * modifiers.cs (Modifiers): Add partial modifier.
1820
1821         * tree.cs (Tree.decl): Removed.
1822         (RootTypes): Started to use this class more often for root types
1823         specializations.
1824
1825 2006-03-23  Raja R Harinath  <rharinath@novell.com>
1826
1827         * generic.cs (TypeParameter.UpdateConstraints): Update
1828         'constraints' if null.
1829
1830 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1831
1832         A fix for #77615
1833
1834         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
1835         external interface does not have an attribute.
1836
1837 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1838
1839         Another prerequisites for new partial classs implementation.
1840         
1841         * attribute.cs (Attribute.Equal): Implemented.
1842         (Attribute.Emit): Changed as attributes can be applied more than twice.
1843         (Attributes.Emit): Check for duplicate attributes here.
1844
1845         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
1846         as a parameter, clean-up.
1847
1848 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1849
1850         A fix for #77485
1851
1852         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
1853         contains obsolete attribute check which can in some cases look for base
1854         type of current class which is not initialized yet.
1855         (TypeContainer.BaseType): Replacement of ptype.
1856
1857         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
1858
1859 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1860
1861         First of prerequisites for new partial classs implemention.
1862         
1863         * attribute.cs (Attributable): Extended by ResolveContext;
1864         Attributes finally have correct context for resolving in all cases.
1865         (AttachTo): Attribute owner is assigned here.
1866
1867         * codegen.cs (IResolveContext): Introduce new interface to hold
1868         all information needed in resolving phase.
1869         (EmitContext): Implements IResolveContext; more clean-up needed here.
1870         
1871         * decl.cs (MemberCore): Implemented IResolveContext.
1872
1873         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
1874         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
1875         parameter.cs, statement.cs, tree.cs, typemanager.cs:
1876         Refactored to use new IResolveContext instead of EmitContext; cleanup
1877
1878 2006-03-22  Raja R Harinath  <rharinath@novell.com>
1879
1880         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
1881         mcs to keep code differences small.
1882         * attribute.cs (Attribute.GetParameterDefaultValue): New.
1883         * typemanager.cs (parameter_default_value_attribute_type): New.
1884         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
1885         CS1908 check.
1886
1887 2006-03-22  Martin Baulig  <martin@ximian.com>
1888
1889         * generic.cs
1890         (Nullable.NullableLiteral): Derive from `NullLiteral'.
1891
1892         * convert.cs
1893         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
1894         instead of the normal `NullLiteral'.
1895
1896 2006-03-21  Martin Baulig  <martin@ximian.com>
1897
1898         Fix #77583.
1899         * generic.cs (TypeManager.InferType): If `pt' is a generic
1900         parameter, don't check whether `pt == at'.
1901
1902 2006-03-20  Raja R Harinath  <rharinath@novell.com>
1903
1904         Fix #77852
1905         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
1906         (TypeParameter.Resolve): Update to change.
1907         (ConstraintChecker.CheckConstraints): Resolve type-argument
1908         constraints before use.
1909
1910 2006-03-16  Martin Baulig  <martin@ximian.com>
1911
1912         * generic.cs
1913         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
1914         and don't have any instance constructors, also lookup in the base class.
1915         (TypeManager.IsNullableValueType): New public method.
1916
1917         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
1918         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
1919         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
1920
1921         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
1922         instead of just TypeManager.IsNullableType() to determine whether
1923         a lifted operator exists.
1924         (UnaryMutator.DoResolve): Likewise.
1925         (Conditional.DoResolve): Likewise.
1926         (Binary.DoResolve): A lifted operator only exists if both operands
1927         are valuetypes and at least one of them is a nullable type.
1928
1929 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
1930
1931         * iterator.cs : yield break is allowed in try statement which has
1932           catch clauses. Fixed bug #77767.
1933
1934 2006-03-12  Martin Baulig  <martin@ximian.com>
1935
1936         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
1937         private IsSignatureEqual() to compare types; see the comment in
1938         that method; fixes #77674.
1939
1940 2006-03-10  Raja R Harinath  <rharinath@novell.com>
1941
1942         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
1943         (Expression.ResolveAsTypeTerminal): Likewise.
1944         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
1945         * expression.cs, generic.cs, iterators.cs: Likewise.
1946         * parameter.cs, statement.cs, typemanager.cs: Likewise.
1947
1948 2006-03-09  Martin Baulig  <martin@ximian.com>
1949
1950         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
1951         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
1952
1953 2006-03-09  Martin Baulig  <martin@ximian.com>
1954
1955         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
1956         `prepared' flag is set.
1957
1958         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
1959         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
1960         issues; see gtest-254.cs.
1961
1962 2006-03-07  Martin Baulig  <martin@ximian.com>
1963
1964         * generic.cs (TypeManager.InferType): Allow infering
1965         `IEnumerable<T>' with an array of T; see gtest-251.cs.
1966
1967 2006-03-06  Martin Baulig  <martin@ximian.com>
1968
1969         * generic.cs
1970         (TypeManager.InferType): Fix gtest-250.cs.
1971
1972         * typemanager.cs
1973         (TypeManager.IsSubclassOf): Also check the base class.
1974
1975         * expression.cs
1976         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
1977         fixes gtest-249.cs.
1978
1979 2006-03-01  Raja R Harinath  <rharinath@novell.com>
1980
1981         Fix #77679.
1982         * expression.cs (ParameterReference.DoResolveBase): Change return
1983         type to bool.
1984         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
1985         Update.
1986
1987         Fix #77628.
1988         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
1989
1990         Fix #77642.
1991         * typemanager.cs (GetFullNameSignature): Don't nullref on
1992         protected accessors.
1993
1994 2006-02-16  Martin Baulig  <martin@ximian.com>
1995
1996         * generic.cs
1997         (TypeManager.GetGenericFieldDefinition): New public method; use it
1998         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
1999
2000 2006-02-14  Martin Baulig  <martin@ximian.com>
2001
2002         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
2003
2004 2006-02-14  Martin Baulig  <martin@ximian.com>
2005
2006         * generic.cs
2007         (TypeManager.DropGenericMethodArguments): New public method; don't
2008         use GetGenericMethodDefinition() on something which is not a
2009         generic method.
2010
2011 2006-02-14  Martin Baulig  <martin@ximian.com>
2012
2013         * generic.cs
2014         (ConstraintChecker.CheckConstraints): If a type parameter has the
2015         `struct' constraint, the type must be a non-nullable valuetype.
2016
2017 2006-02-10  Martin Baulig  <martin@ximian.com>
2018
2019         * typemanager.cs
2020         (TypeManager.IsOverride): Make this work for instantiated methods
2021         in a generic class; fixes #77509.
2022         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
2023         rather than calling it directly; fixes #77488.  
2024
2025 2006-02-08  Martin Baulig  <martin@ximian.com>
2026
2027         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
2028         reporting into CheckConstraint() so we can use the correctly
2029         instantiated type.
2030
2031 2006-02-08  Martin Baulig  <martin@ximian.com>
2032
2033         * expression.cs (BaseAccess): Add support for generic methods.
2034
2035         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
2036         the new MethodGroupExpr.
2037
2038 2006-02-07  Martin Baulig  <martin@ximian.com>
2039
2040         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
2041         also reference types; fixes #77483.
2042
2043 2006-02-07  Martin Baulig  <martin@ximian.com>
2044
2045         * generic.cs
2046         (TypeManager.IsGenericMethod): We now return whether something is
2047         an instantiated generic method (and not a generic method def).
2048         (TypeManager.IsGenericMethodDefinition): New public method.
2049
2050         * typemanager.cs
2051         (TypeManager.CSharpSignature): Only include type arguments for
2052         "real" generic methods, not for any instantiated method.
2053         (TypeManager.GetMethodName): Likewise, but also allow generic
2054         method definitions here.
2055
2056 2006-02-06  Miguel de Icaza  <miguel@novell.com>
2057
2058         * codegen.cs (EmitScopeInitFromBlock): check here the
2059         capture_context, there is no need to make two calls to the
2060         EmitContext. 
2061
2062         * anonymous.cs: Add some debugging messages that might help me
2063         track other instances of this problem in the future (the
2064         regression of test 467).
2065
2066         * cs-parser.jay: track the variable block, as we need to initalize
2067         any captured variables declared in this block for the "catch"
2068         portion of the "Try" statement.
2069
2070         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
2071         scope initialization for captured variables. 
2072
2073         Also, move the emit for the variables after the block location has
2074         been marked.
2075
2076 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
2077
2078        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
2079         
2080 2006-02-06  Martin Baulig  <martin@ximian.com>
2081
2082         * class.cs (TypeContainer.DefineType): If we're a struct, pass
2083         `TypeManager.value_type' as parent type to
2084         ModuleBuilder.DefineType().  Fixes #77358.      
2085
2086 2006-02-02  Miguel de Icaza  <miguel@novell.com>
2087
2088         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
2089         commit yesterday, the initialization for the roots is necessary.
2090         What is not necessary is the scope activation.
2091
2092 2006-02-02  Raja R Harinath  <rharinath@novell.com>
2093
2094         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
2095         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
2096         CS0206 checks.
2097         (Argument.Resolve): Remove CS0206 checks.
2098
2099 2006-02-01  Miguel de Icaza  <miguel@novell.com>
2100
2101         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
2102         scopes for all the roots, the scopes will now be emitted when the
2103         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
2104
2105         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
2106         code.  This reduces a lot of existing cruft.
2107         
2108         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
2109         that the ScopeInfo is generated as we enter the scope, not at the
2110         time of use, which is what we used to do before.
2111
2112         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
2113         every time a Block is about to be emitted if we have a
2114         CaptureContext. 
2115
2116 2006-02-01  Raja R Harinath  <rharinath@novell.com>
2117
2118         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
2119         attribute for mscorlib too.
2120
2121         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
2122         (Reset): Update.
2123         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
2124
2125         * typemanager.cs (cons_param_array_attribute): Make private.
2126         (Reset): Set it to null.
2127         (InitCoreHelpers): Don't initialize it.
2128         (ConsParamArrayAttribute): New.  Initialize it as needed.
2129         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
2130
2131 2006-01-31  Miguel de Icaza  <miguel@novell.com>
2132
2133         * expression.cs: There might be errors reported during the
2134         selection of applicable methods.  If there are errors, do not
2135         continue execution as it will lead the compiler to crash.
2136
2137 2006-01-30  Miguel de Icaza  <miguel@novell.com>
2138
2139         * expression.cs: Member access is not allowed on anonymous
2140         methods.  Fixes #77402.
2141
2142 2006-01-30  Raja R Harinath  <rharinath@novell.com>
2143
2144         Fix #77401
2145         * cs-parser.jay (VariableDeclaration): Don't set
2146         current_array_type to null.
2147         (field_declaration, event_declaration, declaration_statement):
2148         Set it to null here.
2149
2150 2006-01-29  Raja R Harinath  <harinath@gmail.com>
2151
2152         Fix part of #77397
2153         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
2154
2155 2006-01-28  Raja R Harinath  <harinath@gmail.com>
2156
2157         * typemanager.cs (GenericParameterPosition): New.
2158         * doc.cs: Use it.
2159
2160 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
2161
2162         * doc.cs : To process "include" elements, first we should create
2163           another list than XmlNodeList, because it could result in node
2164           removal, which could result in that the XmlNodeList gives up
2165           yielding next node.
2166
2167 2006-01-25  Miguel de Icaza  <miguel@novell.com>
2168
2169         * expression.cs: Introduce an error report that we were not
2170         catching before.   Gonzalo ran into it.
2171
2172 2006-01-23  Miguel de Icaza  <miguel@novell.com>
2173
2174         A fix for bug: #76957
2175         
2176         * iterators.cs (MoveNextMethod.CreateMethodHost): call
2177         ComputeMethodHost before creating the method, this is a new
2178         requirement. 
2179
2180         * anonymous.cs (AnonymousContainer): Now we track all the scopes
2181         that this method references (RegisterScope).  The actual scope
2182         where the method is hosted is computed with the ComputeMethodHost
2183         before we create the method.
2184
2185         Moved the Deepest routine here.
2186
2187         (AnonymousContainer.ComputeMethodHost): New routine used to
2188         compute the proper ScopeInfo that will host the anonymous method.
2189
2190         (ScopeInfo): Deal with multiple roots.  The problem was that we
2191         did not have a unique root where all ScopeInfos could be hanged
2192         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
2193         of roots.  
2194
2195         Remove AdjustMethodScope which is now computed at the end.  Remove
2196         LinkScope which did a partial link, instead link all ScopeInfos
2197         before code generation from the new "LinkScopes" routine. 
2198
2199         Simplify all the Add* routines as they no longer need to maintain
2200         the tree, they just need to record that they are using variables
2201         from a ScopeInfo.
2202
2203         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
2204         routines to produce the forest of ScopeInfo trees.
2205
2206         * class.cs (TypeContainer.AppendMethod): This is just like
2207         AddMethod, but ensures that an interface implementation method
2208         (IEnumerable.XXX) is not inserted at the beginning of the queue of
2209         methods, but at the end.
2210
2211         We use this functionality to ensure that the generated MoveNext
2212         method in the iterator class is resolved/emitted before the
2213         enumerator methods created.   
2214
2215         This is required because the MoveNext method computes the right
2216         ScopeInfo for the method.  And the other methods will eventually
2217         need to resolve and fetch information computed from the anonymous
2218         method. 
2219
2220         
2221 2006-01-23  Raja R Harinath  <rharinath@novell.com>
2222
2223         Improve implementation of section 14.4.2.2 (Better function member).
2224         * expression.cs (Invocation.MoreSpecific): Compare all type
2225         arguments before deciding if one type is more specific than
2226         another.  Handle array types too.  Return the more specific type.
2227         (Invocation.BetterFunction): Add more tie-breaking rules from
2228         section 14.4.2.2.  Perform "more specific" check after
2229         other tie-breaking rules.  Compare all parameter types before
2230         choosing the "more specific" method.
2231
2232 2006-01-21  Raja R Harinath  <harinath@gmail.com>
2233             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
2234
2235         Fix rest of #76995.
2236         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
2237         the 'aliases' hash.
2238         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
2239         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
2240
2241 2006-01-18  Martin Baulig  <martin@ximian.com>
2242
2243         * class.cs (TypeContainer.AddToMemberContainer): Use
2244         `symbol.MemberName.MethodName' instead of just `symbol.Name';
2245         fixes #77124.
2246
2247 2006-01-18  Martin Baulig  <martin@ximian.com>
2248
2249         Fix #76417: a generic class may now have methods which may unify
2250         for some type parameter substitutions.
2251
2252         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
2253         for methods which may unify anymore.
2254
2255         * expression.cs (Invocation.MoreSpecific): New private static
2256         method; checks whether one method is more specific than another
2257         according to 14.4.2.2 of the spec.
2258         (Invocation.BetterFunction): Implement the tie-breaking rules from
2259         14.4.2.2 of the spec: if two methods unify for some type parameter
2260         substitution, we need to pick the more specific one.
2261
2262 2006-01-18  Raja R Harinath  <rharinath@novell.com>
2263
2264         Fix #76656, cs0231-2.cs.
2265         * cs-parser.jay (formal_parameter_list): Make error case catch
2266         more issues.
2267         (parenthesized_expression_0): Add CS1026 check.
2268         (invocation_expression): Remove unused { $$ = lexer.Location }.
2269
2270 2006-01-17  Raja R Harinath  <rharinath@novell.com>
2271
2272         Fix #76824.
2273         * cs-parser.jay (statement_expression): Don't list out the
2274         individual statement-expressions.  Convert syntax error into
2275         CS0201 check.
2276
2277 2006-01-16  Raja R Harinath  <rharinath@novell.com>
2278
2279         Fix #76874.
2280         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
2281         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
2282         CheckIntermediateModification.
2283         (FieldExpr.DoResolve): Add new two-argument version that
2284         allows us to resolve the InstanceExpression as an lvalue.
2285         The one-argument variant is now just a wrapper.
2286         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
2287         Resolve the lhs as an lvalue if the it has a value type.
2288         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
2289         from Assign.DoResolve.
2290         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
2291         resolved as an lvalue.
2292         (PropertyExpr.DoResolve): Update.
2293         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
2294         has a value type.  Move CS1612 check here from
2295         CheckIntermediateModification.
2296         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
2297         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
2298         'right_side' of a ResolveLValue on an 'out' argument.
2299         (EmptyExpression.LValueMemberAccess): New.  Used as the
2300         'right_side' of a propagated ResolveLValue on a value type.
2301         (LocalVariableReference.DoResolveBase): Recognize
2302         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
2303         Add CS1654 check.
2304         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
2305         EmptyExpression.Null.
2306
2307 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
2308
2309         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
2310           Type.IsGenericParameter(). Fixed bug #77183.
2311         * doc.cs : it is now identical to doc.cs in mcs.
2312
2313 2006-01-16  Martin Baulig  <martin@ximian.com>
2314
2315         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
2316
2317 2006-01-16  Martin Baulig  <martin@ximian.com>
2318
2319         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
2320         ctors; fixes #77250.
2321
2322 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2323
2324         This fixes the problem where we used ldfld instead of ldflda to
2325         load the "THIS" pointer on captured parameters, when THIS is a
2326         value type.  See bug #77205.
2327         
2328         * iterators.cs (CapturedThisReference.Emit): Pass false to
2329         EmitThis (we do not need the address).
2330
2331         * codegen.cs (EmitThis): it needs to know whether we need the
2332         address of `this' or not.  This is used by value types.  
2333
2334         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
2335         every other call passes false.
2336
2337 2006-01-12  Raja R Harinath  <rharinath@novell.com>
2338
2339         Fix #77221.
2340         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
2341         GetOverride.
2342         * expression.cs (Invocation.OverloadResolve): Update.
2343         (Invocation.DoResolve): Avoid double resolution of invocation.
2344
2345 2006-01-11  Raja R Harinath  <rharinath@novell.com>
2346
2347         Fix #77180.
2348         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
2349         unary negation of floating point types as 0-expr; negation cannot
2350         overflow in floating point types.
2351
2352         Fix #77204.
2353         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
2354         on operands of 'void' type.
2355
2356         Fix #77200.
2357         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
2358         and ExclusiveOr for boolean constants too.
2359
2360 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
2361
2362         * expression.cs: Fix Console.WriteLine ((this = x).foo);
2363
2364 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2365
2366         * cs-tokenizer.cs (Position): New class used to save and restore
2367         the position state in the tokenizer.  Before this patch the save
2368         and restore was not complete enough so the line and columns would
2369         start to drift and the debugger and stack traces will get the
2370         wrong data.
2371
2372 2006-01-10  Martin Baulig  <martin@ximian.com>
2373
2374         * generic.cs
2375         (TypeParameter.InflateConstraints): New public method.
2376
2377         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
2378         constraints; fixes #77042.
2379
2380 2006-01-10  Martin Baulig  <martin@ximian.com>
2381
2382         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
2383         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
2384         #77061. 
2385
2386 2006-01-09  Raja R Harinath  <rharinath@novell.com>
2387
2388         Fix #75636.
2389         * expression.cs (Invocation.OverloadResolve): Replace reflected
2390         override methods with their base virtual methods, rather than
2391         skipping over them.
2392         * typemanager.cs (TypeManager.GetOverride): New.
2393
2394 2005-12-21  Miguel de Icaza  <miguel@novell.com>
2395
2396         * driver.cs: Report the case of no source files and no -out:
2397         argument provided.
2398
2399 2005-12-20  Raja R Harinath  <rharinath@novell.com>
2400
2401         Fix #77035.
2402         * expression.cs (ComposedCast.GetSignatureForError): Define.
2403
2404 2006-01-05  Jb Evain  <jbevain@gmail.com>
2405
2406         * class.cs (Property.Define, Indexer.Define): do not tag the
2407         properties as SpecialName | RTSpecialName.
2408
2409 2006-01-04  Miguel de Icaza  <miguel@novell.com>
2410
2411         * class.cs (MethodCore.IsDuplicateImplementation): This method was
2412         doing a low-level comparission of parameter types.  It was lacking
2413         a check for __argslist. 
2414
2415 2005-12-30  Miguel de Icaza  <miguel@novell.com>
2416
2417         * expression.cs (ParameterReference.DoResolveBase): Allow
2418         reference parameters if they are local to this block. 
2419
2420         This allows the ref and out parameters of a delegate to be used in
2421         an anonymous method, for example:
2422
2423         delegate void set (out int x);
2424
2425         set s = delegate (out int x){
2426                 x = 0;
2427         };
2428
2429         This is used by functionality introduced late in the C# language.
2430         
2431         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
2432         method that take ref and out parameters. 
2433
2434         Fixes #77119 which was a late change in the spec.
2435
2436 2005-12-23  Miguel de Icaza  <miguel@novell.com>
2437
2438         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
2439         parent if its the same scope.  Fixes #77060.
2440
2441 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
2442
2443         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2444
2445 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2446
2447         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2448         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2449         that doesn't contain the full public key. This is a update of the
2450         friend assemblies in .Net 2.0 release.
2451         
2452 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2453
2454         Fix #76995
2455
2456         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2457         ListDictionary, to contain the ExternAliasEntry entries (in
2458         addition to the NamespaceEntry.aliases hashtable). This field is
2459         shared between the original entry and its doppelganger (bodyless 
2460         copy of it).
2461         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2462         extern_aliases field.
2463         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2464         lookup in extern_aliases.
2465
2466 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2467
2468         Fix #77006.
2469         * class.cs (TypeContainer.Mark_HasEquals): New.
2470         (TypeContainer.Mark_HasGetHashCode): New.
2471         (ClassPart): Override them.
2472         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2473
2474         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2475         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2476         DeclSpace.
2477
2478         Fix #77008.
2479         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2480         'parent' argument to the base constructor.
2481
2482         Remove all mention of TypeContainer from decl.cs.
2483         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2484         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2485         (DeclSpace.DeclSpace): Likewise.
2486         (DeclSpace.DefineMembers): Remove unused argument.
2487         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2488         debugging check -- we don't care if the debug code throws an
2489         InvalidCastException instead of an InternalErrorException.
2490         * class.cs (TypeContainer.DefineMembers): Update to changes.
2491         (TypeContainer.DoDefineMembers): Likewise.
2492         (TypeContainer.GetMethods): Likewise.
2493         (PropertyMember.Define): Likewise.
2494         (MemberBase.Parent): New property that forwards to
2495         MemberCore.Parent, but ensures that we get a TypeContainer.
2496         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2497         (RootContext.PopulateTypes): Likewise.  Remove special case code
2498         for !RootContext.StdLib: DefineMembers is idempotent.
2499
2500 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2501
2502         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2503
2504 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2505
2506         * doc.cs : The search for referenced namespace was insufficient to
2507           get global one as it used to do. Fixed bug #76965.
2508
2509 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2510
2511         * doc.cs : check name in cref in the last phase that whether it is
2512           namespace or not.
2513
2514 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2515
2516         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2517           Mono.C5.
2518
2519 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2520
2521         * doc.cs : so it turned out that we cannot skip override check for 
2522           interface members. Fixed bug #76954.
2523
2524 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2525
2526         * cs-tokenizer.cs : fixed bug #75984:
2527           - #warning and #error should not be handled when the source line
2528             is disabled.
2529           - #line is not checked strictly when the source line is disabled.
2530           - #define and #undef is on the other hand checked strictly at any
2531             state.
2532
2533 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2534
2535         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2536           CS1027 report.
2537
2538 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2539
2540         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2541
2542         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2543         nested types.
2544
2545 2005-12-14  Martin Baulig  <martin@ximian.com>
2546
2547         * typemanager.cs (TypeManager.GetFullName): Make this public;
2548         `Type.Fullname' now never returns null.
2549
2550         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2551         explicit interface implementations; we're now using the same
2552         naming convention than csc does.
2553
2554 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2555
2556         * convert.cs (ExplicitConversionCore): Check the return value from
2557         ExplicitConversionCore which can return null on failure.  Fixes #76914
2558
2559 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2560
2561         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2562         instead of IsGenericInstance.
2563         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2564         code that's now covered by the more general test.
2565         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2566
2567         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2568         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2569         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2570         * generic.cs, report.cs, typemanager.cs: Likewise.
2571
2572 2005-12-08  Martin Baulig  <martin@ximian.com>
2573
2574         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
2575
2576         * typemanager.cs (TypeManager.CSharpSignature): Include type
2577         arguments in the signature of a generic method.
2578
2579 2005-12-07  Martin Baulig  <martin@ximian.com>
2580
2581         Add support for custom attributes on type parameters.
2582
2583         * cs-parser.jay (type_arguments): Added `opt_attributes'.
2584
2585         * generic.cs (TypeParameterName): New public class; we use this
2586         instead of a `string' to store the name of a type parameter, so we
2587         can also have `Attributes'.
2588         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
2589         array instead of a `string[]' array.
2590         (TypeParameter.ctor): We now also take an `Attributes' argument.
2591         (TypeParameter.EmitAttributes): New public method; emit our
2592         `OptAttributes' here.
2593         (GenericMethod.EmitAttributes): New public method; emit the custom
2594         attributes on all our type parameters.
2595
2596         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
2597         our type parameters.
2598         (MethodData.Define): If we're a generic method, call
2599         EmitAttributes() on it.
2600
2601 2005-12-07  Martin Baulig  <martin@ximian.com>
2602
2603         * generic.cs
2604         (ConstraintChecker): New public abstract class; move the
2605         constraint checking here from `ConstructedType' and also do
2606         constraint checking for generic methods here.
2607
2608         * expression.cs (Invocation.OverloadResolve): Use
2609         ConstraintChecker.CheckConstraints() if we resolved to a generic
2610         method.  Fix #76806.
2611
2612 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2613
2614         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
2615
2616         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
2617         event initializers.
2618         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
2619         (FieldBase.Initializer): Initializer is now optional.
2620         (EventField.Define): Only event field can have initializer.
2621
2622         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
2623
2624         * const.cs (Const): Reuse initializer.
2625
2626         * cs-parser.jay: Updated after FieldBase changes.
2627         Added current_array_type to simplify array initializers.
2628
2629         * ecore.cs (NullCast.IsDefaultValue): Implemented.
2630
2631         * expression.cs, iterators.cs: Updated.
2632
2633         * namespace.cs (NamespaceEntry): Made UsingFound private.
2634
2635 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2636
2637         * parameterCollection.cs: Obsolete, removed.
2638         * parser.cs: Obsolete, removed.
2639
2640 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2641
2642         Fix #76849.
2643         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
2644
2645         * enum.cs (Enum.Define): Set obsolete context here.
2646
2647 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2648
2649         * doc.cs :
2650           - FindDocumentedMember() now expects 1) paramList as null
2651             when "we don't have to check the number of parameters" and
2652             2) Type.EmptyTypes when "there is no arguments".
2653           - Introduced FoundMember struct to hold the exact type which was
2654             used to find the documented member (the above change broke
2655             test-xml-044; it might be better just to use DeclaringType than
2656             what MS does, like this change does, but it depends on usage.)
2657
2658 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2659
2660         * doc.cs : documented member might be from DeclaringType for nested
2661           types. Fixed bug #76782.
2662
2663 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
2664
2665         * anonymous.cs: Have the param code handle leaving copies on the
2666         stack etc. Allows anonymous params to take part in the assignment
2667         code (++, +=, etc). Fixes bug #76550
2668
2669         * expression.cs: Handle the prepare_for_load/leave_copy by passing
2670         it down to the anon code.
2671
2672         * iterators.cs: Use dummy var here
2673
2674         * codegen.cs: Handle new vars
2675
2676 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2677
2678         Fix #76849.
2679         * class.cs (MethodData.Define): Set proper Obsolete context.
2680
2681         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
2682         obsolete context.
2683         (FieldExpr.DoResolve): Ditto.
2684
2685 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2686
2687         Fix #76849.
2688         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
2689         parent is not obsolete.
2690
2691 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
2692
2693         * doc.cs : (FindDocumentedMember) find parameterless members first
2694           and get CS0419 in the early stage. Fixed first case of bug #76727.
2695
2696 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
2697
2698         Fix #76859.
2699         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
2700         no error was reported.
2701
2702         *expression.cs (Binary.DoResolve): left can be null.
2703
2704 2005-12-06  Raja R Harinath  <rharinath@novell.com>
2705
2706         * class.cs (MethodCore.CheckGenericOverride): Delete unused
2707         abstract method and all overrides.
2708         * support.cs (ParameterData.GenericConstraints): Delete.
2709         (ReflectionParameters.type_params): Delete.
2710         (ReflectionParameters.ReflectionParameters): Make private.
2711         (ReflectionParameters.GetConstaints): New factory method.
2712         * generic.cs (TypeParameterDefineType): Use it.
2713         (TypeManager.GetTypeParameterConstraints): Likewise.
2714
2715 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
2716
2717         Fix #76783.
2718         * class.cs (MethodData.Emit): Parameters should be labeled first.
2719
2720 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
2721
2722         Fix #76761.
2723         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
2724
2725 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
2726
2727         * attribute.cs (AreParametersCompliant): Moved to Parameter.
2728
2729         * class.cs (MethodCore): Parameter clean up.
2730         (IMethodData): Added ParameterInfo.
2731         (MethodData): Parameter clean up.
2732         (Indexer.Define): Parameter clean up.
2733
2734         * anonymous.cs,
2735         * codegen.cs,
2736         * cs-parser.jay,
2737         * decl.cs,
2738         * doc.cs,
2739         * ecore.cs,
2740         * flowanalysis.cs,
2741         * iterators.cs,
2742         * pending.cs,
2743         * statement.cs,
2744         * typemanager.cs: Parameter clean up.
2745
2746         * delegate.cs (Define): Get rid of duplicated code.
2747
2748         * expression.cs (ParameterReference): Removed useless parameters
2749         and simplified.
2750         (Invocation): Ditto.
2751
2752         * parameter.cs (ParamsParameter): New class, params specialization.
2753         (ArglistParameter): Attemp to separate arglist.
2754         (Parameter): Refactored to be reusable and faster.
2755         (Parameter.Modifier): Made understandable.
2756         (Parameters): Changed to be used as a class for `this' assembly
2757         parameters. Refactored to use new specialized classes.
2758
2759         * support.cs (ParameterData): Added Types property.
2760         (InternalParameters): Deleted.
2761
2762 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2763
2764         * doc.cs : the previous patch does not actually fix the bug.
2765           PropertyInfo override check is now implemented and really fixed it.
2766         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
2767
2768 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2769
2770         * doc.cs : apply "override filter" also to properties.
2771           Fixed bug #76730.
2772
2773 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2774
2775         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
2776           no need to check overrides. For classes, omit those results from 
2777           interfaces since they must exist in the class. Fixed bug #76726.
2778
2779 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2780
2781         * typemanager.cs : (GetFullNameSignature) differentiate indexers
2782           with different parameters. Fixed the second problem in #76685.
2783
2784 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2785
2786         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
2787           get expected 'protected' access in CheckValidFamilyAccess()).
2788           Fixed bug #76692.
2789
2790 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2791
2792         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
2793           Fixed bug #76705.  CS1569 was incorrectly commented out.
2794
2795 2005-11-23  Martin Baulig  <martin@ximian.com>
2796
2797         * generic.cs (Constraints.Define): Removed.
2798         (TypeParameter.DefineConstraints): Removed.
2799         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
2800         on the GenericTypeParameterBuilder here.
2801
2802 2005-11-23  Martin Baulig  <martin@ximian.com>
2803
2804         * typemanager.cs (TypeManager.GetProperty): Make this public.
2805
2806         * generic.cs (Nullable.NullableInfo.ctor): Use
2807         TypeManager.GetProperty() rather than using reflection directly.
2808
2809 2005-11-17  Martin Baulig  <martin@ximian.com>
2810
2811         * expression.cs (Indexers.GetIndexersForType): Added support for
2812         generic parameters; fixes #76587.
2813
2814 2005-11-17  Martin Baulig  <martin@ximian.com>
2815
2816         * anonymous.cs
2817         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
2818         inherit the scope from our parent.  Fixes #76653.
2819
2820 2005-11-15  Martin Baulig  <martin@ximian.com>
2821
2822         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
2823         instead of `ScopeTypeBuilder' to refer to the "current" type.
2824         (AnonymousMethod.CreateScopeType): Correctly create the helper
2825         class if we're inside a generic type definition.
2826
2827 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2828
2829         * doc.cs : use Invocation.IsOverride() to do real override check.
2830         * expression.cs : made Invocation.IsOverride() internal.
2831
2832 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2833
2834         * doc.cs : use TypeManager.FindMembers() instead of (possible)
2835           TypeBuilder.FindMembers() and filter overriden base members out.
2836           Fixed bug #76990.
2837
2838 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2839
2840         * doc.cs : ref/out parameters are represented as '@' (instead of
2841           '&' in type FullName). Fixed bug #76630 (additionally crefs).
2842
2843 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2844
2845         * doc.cs : when there was no '.' in cref to methods in doc comment,
2846           then parameters were missing in the output. Fixed bug #76691.
2847
2848 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2849
2850         * driver.cs : don't output docs when there is an error.
2851           Fixed bug #76693.
2852
2853 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2854
2855         * doc.cs :
2856           Now it should detect indexers. Fixed primary concern in bug #76685.
2857           Fixed CS0419 message to not show the identical member signature in
2858           the message.
2859
2860 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2861
2862         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
2863           instead of Type.FindMembers() since it does not handle events.
2864           Fixed bug #71604.
2865
2866 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
2867
2868         * codegen.cs: Fixed typo (speficied -> specified).
2869
2870 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2871
2872         Fix #76369.
2873         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
2874
2875 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2876
2877         * attribute.cs: Changed error message.
2878
2879         * cs-tokenizer.cs: One more check.
2880
2881 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2882
2883         * statement.cs (Block.Resolve): Ignore empty statement.
2884
2885 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2886
2887         * report.cs: Made error/warning methods more strict to avoid
2888         their misuse.
2889
2890         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
2891         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
2892         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
2893         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
2894
2895 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2896
2897         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
2898         Use the more explicit AssemblyName.FullName instead of 
2899         AssemblyName.Name to report errors.
2900         
2901 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2902
2903         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
2904         with mcs.
2905
2906 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2907
2908         * class.cs,
2909         * convert.cs,
2910         * cs-parser.jay,
2911         * decl.cs,
2912         * enum.cs,
2913         * expression.cs,
2914         * generic.cs,
2915         * pending.cs,
2916         * report.cs: Fixed error reporting and typos.
2917
2918         * generic.cs (TypeParameter.GetSignatureForError): New method.
2919         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
2920
2921         * typemanager.cs (GetFullName): Refactored.
2922
2923 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
2924
2925         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
2926         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
2927
2928         * class.cs (TypeContainer.IsComImport): New property.
2929         (Constructor.Define): Create proper ctor for ComImport types.
2930
2931         * expression.cs (New.CheckComImport): Fixed.
2932
2933 2005-11-07  Miguel de Icaza  <miguel@novell.com>
2934
2935         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
2936         that a parameter has been captured does not mean that we do not
2937         have to do the rest of the processing.  This fixes the second part
2938         of #76592.  If there was another anonymous method capturing
2939         values in the past, the Scope would never be set for the second
2940         method that captured the same parameter.
2941
2942         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
2943         properly manipulate the stack.   Second part of fix for #76592.
2944
2945         * expression.cs (New): Add support for invoking "new" on
2946         interfaces that have been flagged with the ComImport attribute and
2947         the CoClass.  Fixes #76637 
2948
2949         * statement.cs (Try.DoEmit): When a variable is captured, do not
2950         try to emit the vi.LocalBuilder variable as it has been captured.
2951         Create a temporary variable and store the results on the
2952         FieldBuilder.  Fixes #76642
2953
2954 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2955
2956         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
2957
2958         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
2959
2960         * expression.cs (Binary.DoResolve): Added && optimalization.
2961     
2962         * typemanager.cs (AddUserType): Removed useless argument.
2963
2964 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
2965
2966         * statement.cs (Block.variables): Uses ListDictionary.
2967
2968 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2969
2970         Fix #75969.
2971         * class.cs (PartialContainer.EmitType): Customized to emit
2972         security attributes.
2973         (ClassPart.ApplyAttributeBuilder): Transform security attribute
2974         for partial classes.
2975
2976 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2977
2978         Fix #76599.
2979         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
2980         access has to be fixed.
2981         
2982         * typemanager.cs (IsUnmanagedType): Wrong common field type.
2983
2984 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
2985
2986         Fix #76590.
2987         * ecore.cs (NullCast.Reduce): Implemented.
2988
2989         * expression.cs (ArrayCreation.CheckIndices): Correcly check
2990         constant type.
2991         
2992         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
2993         properly.
2994         (Foreach.Resolve): Catch null properly.
2995
2996 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
2997  
2998         * cs-tokenizer.cs: Warning text fix.
2999
3000         * driver.cs: AllWarningNumbers exposed on public interface.
3001
3002         * report.cs (): Reviewed warning numbers.
3003         (IsValidWarning): Use binary search.
3004
3005 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3006  
3007         * driver.cs: Implemeted resource visibility.
3008         (Resources): New class for code sharing between /res: and
3009         /linkres:
3010  
3011 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3012
3013         decl.cs (CurrentTypeParameters): Fixed to be public.
3014
3015 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3016
3017         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
3018
3019 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3020
3021         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
3022
3023 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
3024
3025         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
3026
3027 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3028
3029         Add friend assembly access support.
3030         * typemanager.cs: assembly_internals_vis_attrs
3031         cache for friend assembly access. 
3032         (TypeManager.IsFriendAssembly): New method for
3033         checking friend assembly access.
3034         (TypeManager.Error_FriendAccessNameNotMatching): New
3035         helper method.
3036         (TypeManager.CompareKeyTokens): Likewise.
3037         (TypeManager.Filter): Handle friend accessible
3038         members.
3039
3040         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
3041         friend accessible types.
3042
3043         * ecore.cs (Expression.IsAccessorAccessible): Handle
3044         friend accessible properties.
3045
3046         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
3047         accessible types.
3048         
3049 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
3050
3051         Fix #76568.
3052         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
3053         folding.
3054         
3055         * convert (Convert.ImplicitReferenceConversion): NullCast holds
3056         contants only.
3057         
3058         * ecore.cs (NullCast): Child is contant only.
3059         
3060         * literal.cs (NullLiteral.Reduce): null can be converted to any
3061         reference type.
3062
3063 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
3064
3065         * driver.cs: Use Encoding.Default as default code page instead
3066           of ISO-28591.
3067
3068 2005-10-27  Raja R Harinath  <rharinath@novell.com>
3069
3070         Fix #76085.
3071         * expression.cs (Invocation.Error_InvalidArguments): Handle
3072         __arglist parameters.
3073         (Invocation.VerifyArgumentsCompat): Likewise.
3074         * support.cs (ReflectionParameters.GetSignatureForError): Print
3075         __arglist parameters.
3076         (InternalParamters.GetSignatureForError): Likewise.
3077         * parameter.cs (Parameters.GetSignatureForError): Likewise.
3078
3079 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
3080
3081         * attribute.cs (GetPropertyValue): Made public.
3082
3083         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
3084         Resolve.
3085         Add new property WrapNonExceptionThrows to handle 2.0 assembly
3086         attribute.
3087         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
3088         is not defined.
3089         
3090         * driver.cs: Reflect method name change.
3091         
3092         * statement.cs (Try.Resolve): Warn when try has both general
3093         exception handlers.
3094         
3095         * typemanager.cs: runtime_compatibility_attr_type new predefined
3096         type.
3097
3098 2005-10-26  Raja R Harinath  <harinath@gmail.com>
3099
3100         Fix #76419.
3101         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
3102         treat it as an empty parameter list.
3103
3104 2005-10-26  Raja R Harinath  <rharinath@novell.com>
3105
3106         Fix #76271.     
3107         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
3108         ResolveAsTypeStep silent.
3109         * statement.cs (Block.AddConstant): Mark block as used.
3110         (Block.ResolveMeta): Avoid piling on error messages
3111         if a constant initializer resolution fails.
3112
3113 2005-10-25  Raja R Harinath  <rharinath@novell.com>
3114
3115         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
3116         Remove.
3117         (NamespaceEntry.VerifyAllUsing): New.
3118         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
3119         behaviour.  Delegates actual resolution of alias to ...
3120         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
3121         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
3122         Update.
3123         * driver.cs (Driver.MainDriver): Update.
3124         
3125         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
3126         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
3127         property.
3128         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
3129         Remove.
3130         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
3131         RootNamespace.DefineNamespacesForAll.
3132
3133 2005-10-24  Raja R Harinath  <harinath@gmail.com>
3134
3135         * typemanager.cs (assemblies, external_aliases, modules)
3136         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
3137         (ComputeNamespaces, GetRootNamespace): Remove extra staging
3138         overhead.  Move resposibility ...
3139         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
3140         * driver.cs, attribute.cs, codegen.cs: Update to changes.
3141
3142 2005-10-23  Raja R Harinath  <harinath@gmail.com>
3143
3144         * namespace.cs (RootNamespace.all_namespaces): Renamed from
3145         cached_namespaces.  Improve usage.
3146         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
3147         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
3148         Move from GlobalRootNamespace and simplify.
3149         (RootNamespace.Global): Make instance variable.
3150         (RootNamespace.RootNamespace): Add "alias name" parameter.
3151         (GlobalRootNamespace): Simplify drastically.
3152         (Namespace.Lookup): Don't use GetNamespace.
3153         * typemanager.cs (GetRootNamespace): Rename from
3154         ComputeNamespaceForAlias.
3155         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
3156
3157 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3158
3159         * anonymous.cs (AnonymousContainer): Don't crash when container
3160         doesn't exist.
3161
3162 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3163
3164         * expression.cs (Binary.DoResolve): Warn when comparing same
3165         values.
3166
3167 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3168
3169         Fix #76486.
3170         * expression.cs (Binary.DoResolve): It looks like there are no
3171         convetsion rules in enum context.
3172
3173 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3174
3175         Add support for extern alias qualifiers.
3176         * typemanager.cs: Move some LookupTypeReflection code
3177         to namespace.cs, to have cleaner code. Added some methods
3178         to help us keep track of the extern aliased references.
3179         * driver.cs: Add suport for extern alias assemblies on command
3180         line and check for their warnings/errors. Also keep track of the
3181         extern aliased assemblies.
3182         * namespace.cs: Move the global functionality of Namespace
3183         to GlobalRootNamespace/RootNamespace. Now the global namespace
3184         is GlobalRootNamespace.Globa. Also the code moved from 
3185         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
3186         Finally added LocalAliasEntry (AliasEntry before) and
3187         ExternAliasEntry, to handle alias statements.
3188         * cs-parser.jay: Add support in the grammar for extern alias
3189         statement.
3190         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
3191         Update callings to Namespace (now in GlobalRootNamespace).
3192
3193 2005-10-25  Martin Baulig  <martin@ximian.com>
3194
3195         * convert.cs (ImplicitTypeParameterConversion): Make base
3196         interfaces actually work; fixes #76557.
3197
3198 2005-10-25  Martin Baulig  <martin@ximian.com>
3199
3200         * generic.cs
3201         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
3202         all the type parameters; fixes #76551.
3203
3204 2005-10-25  Martin Baulig  <martin@ximian.com>
3205
3206         Fix #76472.
3207
3208         * generic.cs
3209         (GenericMethod.ctor): Added `Expression return_type' and
3210         `Parameters parameters' arguments.
3211         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
3212         parameter and return types to check their constraints if they're
3213         generic types.
3214
3215         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
3216         boolean field.
3217
3218         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
3219         constraints of a generic type if `ec.ResolvingGenericMethod'.
3220
3221         * class.cs (MethodCore.DoDefineParameters): Set
3222         `ec.ResolvingGenericMethod' if we're a generic method.
3223         (MemberBase.MemberType): Likewise.
3224
3225 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3226
3227         * typemanager.cs (TypeManager): Added 
3228         TypeManager.internals_visible_attr_type to cache
3229         S.R.CompilerServices.InternalsVisibleToAttribute.
3230
3231         * codegen.cs (AssemblyClass): Added checks for 
3232         InternalsVisibleToAttribute in new method 
3233         CheckInternalsVisibleAttribute () and also cache the
3234         AssemblyName in AssemblyClass.Name.
3235         
3236 2005-10-24  Martin Baulig  <martin@ximian.com>
3237
3238         * typemanager.cs
3239         (TypeManager.ExpandInterfaces): Added overloaded version which
3240         just takes a `Type[]' array.
3241
3242         * generic.cs
3243         (Constraints.Resolve): Don't expand the interfaces here; ie. we
3244         just use the interfaces which were explicitly specified and not
3245         the interfaces they inherit.  Fixes #76482.
3246         (TypeParameter.FindMembers): Expand the interfaces here.
3247
3248 2005-10-21  Martin Baulig  <martin@ximian.com>
3249
3250         * generic.cs
3251         (Constraints.Resolve): Also resolve the actual types here.
3252         (Constraints.ResolveTypes): Just check the constraints here.
3253         Fixes #76363; see gtest-218.cs.
3254
3255 2005-10-21  Martin Baulig  <martin@ximian.com>
3256
3257         * convert.cs
3258         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
3259         instead of a `BoxedCast'; fixes gtest-217.cs.
3260
3261 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
3262
3263         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
3264           1) "new()" is specified as generic parameter constraint and 2) the
3265           type is TypeBuilder and 3) the type is abstract even if it has a
3266           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
3267
3268 2005-10-20  Martin Baulig  <martin@ximian.com>
3269
3270         * generic.cs
3271         (GenericConstraints.TypeParameter): New public property.
3272         (TypeParameter.ctor): Also take a `DeclSpace' argument.
3273         (TypeParameter.DeclSpace): New public property.
3274         (TypeParameter.DefineType): Inflate the constraints if our
3275         `DeclSpace' is an `Iterator'.   
3276
3277 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
3278
3279         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
3280           GenericMethod argument to compare methods' generic type arguments.
3281           Fixed bug #76382.
3282
3283 2005-10-19  Martin Baulig  <martin@ximian.com>
3284
3285         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
3286         not ResolveType() when resolving the base type, so we're not
3287         checking the constraints here.
3288         (TypeContainer.ResolveType): Call ResolveType() on our base_type
3289         if we have any.
3290
3291 2005-10-19  Martin Baulig  <martin@ximian.com>
3292
3293         * generic.cs (ConstructedType.CheckConstraints): Committing
3294         untested fix for #76441.
3295
3296 2005-10-18  Raja R Harinath  <rharinath@novell.com>
3297
3298         Fix #76371.
3299         * class.cs (TypeContainer.DefineType): Move updating of
3300         topological sort earlier in the code.
3301         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
3302
3303 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
3304
3305         Fix #76273.
3306         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
3307         
3308         * constant.cs (Constant.TryReduce): Moved from Cast class.
3309         (Reduce): Made little bit more OO and fixed missing conversions.
3310         
3311         * ecore.cs (Reduce): Implemented.
3312         (Binary.EnumLiftUp): New method to upgrade values to enum values.
3313         
3314         * literal.cs (Reduce): Implemented.
3315         
3316         * class.cs: Reverted Miguel's wrong commit.
3317
3318 2005-10-14  Miguel de Icaza  <miguel@novell.com>
3319
3320         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
3321
3322 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
3323
3324         * cs-parser.jay, expression.cs : CS0214 was missing error location
3325           for constants. Fixed bug #76404.
3326
3327 2005-10-10  Raja R Harinath  <rharinath@novell.com>
3328
3329         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
3330         InstanceExpression.
3331         (PropertyExpr.EmitCall): Likewise.
3332         * expression.cs (Invocation.EmitArguments): Handle case where
3333         arguments == null.
3334         (Invocation.EmitCall): Avoid allocating temporary variable if
3335         there are no arguments.
3336
3337 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
3338
3339         Fix #76370.
3340         * convert.cs (ExplicitConversionCore): Fixed object->enum
3341         conversion.
3342
3343 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3344
3345         Fix #76323.
3346         * convert.cs (ImplicitConversionStandard): Move conversion of
3347         void* to arbitrary pointer types ...
3348         (ExplicitConversionStandard): .. here.
3349         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
3350         error to always print typenames.
3351
3352 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3353
3354         * convert.cs (GetConversionOperator): Rename from
3355         GetConversionOperators.  Move operator selection code from ...
3356         (UserDefinedConversion): ... here.
3357
3358 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
3359
3360         * convert.cs (ExplicitConversionCore): Removed duplicate enum
3361         conversion.
3362
3363 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
3364
3365         * assign.cs (Assign.DoResolve): Error method changed.
3366
3367         * cfold.cs (DoConstantNumericPromotions): Error method changed.
3368         
3369         * const.cs (ResolveValue): Reset in_transit immediately.
3370         
3371         * constant.cs: Error method changed.
3372         
3373         * convert.cs: Removed useless location parameter.
3374         (ExplicitNumericConversion): Don't do double enum check.
3375         (ExplicitConversionCore): Renamed from ExplicitConversion.
3376         (ExplicitUnsafe): Extracted from ExplicitConversion.
3377         (ExplicitConversion): Uses for error reporting.
3378         
3379         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
3380         error messages.
3381         (ResolveBoolean): Uses common error method.
3382         (CastToDecimal): Get rid of ec.
3383         (CastFromDecimal): Optimized.
3384         (ConvCast): Get rid of ec.
3385         
3386         * enum.cs (ResolveValue): Reset in_transit immediately.
3387         (Emit): Return after first error.
3388         
3389         * expression.cs: Convert changes.
3390         
3391         * literal.cs: Error method changed.
3392         
3393         * statement.cs: Error method changed.
3394
3395 2005-10-06  Raja R Harinath  <rharinath@novell.com>
3396
3397         Fix gtest-131.cs and gtest-211.cs.
3398         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
3399         Only emit code for a label if it is used.  Unreachable code can
3400         violate ECMA evaluation stack invariants.
3401
3402 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3403
3404         * anonymous.cs: Implemented ExprClassName.
3405         
3406         * assign.cs (Assign.DoResolve): Don't chrash when type is not
3407         delegate.
3408         
3409         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
3410         check.
3411         
3412         * class.cs (StaticClass.DefineContainerMembers): Report protected
3413         members as error.
3414         
3415         * codegen.cs: if(ed) PRODUCTION.
3416         
3417         * convert.cs (Error_CannotImplicitConversion): Better error
3418         distinction.
3419         
3420         * cs-parser.jay: More error checks.
3421         
3422         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
3423         
3424         * driver.cs (CSCParseOption): Enabled wrong option check.
3425         
3426         * ecore.cs (Expression.ExprClassName): Turned to property.
3427         (MemberExpr.CheckIntermediateModification): For checking boxed
3428         value types     modification.
3429         
3430         * statement.cs (Fixed.Resolve): Expression type must be
3431         convertible to fixed type.
3432         (CollectionForeach.GetEnumeratorFilter,TryType):
3433         Small refactoring for easier error checking.
3434
3435 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
3436
3437         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
3438         attributes.
3439         
3440         * class.cs (GeneratedBaseInitializer): New class for customization
3441         compiler generated initializers.
3442         (MemberBase.DoDefine): Check Obsolete attribute here.
3443         (FieldMember.DoDefine): Ditto.
3444         
3445         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3446         constants.
3447         
3448         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3449         (MemberCore.GetObsoleteAttribute): Removed argument.
3450         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3451         (MemberCore.CheckObsoleteType): New helper.
3452         
3453         * delegate.cs,
3454         * enum.cs,
3455         * statement.cs: Updates after MemberCore changes.
3456         
3457         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3458         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3459         
3460         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3461         obsolete attribute for compiler construct.
3462         (As.DoResolve): Cache result.
3463         
3464         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3465
3466 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3467
3468         * expression.cs (Probe): instead of having a "Type probe_type"
3469         keep the extra information as a TypeExpr probe_type_expr since the
3470         "As" operator needs to perform some type checks.
3471
3472         * (As.DoResolve): If the type is a type parameter, ensure that it
3473         is constrained by a class.
3474
3475 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3476
3477         * statement.cs (Lock): Use the TemporaryVariable class instead of
3478         manually using local variables as those do not work when variables
3479         are captured.
3480
3481         * ecore.cs: Moved the TemporaryVariable class from being a nested
3482         class inside Foreach to be a public class that can be employed in
3483         other places. 
3484
3485 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3486
3487         * cs-parser.jay: interface_accessors replaced by
3488         accessor_declarations.
3489
3490         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3491         location.
3492         
3493         * statement.cs (GotoCase.Resolve): Convert null constant to
3494         null case.
3495         (SwitchLabel.ResolveAndReduce): Ditto.
3496         (SwitchLabel.NullStringCase): Custom null stamp.
3497         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3498         
3499         typemanager.cs (CSharpSignature): Don't skip first argument
3500         for full names.
3501
3502 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3503
3504         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3505         expression.cs, iterators.cs, literal.cs: Store constants and
3506         literals location.
3507         
3508         * class.cs (MemberBase.ShortName): Pass location.
3509         
3510         * cs-parser.jay: Some location fixes.
3511         
3512         * ecore.cs (Expression.Location): Made virtual.
3513
3514 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3515
3516         Fix #72930.
3517         * const.cs (Const.ResolveValue): Check for assigning non-null
3518         value to reference type.
3519
3520 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3521
3522         Fix #76133.
3523         * expression.cs (This.VerifyFixed): In a value type T, the type of
3524         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3525         value type R, 'this' is treated as a value parameter.
3526
3527 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3528
3529         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3530         if the underlying types are the same, otherwise we need to produce
3531         code that will do the proper cast.
3532
3533         This was exposed by Marek's constant rewrite which produced
3534         invalid code for the call site:
3535
3536         enum X : long { a }
3537         void Method (X v) {}
3538
3539         Method ((X) 5)
3540
3541         This fixes test-49.cs
3542
3543 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3544
3545         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3546           Type/Object should be allowed as well. Fixed bug #75968.
3547
3548 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3549
3550         * expression.cs : (Binary.DoResolve): when one is enum constant and
3551           another is constant 0, then return enum one *as enum type*.
3552           Fixed bug 74846.
3553
3554 2005-10-04  Martin Baulig  <martin@ximian.com>
3555
3556         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3557         `SetMemberIsUsed()' work for generics, too.
3558
3559 2005-10-04  Martin Baulig  <martin@ximian.com>
3560
3561         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3562         for corlib.  Fixes #75691.
3563
3564 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3565
3566         Fix #76255.
3567         * driver.cs: Fix compilation files with full root path.
3568
3569 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3570
3571         * report.cs (SymbolRelatedToPreviousError): Format the output so
3572         it does not use an open parenthesis that is never closed. 
3573
3574         * driver.cs: Follow coding guidelines
3575
3576 2005-09-18  Miguel de Icaza  <miguel@novell.com>
3577
3578         * driver.cs: Set InEmacs based on the environment variable EMACS. 
3579
3580         * location.cs (InEmacs): in this mode, do not report column
3581         location as it confuses Emacs.
3582
3583 2005-10-03  Raja R Harinath  <rharinath@novell.com>
3584
3585         * support.cs (SeekableStreamReader.Position): Don't error out when
3586         the requested position is just beyond the end of the current
3587         buffered data.
3588
3589 2005-09-28  Raja R Harinath  <rharinath@novell.com>
3590
3591         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
3592         try to keep in sync with the byte count of the underlying Stream.
3593         However, this limits us to a window size of 2048 characters: i.e.,
3594         the maximum lookahead of our lexer/parser can be 2048 characters.
3595
3596 2005-09-22  Martin Baulig  <martin@ximian.com>
3597
3598         * driver.cs: Removed a debugging FIXME.
3599
3600 2005-09-21  Raja R Harinath  <rharinath@novell.com>
3601
3602         * cs-parser.jay (type_arguments): Add CS1644 check.
3603         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
3604
3605 2005-09-15  Raja R Harinath  <rharinath@novell.com>
3606
3607         * Makefile (PROGRAM): Make profile specific.
3608         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
3609         the current directory.
3610
3611         Fix test-455.cs.
3612         * expression.cs (Invocation.EmitCall): Remove optimization on
3613         this_call since it doesn't handle 'this' being a value type.
3614
3615 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
3616
3617         * driver.cs: Ensure file handles are closed after parsing
3618
3619 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3620
3621         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3622         if the underlying types are the same, otherwise we need to produce
3623         code that will do the proper cast.
3624
3625         This was exposed by Marek's constant rewrite which produced
3626         invalid code for the call site:
3627
3628         enum X : long { a }
3629         void Method (X v) {}
3630
3631         Method ((X) 5)
3632
3633         This fixes test-49.cs
3634
3635 2005-09-05  Martin Baulig  <martin@ximian.com>
3636
3637         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
3638         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
3639
3640         * cs-parser.jay (delegate_declaration): Small fix for #75852.
3641
3642 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3643
3644         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
3645           to be a pointer type due to the spec 25.2, so check if declaring
3646           type is generic type definition. Fixed bug #75772.
3647
3648 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3649
3650         Fixed bug #75957.
3651         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
3652           both types are not defined by methods.
3653         * expression.cs : (Invocation.IsApplicable): it should work when
3654           the argument type is equal to the parameter type, not only when
3655           ImplicitConversionExists() returns true.
3656
3657 2005-09-02  Raja R Harinath  <rharinath@novell.com>
3658
3659         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
3660         internal.
3661
3662         Fix #75941.
3663         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
3664         flow-branching for LocalVariableReferences in case we were invoked
3665         from a MemberAccess.
3666         * expression.cs (LocalVariableReference.VerifyAssigned): New.
3667         Carved out of ...
3668         (LocalVariableReference.DoResolveBase): ... this.
3669         (MemberAccess.Resolve): Do the check that was disabled during
3670         SimpleNameResolve.
3671
3672 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3673
3674         * class.cs :
3675           (PartialContainer.Create): check abstract/sealed/static strictly
3676           but abstract/sealed can exist only at one side. Fixed bug #75883.
3677
3678 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
3679
3680         Fix #75945.
3681         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
3682         specified, don't default to UnmanagedType.I4.
3683
3684 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3685
3686         * expression.cs : conditional operator should check possibly
3687           incorrect assign expression. Fixed bug #75946.
3688
3689 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3690
3691         Fix #75934.
3692         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
3693         (ScopeInfo.EmitScopeType): Use it to construct field names from
3694         names of captured locals.
3695
3696         Fix #75929.
3697         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
3698         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
3699         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
3700         (ExplicitConversion): Remove enum cases already handled by
3701         implicit conversion.  Move implicit conversion check to the beginning.
3702         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
3703         * expression.cs (ArrayCreation.EmitDynamicInitializers):
3704         Don't treat System.Enum as a struct.
3705
3706 2005-08-30  Jb Evain  <jbevain@gmail.com>
3707
3708         * attribute.cs: handles as expression in parameters.
3709
3710 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3711
3712         Fix #75802.
3713         * class.cs (TypeContainer.VerifyClsName): Don't use a
3714         PartialContainer when verifying CLS compliance.
3715         (AbstractPropertyEventMethod): Set Parent here, ...
3716         (PropertyMethod): ... not here.
3717
3718 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
3719
3720         * attribute.cs : escaped attribute name should not be allowed to be
3721           resolved (e.g. @class as classAttribute). Fixed bug #75930.
3722
3723 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3724
3725         Fix #75927.
3726         * convert.cs (ImplicitStandardConversionExists): Allow zero also
3727         when converting a long constant to unsigned long.
3728         * expression.cs (Invocation.OverloadResolve): Add sanity check to
3729         detect where IsApplicable and VerifyArgumentsCompat disagree.
3730
3731 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3732         and Carlos Alberto Cortez  <carlos@unixmexico.org>
3733
3734         Fix #75848.
3735         * class.cs (TypeContainer.CanElideInitializer): New helper.
3736         (TypeContainer.EmitFieldInitializers): Use it to determine if we
3737         can safely emitting the initializer of a field.
3738
3739 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3740
3741         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
3742           allowed inside a switch (without loop). Fixed bug #75433.
3743
3744 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
3745
3746         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
3747         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
3748
3749 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3750
3751         * driver.cs : kinda reverting the default encoding changes (not exact 
3752           revert since I noticed that "codepage:reset" might not work fine).
3753
3754 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3755
3756         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
3757           Location. Now getter and setter store location correctly.
3758           (errors/cs0111-12.cs now reports the expected location.)
3759
3760 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3761
3762         * driver.cs : Use default encoding on the environment.
3763           Removed (now that) extra parameter for SeekableStreamReader.
3764         * support.cs : (SeekableStreamReader) third .ctor() argument for
3765           StreamReader is not required (always true). preamble size could
3766           be acquired in simpler and safe way.
3767
3768 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
3769
3770         * cs-parser.jay: report CS0642 at warning level 3
3771           and report CS0642 for an if else statement also
3772           fixes bug #74745. Patch by John Luke (and a bit
3773           modified by me).
3774           Removed extra CS0642 warning check for "while",
3775           "for" and "fixed".
3776         * statement.cs: In Block.Resolve(), CS0642 check
3777           is reimplemented to check a sequence of an empty
3778           statement and a block.
3779
3780           Both fix bug #66777.
3781
3782 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
3783
3784         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
3785         detection until I fix it.
3786         
3787         * cs-tokenizer.cs: Changed error message.
3788         
3789         * cs-parser.jay: Fixed 2 error locations.
3790         
3791         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
3792         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
3793         properties.
3794         
3795         * enum.cs (GetSignatureForError): Fixed.
3796         
3797         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
3798         method detection.
3799         
3800         * class.cs,
3801         * typemanager.cs (RegisterProperty): Removed.
3802         
3803         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
3804
3805 2005-08-24  Raja R Harinath  <rharinath@novell.com>
3806
3807         Fix #75874.
3808         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
3809         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
3810
3811 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3812
3813         * expression.cs : tiny fix is required for not warning positive ulong.
3814           See test-441.cs.
3815
3816 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3817
3818         * expression.cs : add CS0652 check for constant and integral
3819           expression. Fixed bug #53974.
3820
3821 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3822
3823         * expression.cs : in DoNumericPromotions(), check if there is implicit
3824           conversion overload for string (to check CS0034). Fixed bug #52492.
3825
3826 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3827
3828         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
3829
3830 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3831
3832         * ecore.cs : report location when it is *not* Null.
3833
3834 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3835
3836         * codegen.cs,
3837           ecore.cs,
3838           flowanalysis.cs,
3839           expression.cs:
3840           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
3841           correctly. Fixed bug #75721.
3842
3843 2005-08-23  Raja R Harinath  <rharinath@novell.com>
3844
3845         * support.cs (SeekableStreamReader.Position): Avoid an expensive
3846         loop that performs 'min (pos, char_count)'.
3847
3848         Fix #75862.
3849         * expression.cs (Unary.ResolveOperator): Don't discard implicit
3850         converted value in Operator.OnesComplement.
3851
3852 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
3853
3854         * anonymous.cs: If the anon method is pulled into a helper class,
3855         it needs to be `internal' not `private'. Fixes runtime behavior on
3856         msft. bug #75704
3857
3858 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
3859
3860         Fix #75803
3861         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
3862         is a partial class.
3863
3864 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
3865
3866         The big constants rewrite
3867         Fix #75746, #75685 and more
3868         As a side effect saved 1MB for MWF ;-)
3869         
3870         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
3871         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
3872         enum based for corlib compilation.
3873         
3874         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
3875         subtractions.
3876         
3877         * class.cs (FixedField.Define): Use ResolveAsConstant.
3878         
3879         * const.cs (IConstant): Interface constants and enums.
3880         (Const.ResolveValue): New method for constant resolvning.
3881         (ExternalConstant): Constants from imported assemblies.
3882         
3883         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
3884         conversion; like enums.
3885         (Constant.ToType): Converts this constant to different type.
3886         (Constant.Increment): Adds 1.
3887         
3888         * convert.cs (ImplicitConversionRequired): Simplified.
3889         
3890         * cs-parser.jay: Create EnumMember directly.
3891         
3892         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
3893         
3894         * doc.cs (GenerateEnumDocComment): Removed.
3895         
3896         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
3897         (ConvertIntLiteral): Removed.
3898         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
3899         
3900         * enum.cs (EnumMember): Implement IConstant.
3901         (Enum.IsValidEnumConstant): Removed.
3902         (Enum.GetNextDefaultValue): Removed.
3903         (Enum.FindMembers): Updated.
3904         (Enum.GenerateDocComment): Iterate enum members.
3905         
3906         * expression.cs (Cast.TryReduce): Handle enums correctly.
3907         (New.Constantify): Made public.
3908         (MemberAccess.DoResolve): Removed contant specific if(s).
3909         
3910         * literal.cs (NullLiteral): Implement new abstract methods.
3911         
3912         * statement.cs (GotoCase.Resolve): Use new constant methods.
3913         (SwitchLabel.ResolveAndReduce): Use new constant methods.
3914         
3915         * typemanager.cs (LookupEnum): Removed.
3916         (IsEnumType): Fixed to work with corlib.
3917         (RegisterConstant): Removed.
3918         (LookupConstant): Removed.
3919         (GetConstant): Changed to work with IConstant.
3920
3921 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
3922
3923         * location.cs : Fixed overflown (>255) column number.
3924
3925 2005-08-03  Raja R Harinath  <rharinath@novell.com>
3926
3927         First cut of the qualified-alias-member feature.
3928         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
3929         token.
3930         * cs-parser.jay (DOUBLE_COLON): New token.
3931         (namespace_or_type_name): Add rule for recognizing
3932         qualified-alias-members.
3933         (primary_expression): Likewise.
3934         (element_access): Allow QualifiedAliasMember as a possible
3935         type-bearing expression.
3936         (local_variable_type, local_variable_pointer_type): Likewise.
3937         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
3938         aliases in the current and enclosing namespace declarations.
3939         (NamespaceEntry.UsingAlias): Add CS0440 warning.
3940         * decl.cs (MemberName.is_double_colon): New.
3941         (MemberName.MemberName): Add new constructor for alias-member.
3942         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
3943         * expression.cs (QualifiedAliasMember): New expression type.
3944
3945 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3946
3947         * location.cs : it borked when no argument was specified.
3948
3949 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3950
3951         * location.cs : tiny ToString() format fix.
3952
3953 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3954
3955         * statement.cs : oops, it was missing.
3956
3957 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3958
3959         A set of fixes for precise line/column location.
3960
3961         * location.cs :
3962           "token" field now holds a file/line "delta", a line number offset 
3963           from the segment, and a column number. See also:
3964           http://lists.ximian.com/pipermail/mono-devel-list/2004-
3965           December/009508.html
3966           Removed static IsNull. Use instance IsNull property instead.
3967         * cs-tokenizer.cs :
3968           For some tokens it stores Location. For Identifier it stores
3969           LocatedToken which is a pair of string name and location.
3970           Column numbers are adjusted only at getChar().
3971         * report.cs :
3972           Use Location.ToString() for reporting (it now contains column).
3973         * cs-parser.jay :
3974           Largely modified to use LocatedToken instead of
3975           string (IDENTIFIER), and to acquire Location from some tokens.
3976         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
3977           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
3978           codegen.cs :
3979           Now MemberName holds Location. DeclSpace.ctor() receives Location
3980           as a parameter. Removed extra parameters to all derived classes.
3981           Replaced Location.IsNull() with instance property.
3982         * assign.cs, expression.cs :
3983           Added .ctor() overload that omits Location.
3984         * attribute.cs :
3985           Added "nameEscaped" flag that indicates the identifier was escaped
3986           in the source file. This fixes bug #57047.
3987
3988 2005-09-02  Martin Baulig  <martin@ximian.com>
3989
3990         * class.cs: Make CS3005 a warning, not an error.
3991
3992 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
3993
3994         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
3995         New method, looking for lo-case imported cls type.
3996
3997         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
3998         here.
3999
4000         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
4001
4002         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
4003
4004         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
4005         all_imported_types.
4006         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
4007
4008         Optimized to save 3.5 MB for SWF compilation.
4009
4010 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4011
4012         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
4013         (PartialContainer.Create): Moved logic AddToContainer.
4014         (PartialContainer.MarkForDuplicationCheck): Shares name.
4015         
4016         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
4017         place.
4018         
4019         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
4020         initialization.
4021         (Namespace.GetSignatureForError): New method.
4022         
4023         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
4024         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
4025
4026 2005-08-01  Raja R Harinath  <rharinath@novell.com>
4027
4028         Fix #75669.
4029         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
4030         member lookup rather than qualifier_type, since qualifier_type can
4031         be null.
4032
4033 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4034
4035         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
4036         enum member.
4037
4038 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4039
4040         * statement.cs: Copy the local exception into the exception
4041         captured local.  Fixes 75674
4042
4043 2005-07-31  Raja R Harinath  <harinath@gmail.com>
4044
4045         Fix #75658.
4046         * expression.cs (Invocation.OverloadResolve): Don't report error
4047         CS1501 if error CS1502 has been reported.
4048         (New.DoResolve): Delegate CS1501 reporting to
4049         Invocation.OverloadResolve.
4050
4051         Fix #75656.
4052         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
4053         invariant-meaning-in-block property in an enclosing block if
4054         necessary.
4055
4056 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
4057
4058         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
4059         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
4060         (Switch.CheckSwitch): Just save 50kb for SWF.
4061
4062 2005-07-27  Martin Baulig  <martin@ximian.com>
4063
4064         * anonymous.cs (CaptureContext.AddField): Added
4065         `AnonymousContainer am' argument; compute its toplevel scope if
4066         it's not already computed.  Fixes #75649.
4067
4068 2005-07-26  Raja R Harinath  <rharinath@novell.com>
4069
4070         Fix #75628.
4071         * class.cs (Constructor.Emit): Reset block to null if the block
4072         resolve fails.
4073
4074 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4075
4076         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
4077
4078 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4079
4080         * class.cs (MethodData.Define): Check whether accessor implementing
4081         interface is public.
4082
4083         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
4084
4085 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
4086
4087         Fix #57245
4088         * namespace.cs (LookupType): Moved same type check to...
4089         
4090         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
4091         with the same name.
4092
4093 2005-07-21  Raja R Harinath  <rharinath@novell.com>
4094
4095         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
4096         already found a typebuilder.
4097         * class.cs (MethodCore.IsDuplicateImplementation): Compare
4098         MemberNames, not strings.
4099
4100         * const.cs (Error_ExpressionMustBeConst): 
4101         Rename from Error_EpressionMustBeConst.
4102         * const.cs, class.cs, statement.cd: Update.
4103
4104 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
4105
4106         Fix #65573
4107
4108         * const.cs (Const.LookupConstantValue): Report missing contant expression
4109         everytime.
4110         (Error_EpressionMustBeConstant): Only one error method.
4111
4112         * class.cs, statement.c: Updated.
4113
4114 2005-07-20  Raja R Harinath  <rharinath@novell.com>
4115
4116         * statement.cs (Block.Flags): Add back HasVarargs.
4117         (Block.flags): Make protected.
4118         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
4119
4120         * typemanager.cs (types, typecontainers, user_types): Remove.
4121         (UserTypes, TypeContainers): Likewise.
4122         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
4123         (CleanUp, Reset): Update.
4124         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
4125         (GetNestedType): Use Type.GetNestedType.
4126         (CoreLookupType): Take two arguments, the namespace and the
4127         basename of the type.  Update to use the Namespace.Lookup
4128         mechanism.
4129         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
4130         (RealMemberLookup): Use IsNestedChildOf instead of playing with
4131         string concatenation and substring matches.
4132         * class.cs, enum.cs, delegate.cs: Update to changes.
4133
4134 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
4135
4136         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
4137         Expression and made virtual.
4138
4139         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
4140         (ImplicitStandardConversionExists): Fixed `byte' typo ?
4141
4142         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
4143
4144         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
4145         error message.
4146
4147         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
4148         change.
4149
4150 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
4151
4152         Fix #57707
4153         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
4154         AssemblyCultureAttribute is not used on executable.
4155
4156         * rootcontext.cs,
4157         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
4158
4159 2005-07-16  Raja R Harinath  <rharinath@novell.com>
4160
4161         Fix #60638.
4162         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
4163         New.  Reports CS0252/CS0253.
4164         Mostly taken from preliminary patch by Duncak Mak.
4165         (Binary.DoResolveOperator): Store results of operator lookup.
4166         Use them to detect if we need to warn about unintended reference
4167         comparisons.
4168
4169 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4170
4171         Fix #72969.
4172         * namespace.cs (Namespace.Lookup): Add back location parameter.
4173         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
4174         * delegate.cs, ecore.cs, expression.cs: Update to changes.
4175
4176         * codegen.cs (EmitContext.DeclSpace): Make readonly.
4177         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
4178         (Namespace.LookupType): ... this.
4179         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
4180         of namespaces.
4181         * typemanager.cs (LookupTypeReflection): Remove buggy code that
4182         purported to handle pointers.
4183         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
4184         CoreLookupType.
4185
4186 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4187
4188         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4189         type as namespace.
4190
4191 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4192
4193         * namespace.cs (Namespace.Lookup): Drop location parameter.
4194         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
4195         (NamespaceEntry.Lookup): ... this.
4196         (NamespaceEntry.Error_AmbiguousTypeReference):
4197         Move here from DeclSpace.
4198         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
4199         names ...
4200         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
4201         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
4202         Move to NamespaceEntry.
4203         * delegate.cs, expression.cs: Update to changes.
4204
4205 2005-08-31  Martin Baulig  <martin@ximian.com>
4206
4207         Committing a patch from Atsushi Enomoto for #75850.
4208
4209         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
4210         Prefer a generic enumerator over a non-generic one.
4211
4212 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4213
4214         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4215         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4216
4217 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4218
4219         * driver.cs : reverting default encoding change as well as mcs.
4220
4221 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4222
4223         * driver.cs, support.cs : merged r48826.
4224           Marek Safer wrote:
4225           > could you integrate your mcs changes to gmcs otherwise
4226           > gmcs cannot compile some files.
4227
4228 2005-08-20  Martin Baulig  <martin@ximian.com>
4229
4230         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
4231         scope if we don't already have it.
4232
4233         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
4234         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
4235         fixes #75867.
4236
4237 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4238
4239         * statement.cs: Copy the local exception into the exception
4240         captured local.  Fixes 75674
4241
4242 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4243
4244         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4245         type as namespace.
4246
4247 2005-08-12  Martin Baulig  <martin@ximian.com>
4248
4249         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4250         for nested types here to avoid hitting the cache too early.
4251
4252 2005-08-09  Miguel de Icaza  <miguel@novell.com>
4253
4254         * enum.cs: On the new compiler CLS error 3005 is now a warning not
4255         an error. 
4256
4257 2005-08-03  Martin Baulig  <martin@ximian.com>
4258
4259         Make iterators in generic methods work; see gtest-191.cs.
4260
4261         * generic.cs
4262         (Constraints.Resolve): Protect against being called twice.
4263
4264         * class.cs
4265         (TypeContainer.GetClassBases): Make this `protected virtual'.
4266
4267         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
4268         (Iterator.GetClassBases): Override this and compute the base
4269         classes here.
4270         (Iterator.DefineNestedTypes): If we're a generic method, all our
4271         method type parameters become class type parameters on the proxy
4272         class.
4273
4274         * statement.cs
4275         (ToplevelBlock.Parameters): Make this a property, not a field.
4276         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
4277
4278 2005-08-03  Martin Baulig  <martin@ximian.com>
4279
4280         * typemanager.cs (TypeManager.IsSubclassOf): Use
4281         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
4282         (TypeManager.GetFullName_recursed): Improved.
4283
4284 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
4285
4286         Fix #75417
4287         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
4288         Private accessor case, using TypeManager.IsPrivateAccessible instead of
4289         invocation_type == mi.DeclaringType, since the first one also checks
4290         other condition used by generic instances.
4291         
4292 2005-07-27  Martin Baulig  <martin@ximian.com>
4293
4294         * anonymous.cs (CaptureContext.AddField): Added
4295         `AnonymousContainer am' argument; compute its toplevel scope if
4296         it's not already computed.  Fixes #75649.
4297
4298 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
4299
4300         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
4301         CheckAttributeType and refactored.
4302         (Attribute.ResolvePossibleAttributeType): Changed to reuse
4303         ResolveAsTypeTerminal error handling.
4304         (ResolveAsTypeTerminal): Introduced because of global attributes extra
4305         handling.
4306         (GetSignatureForError): Print errors in same way.
4307
4308         * class.cs,
4309         * codegen.cs: Reflect attribute GetSignatureForError change.
4310
4311         * ecore.cs,
4312         * expression.cs: Add silent parameter to ResolveAsTypeStep.
4313
4314         * namespace.cs (UsingEntry): Refactored to make fields private.
4315
4316         * assign.cs,
4317         statement.cs: Error_UnexpectedKind has extra parameter.
4318
4319 2005-07-14  Raja R Harinath  <rharinath@novell.com>
4320
4321         * ecore.cs (IAlias): Remove.
4322         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
4323         that implement the interface.
4324         * namespace.cs (Namespace): Likewise.
4325         (Namespace.declspaces): Renamed from 'defined_names'.
4326         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
4327         DeclSpace instead of an IAlias.
4328         * tree.cs (Tree.AddDecl): Update.
4329
4330 2005-07-12  Raja R Harinath  <rharinath@novell.com>
4331
4332         * statement.cs (Block.Flags); Remove HasVarargs.
4333         (Block.HasVarargs): Move to ToplevelBlock.
4334         (Block.ThisVariable, Block.AddThisVariable): Likewise.
4335         (Block.Variables): Make protected.  Initialize variable hashtable
4336         if necessary.
4337         (Block.AddVariable): Update.
4338         (Block.Resolve): Update to changes.
4339         (ToplevelBlock.HasVarargs): New boolean.
4340         (ToplevelBlock.ThisVariable): Move here from Block.
4341         (ToplevelBlock.AddThisVariable): Likewise.
4342         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
4343         * expression.cs (This.ResolveBase): Update to changes.
4344         (ArglistAccess.DoResolve): Likewise.
4345
4346 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4347
4348         Fix #75321
4349         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
4350
4351         * class.cs (TypeContainer.VerifyMembers): Distinguish between
4352         not used and not used & assigned.
4353         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
4354
4355 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4356
4357         Fix #75053
4358         * expression.cs (Is.DoResolve): null is never provided type.
4359
4360 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
4361
4362         Fix #52496
4363         * cs-parser.jay: Less strict event error rule to catch more errors.
4364
4365 2005-07-11  Martin Baulig  <martin@ximian.com>
4366
4367         * generic.cs (ConstructedType.CheckConstraints): Improve the check
4368         for the constructor constraint: we do not only have to check
4369         whether the class has a public constructor, but also ensure that
4370         it's parameterless.  Fixes #75492.
4371
4372 2005-07-11  Martin Baulig  <martin@ximian.com>
4373
4374         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
4375         between type parameters if they either have the reference type
4376         constraint or the class constraint.
4377
4378 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
4379
4380         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
4381
4382 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
4383
4384         Fix #74975
4385         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
4386         (ExtractSecurityPermissionSet): Cope with self referencing security
4387         attributes properly.
4388
4389         * driver.cs (SetOutputFile): Made public property OutputFile.
4390
4391 2005-07-07  Raja R Harinath  <rharinath@novell.com>
4392
4393         Fix #75486.
4394         * class.cs (TypeContainer.first_nonstatic_field): Rename from
4395         has_nonstatic_fields.  Make into a FieldBase pointer.
4396         (TypeContainer.AddField): Add CS0282 check.
4397         (TypeContainer.EmitType): Update.
4398
4399 2005-07-06  Miguel de Icaza  <miguel@novell.com>
4400
4401         * cs-tokenizer.cs (consume_identifier): Do not create strings to
4402         compare if they start with __.
4403
4404 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4405
4406         * statement.cs (Switch.SwitchGoverningType): Only look at
4407         UserCasts that don't need implicit standard conversions to one of
4408         the allowed switch types (Fixes test-322.cs).
4409         (LocalInfo.Resolve): Re-enable sanity-test.
4410
4411 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
4412
4413         * cs-tokenizer.cs (consume_identifier): Detect double undescores
4414         
4415         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
4416         
4417         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
4418
4419 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4420
4421         Fix #75472.
4422         * ecore.cs (SimpleName.GetSignatureForError): Add.
4423         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
4424         (MemberAccess.GetSignatureForError): Add.
4425
4426 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
4427  
4428         The big error and warning messages review.
4429         
4430         * anonymous.cs,
4431         * assign.cs,
4432         * attribute.cs,
4433         * class.cs,
4434         * codegen.cs,
4435         * convert.cs,
4436         * cs-parser.jay,
4437         * cs-tokenizer.cs,
4438         * decl.cs,
4439         * delegate.cs,
4440         * doc.cs,
4441         * driver.cs,
4442         * ecore.cs,
4443         * enum.cs,
4444         * expression.cs,
4445         * flowanalysis.cs,
4446         * iterators.cs,
4447         * literal.cs,
4448         * location.cs,
4449         * modifiers.cs,
4450         * namespace.cs,
4451         * parameter.cs,
4452         * pending.cs,
4453         * report.cs,
4454         * rootcontext.cs,
4455         * statement.cs,
4456         * support.cs,
4457         * tree.cs,
4458         * typemanager.cs: Updated.
4459         
4460         * class.cs: (MethodCore.SetYields): Moved here to share.
4461         (PropertyMethod.Define): Moved iterator setup here.
4462         
4463         * iterators.cs: Add orig_method to have full access to parent
4464         container.
4465
4466 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4467
4468         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4469         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4470         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4471         variable of struct type.
4472         * expression.cs (Unary.ResolveOperator): Update to change.
4473         (Indirection.VerifyFixed): Likewise.
4474         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4475         (ParameterReference.VerifyFixed): Value parameters are fixed.
4476         (This.VerifyFixed): Treat 'this' as a value parameter.
4477         * statement.cs (LocalInfo.IsFixed): Remove.
4478
4479 2005-07-01  Martin Baulig  <martin@ximian.com>
4480
4481         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4482         `ec.EmitThis ()' to get the correct scope.
4483
4484 2005-07-01  Martin Baulig  <martin@ximian.com>
4485
4486         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4487         instance is a ParameterReference; fixes #75299.
4488
4489 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4490
4491         Fix #75412.
4492         * expression.cs (Indexers.map): Remove.
4493         (Indexers.Append): Filter out inaccessible setters and getters.
4494         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4495
4496         Fix #75283.
4497         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4498         Refactored from ...
4499         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4500         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4501         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4502         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4503
4504 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4505
4506         Fix #75322
4507         * class.cs (FieldBase.GetInitializerExpression): One more field
4508         for backup.
4509
4510 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4511
4512         * pending.cs: Do not define a proxy if the base method is virtual,
4513         it will be picked up by the runtime (bug 75270).
4514
4515 2005-07-08  Martin Baulig  <martin@ximian.com>
4516
4517         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4518         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4519
4520 2005-07-07  Martin Baulig  <martin@ximian.com>
4521
4522         * generic.cs (ConstructedType.CheckConstraint): Use
4523         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4524         called recursively; fixes #75329.
4525
4526 2005-07-06  Martin Baulig  <martin@ximian.com>
4527
4528         * generic.cs (TypeManager.InferTypeArguments): Added support for
4529         anonymous methods; fixes #75461.
4530
4531 2005-07-01  Martin Baulig  <martin@ximian.com>
4532
4533         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4534         `ec.EmitThis ()' to get the correct scope.
4535
4536 2005-07-01  Martin Baulig  <martin@ximian.com>
4537
4538         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4539         instance is `This'; fixes #75299.
4540
4541 2005-06-30  Martin Baulig  <martin@ximian.com>
4542
4543         * class.cs (Indexer): Implement IIteratorContainer; added support
4544         for iterators in indexers.
4545
4546         * codegen.cs
4547         (EmitContext.CurrentIterator): Make this a property, not a field.
4548
4549         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4550
4551 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4552
4553         * pending.cs: Do not define a proxy if the base method is virtual,
4554         it will be picked up by the runtime (bug 75270).
4555
4556 2005-06-28  Martin Baulig  <martin@ximian.com>
4557
4558         * cs-parser.jay (interface_method_declaration): Avoid a
4559         reduce/reduce conflict by moving some of the code into a separate
4560         `interface_method_declaration_body' rule; fixes #75368.
4561
4562 2005-06-28  Martin Baulig  <martin@ximian.com>
4563
4564         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4565         array check after the check for TypeBuilder's.
4566
4567 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4568
4569         * convert.cs (FindMostEncompassedType): Add two trivial special
4570         cases (number_of_types == 0 || number_of_types == 1).
4571         (FindMostEncompasingType): Likewise.
4572
4573 2005-06-17  Raja R Harinath  <rharinath@novell.com>
4574
4575         Some cleanups preparing for the fix of #75283.
4576         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
4577         error testing.
4578         (EventExpr.InstanceResolve): Likewise.
4579         (EventExpr.DoResolve): Remove redundant checks.
4580
4581 2005-06-08  Miguel de Icaza  <miguel@novell.com>
4582
4583         * class.cs: Small fix.
4584
4585 2005-06-08  Raja R Harinath  <rharinath@novell.com>
4586
4587         Fix #75160.
4588         * class.cs (GetPartialBases): Fix return value check of
4589         part.GetClassBases.
4590
4591 2005-06-07  Raja R Harinath  <rharinath@novell.com>
4592
4593         Ensure that partial classes are registered in their enclosing
4594         namespace.  Initial part of fix of #75160.
4595         * tree.cs (Tree.RecordDecl): Add new namespace argument.
4596         Register declspace with namespace here, not in
4597         DeclSpace.RecordDecl.
4598         * cs-parser.jay: Pass namespace to RecordDecl.
4599         * class.cs (PartialContainer.Create): Likewise.
4600         (ClassPart.DefineType): New sanity-check.  Throws an exception if
4601         called.
4602         * decl.cs (Declspace.RecordDecl): Remove.
4603         * namespace.cs (NamespaceEntry.DefineName): Remove.
4604
4605 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4606
4607         * rootcontext.cs: Reset TargetExt as well.
4608
4609 2005-06-03  Raja R Harinath  <rharinath@novell.com>
4610
4611         * ecore.cs (Expression.Resolve): Emit CS0654 error when
4612         -langversion:ISO-1.
4613
4614 2005-06-02  Raja R Harinath  <rharinath@novell.com>
4615
4616         Fix #75080, cs0119.cs.
4617         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
4618         of ...
4619         (Expression.Resolve): ... this.  Use it.  Remove bogus code
4620         allowing ExprClass.Type and ExprClass.Namespace for
4621         ResolveFlags.VariableOrValue.
4622         (Expression.Resolve) [1-argument variant]: Change default resolve
4623         flags based on language version.
4624         (Expression.Error_UnexpectedKind): Use a simple string array
4625         rather than an ArrayList.
4626         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
4627         not ExprClass.Type.
4628         (TypeOfVoid.DoResolve): Likewise.
4629         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
4630         flags argument -- it always has the same value.
4631
4632 2005-05-31  Raja R Harinath  <rharinath@novell.com>
4633
4634         Fix #75081.
4635         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
4636         Use it in the error message.
4637         * assign.cs, expression.cs, statement.cs: Update.
4638
4639 2005-05-30  Raja R Harinath  <rharinath@novell.com>
4640
4641         Fix #75088.
4642         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
4643         the "almostMatchedMember" case too.
4644         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
4645         that failed the accessibility checks to 'almost_match'.
4646
4647 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
4648
4649         * attribute.cs: Use internal MethodBuilder methods to set
4650         ExactSpelling and SetLastError on PInvoke methods, instead
4651         of passing them via charset.  Fixes #75060.
4652
4653 2005-05-27  Raja R Harinath  <rharinath@novell.com>
4654
4655         * parameter.cs (Parameter): Remove TODO comment.
4656         (Parameter.DefineParameter): Remove Location parameter.
4657         (Parameters.LabelParameters): Likewise.
4658         * class.cs (Constructor.Emit): Update to change.
4659         (MethodData.Emit): Likewise.
4660         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
4661         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
4662
4663 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
4664
4665         * parameter.cs,
4666           Removed Parameters.Location and added Parameter.Location instead.
4667           Removed Location parameter from Emit() and GetSignature().
4668         * anonymous.cs,
4669           class.cs,
4670           cs-parser.jay,
4671           delegate.cs,
4672           iterators.cs,
4673           statement.cs :
4674           Modified all related calls.
4675
4676 2005-06-21  Martin Baulig  <martin@ximian.com>
4677
4678         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
4679         left-hand side is not a nullable type; fixes #75328.
4680
4681 2005-06-21  Martin Baulig  <martin@ximian.com>
4682
4683         * typemanager.cs
4684         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
4685         (TypeManager.GetFullNameSignature): Likewise.
4686
4687         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
4688         `source.FullName' and `target.FullName' to check whether there are
4689         two conflicting definitions.
4690
4691 2005-06-21  Martin Baulig  <martin@ximian.com>
4692
4693         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
4694         a BoxedCast - also for reference types - to be compatible with csc.
4695
4696 2005-06-21  Martin Baulig  <martin@ximian.com>
4697
4698         * expression.cs (MemberAccess.DoResolve): Add support for nested
4699         types in a generic instance; fixes #75320.
4700
4701 2005-06-20  Martin Baulig  <martin@ximian.com>
4702
4703         * generic.cs (TypeManager.InferType): Also walk the class
4704         hierarchy for generic instances; fixes #75261.
4705
4706 2005-06-17  Martin Baulig  <martin@ximian.com>
4707
4708         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
4709         to make things work for corlib.
4710
4711 2005-06-15  Martin Baulig  <martin@ximian.com>
4712
4713         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
4714         obsolete `SecurityAction' values.
4715
4716 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4717
4718         * rootcontext.cs: Reset TargetExt as well.
4719         
4720 2005-06-09  Martin Baulig  <martin@ximian.com>
4721
4722         * delegate.cs (Delegate.VerifyMethod): Added
4723         `MethodGroupExpr old_mg' argument; inherit its
4724         `HasTypeParameters'; fix #75085.
4725
4726 2005-06-09  Martin Baulig  <martin@ximian.com>
4727
4728         * expression.cs (Invocation.OverloadResolve): Correctly handle
4729         generic methods for the SetMemberIsUsed(); fix #75064.
4730
4731 2005-06-09  Martin Baulig  <martin@ximian.com>
4732
4733         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
4734         fixes #75062.
4735
4736 2005-06-08  Martin Baulig  <martin@ximian.com>
4737
4738         * cs-parser.jay (nullable_type_or_conditional): If we put the
4739         nullable back and our `type' is a `ComposedCast', remove the
4740         nullable from it.  Fixes #75156.
4741
4742         * expression.cs (ComposedCast.RemoveNullable): New public method.
4743
4744 2005-06-08  Martin Baulig  <martin@ximian.com>
4745
4746         The big Iterators rewrite :-)
4747
4748         * iterators.cs: Rewrite this to use the anonymous methods framework.
4749
4750         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
4751         before the TypeContainers; see 2test-21.cs.
4752
4753         * class.cs
4754         (TypeContainer.DefineType): Don't create a new EmitContext if we
4755         already have one (this only happens if we're an Iterator).
4756         (TypeContainer.Define): Also call Define() on all our iterators.
4757         (Method.CreateEmitContext): Added support for iterators.
4758
4759         * anonymous.cs
4760         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
4761         (AnonymousContainer.CreateMethodHost): Moved here from
4762         AnonymousMethod and made abstract.
4763         (AnonymousContainer.CreateScopeType): New abstract method.
4764         (AnonymousContainer.IsIterator): New public property.
4765         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
4766         get the ScopeTypeBuilder rather than manually defining it here. 
4767         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
4768         iterators here.
4769
4770         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
4771         before RootContext.DefineTypes().
4772
4773         * codegen.cs (EmitContext.RemapToProxy): Removed.
4774         (EmitContext.CurrentAnonymousMethod): Changed type from
4775         AnonymousMethod -> AnonymousContainer.
4776         (EmitContext.ResolveTopBlock): Protect from being called twice.
4777         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
4778         (EmitContext.EmitThis): Removed the iterators hacks; use the
4779         anonymous methods framework for that.
4780
4781         * statement.cs
4782         (ToplevelBlock.Container): Make this a property, not a field.
4783         (ToplevelBlock.ReParent): New public method; move the
4784         ToplevelBlock into a new container.
4785         (Foreach.TemporaryVariable): Simplify.
4786
4787 2005-06-05  Martin Baulig  <martin@ximian.com>
4788
4789         * statement.cs (LocalInfo.CompilerGenerated): New flag.
4790         (Block.AddTemporaryVariable): New public method; creates a new
4791         `LocalInfo' for a temporary variable.
4792         (Block.EmitMeta): Create the LocalBuilders for all the temporary
4793         variables here.
4794         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
4795         non-iterator variables.
4796
4797 2005-06-05  Martin Baulig  <martin@ximian.com>
4798
4799         * statement.cs (Foreach.TemporaryVariable): Create the
4800         LocalBuilder in the Emit phase and not in Resolve since in some
4801         situations, we don't have an ILGenerator during Resolve; see
4802         2test-19.cs for an example.
4803
4804 2005-06-04  Martin Baulig  <martin@ximian.com>
4805
4806         The big Foreach rewrite - Part II.
4807
4808         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
4809         with `PropertyInfo ienumerator_getcurrent'.
4810
4811         * codegen.cs (VariableStorage): Removed.
4812
4813         * statement.cs
4814         (Foreach): Derive from Statement, not ExceptionStatement.
4815         (Foreach.CollectionForeach): New nested class.  Moved all the code
4816         dealing with collection foreach here.
4817         (Foreach.ForeachHelperMethods): Removed.
4818         (Foreach.TemporaryVariable): Implement IMemoryLocation.
4819
4820 2005-05-23  Martin Baulig  <martin@ximian.com>
4821
4822         * statement.cs (Try.DoResolve): Don't create a `finally' if we
4823         don't need to.  Fix #75014.
4824
4825 2005-05-26  Raja R Harinath  <rharinath@novell.com>
4826
4827         Improve user-defined conversion handling.
4828         * convert.cs (GetConversionOperators): Rewrite.  Return only the
4829         applicable operators.
4830         (AddConversionOperators): New.  Helper for GetConversionOperators.
4831         (FindMostEncompassedType, FindMostEncompassingType): Verify that
4832         there is only one most encompassed/encompassing type.
4833         (FindMostSpecificSource, FindMostSpecificTarget): Remove
4834         "applicable operator" handling.
4835         (UserConversion): Move cache here from GetConversionOperators.
4836         Directly cache the chosen operator, rather than the whole
4837         MethodGroup.
4838         (ExplicitNumericConversion): Fix buggy implementation of Decimal
4839         case.  Allow conversion of decimal to sbyte and byte too.
4840         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4841         New static methods.  Used to avoid allocating EmptyExpressions in
4842         convert.cs.
4843
4844 2005-05-24  Duncan Mak  <duncan@novell.com>
4845
4846         * ecore.cs (CastFromDecimal): New class for casting a decimal to
4847         another class, used in Convert.ExplicitNumericConversion.
4848         (CastToDecimal): New class, similar to above, but casts to
4849         System.Decimal, used in Convert.ImplicitNumericConversion and also
4850         in explicit convesion from double/float to decimal.
4851
4852         * convert.cs (ImplicitNumericConversion): Handle implicit
4853         conversions to System.Decimal.
4854         (ExplicitNumericConversion): handle explicit conversions to
4855         System.Decimal.
4856
4857         This fixes #68711.
4858         
4859 2005-05-20  Miguel de Icaza  <miguel@novell.com>
4860
4861         * typemanager.cs: Do not throw an exception in the TypeBuilder
4862         case, we take care of it on the TypeCode.
4863
4864 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
4865         
4866         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
4867         is back.
4868         
4869         * cs-parser.jay: Catch more lexical errors.
4870         
4871         * report.cs: Add one more Error method.
4872         
4873         * rootcontext.cs,
4874         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
4875
4876 2005-05-20  Martin Baulig  <martin@ximian.com>
4877
4878         * class.cs (TypeContainer.CircularDepException): Removed.
4879         (TypeContainer.DefineType): Removed the `InTransit' stuff.
4880         (TypeContainer.CheckRecursiveDefinition): Check for circular class
4881         (CS0146) and interface (CS0529) dependencies here.
4882
4883 2005-05-20  Martin Baulig  <martin@ximian.com>
4884
4885         * expression.cs (New.DoResolve): Move the CS0712 check above the
4886         CS0144 check; otherwise it can never be reached.
4887
4888 2005-05-20  Martin Baulig  <martin@ximian.com>
4889
4890         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
4891
4892 2005-05-20  Martin Baulig  <martin@ximian.com>
4893
4894         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
4895
4896         * typemanager.cs (TypeManager.IsAttributeType): New public method.
4897
4898 2005-05-19  Martin Baulig  <martin@ximian.com>
4899
4900         * delegate.cs
4901         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
4902         to disable error reporting.
4903
4904         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
4905         here since we don't want to report an error; see the new test-336.cs.
4906
4907 2005-05-19  Raja R Harinath  <rharinath@novell.com>
4908
4909         * statement.cs (ToplevelBlock.GetParameterReference)
4910         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
4911         Move here from class Block.
4912         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
4913         * expression.cs (ParameterReference.DoResolveBase): Likewise.
4914
4915 2005-05-18  Martin Baulig  <martin@ximian.com>
4916
4917         Fix #74978.
4918
4919         * flowanalysis.cs
4920         (FlowBranching.Reachability): Add non-static public And() and Or()
4921         methods.
4922         (FlowBranchingSwitch): New class; do the `break_origins' thing
4923         like in FlowBranchingLoop.
4924         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
4925         reachability, not just locals and parameters.
4926         (FlowBranching.MergeChild): Remove some of the hacks for loop and
4927         switch; MergeBreakOrigins() now takes care of that.
4928
4929 2005-05-18  Martin Baulig  <martin@ximian.com>
4930
4931         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4932         a loop and may leave it, reset the barrier; fixes #74974.
4933
4934 2005-05-16  Raja R Harinath  <rharinath@novell.com>
4935
4936         Fix test-382.cs.  Emit values of decimal constants.
4937         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
4938         Carved out of ...
4939         (TypeContainer.AddField): ... this.
4940         (TypeContainer.EmitFieldInitializers): Allow the list of fields
4941         with initializers to include 'Const's.
4942         (ClassPart.RegisterFieldForInitialization): Forward to
4943         PartialContainer.
4944         * const.cs (Const.Const): Pass initializer to base class.
4945         (Const.Define): In case of decimal constants, register them for
4946         initialization in a static constructor.
4947
4948 2005-05-14  Martin Baulig  <martin@ximian.com>
4949
4950         * statement.cs (Block.Resolve): Correctly handle unreachable code;
4951         do not call ResolveUnreachable() on unreachable statements in
4952         here, see the comment in the source code.
4953
4954 2005-05-13  Raja R Harinath  <rharinath@novell.com>
4955
4956         Fix #74934.
4957         * expression.cs (BinaryResolveOperator): If one of the operands of
4958         an equality comparison is 'null' and the other is a pointer type,
4959         convert the null to a NullPointer.
4960         * convert.cs (ImplicitReferenceConversion): If the expression is a
4961         NullLiteral and the target type is a pointer type, return a
4962         NullPointer instead.
4963         (ImplicitConversionStandard): Likewise.
4964
4965 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
4966         
4967         * cs-parser.jay: Set readonly context based on special constructs.
4968         
4969         * expression.cs (LocalVariableReference.DoResolveBase): Improved
4970         readonly variable error handling.
4971         
4972         * rootcontext.cs (EmitCode): Don't verify members when error
4973         occurred.
4974         
4975         * statement.cs (LocalInfo): Add reaodnly context information.
4976         (SetReadOnlyContext, GetReadOnlyContext): New methods.
4977
4978 2005-05-17  Martin Baulig  <martin@ximian.com>
4979
4980         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
4981         #70970. 
4982
4983 2005-05-13  Martin Baulig  <martin@ximian.com>
4984
4985         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
4986         handle unreachable blocks.
4987
4988 2005-05-13  Martin Baulig  <martin@ximian.com>
4989
4990         * class.cs
4991         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
4992         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
4993         #74905. 
4994
4995 2005-05-13  Martin Baulig  <martin@ximian.com>
4996
4997         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
4998         instance variable, not a local.  Fix #74873.
4999         (Block.ResolveUnreachable): Set it to true here.
5000
5001 2005-05-12  Martin Baulig  <martin@ximian.com>
5002
5003         * cs-parser.jay (property_declaration): Pass the `current_class',
5004         not the `current_container' to Property's .ctor.  Fixes #74912.
5005
5006 2005-05-11  Martin Baulig  <martin@ximian.com>
5007
5008         * typemanager.cs (Closure): Copy this from MCS and merge all the
5009         GMCS-specific changes into it.
5010
5011 2005-05-12  Raja R Harinath  <harinath@gmail.com>
5012
5013         Fix #74920.
5014         * typemanager.cs (unmanaged_enclosing_types): New.
5015         (IsUnmanagedType): Avoid infloops by using
5016         'unmanaged_enclosing_types' to talk with recursive invocations.
5017
5018 2005-05-11  Duncan Mak  <duncan@novell.com>
5019
5020         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
5021         continuing to process for 'arg'.
5022         (handle_preprocessing_directive): Check the argument of the #endif
5023         directive and report error CS1025 if there are any trailing
5024         characters.
5025
5026         According to the C# spec, having even whitespace after the #endif
5027         directive is illegal; however, because we call arg.TrimEnd ()
5028         beforehand, we have the same behavior as csc, allowing whitespace
5029         after the directive.
5030
5031         Fixes #74892.
5032
5033 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
5034
5035         Fix #74863.
5036         
5037         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
5038         (Constructor.GetObsoleteAttribute): Implemented correctly.
5039
5040 2005-05-10  Martin Baulig  <martin@ximian.com>
5041
5042         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
5043         resolve the type; fixes #74864.
5044         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
5045         in DoResolve(); fixes #74862.
5046
5047 2005-05-10  Martin Baulig  <martin@ximian.com>
5048
5049         * support.cs (ReflectionParameters.ParameterModifier): Use
5050         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
5051         and `ParameterAttributes.In'.  Fixes #74884.
5052
5053 2005-05-10  Martin Baulig  <martin@ximian.com>
5054
5055         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
5056         the cache if we're just looking for `MemberTypes.NestedType' in a
5057         generic instance.
5058
5059         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
5060         constraints if we're still resolving the type tree.
5061         (Expression.MemberLookup): If we're resolving the type tree, only
5062         look for `MemberTypes.NestedType' since we're only interested in
5063         getting types.
5064
5065         * class.cs (TypeContainer.DefineType): Don't resolve the type
5066         parameters here; do this later in ResolveType() after the type
5067         tree has been resolved.
5068         (TypeContainer.ResolveType): New public method; this is called
5069         after the type tree is resolved and before the types are being
5070         populated.  We resolve the generic constraints here.
5071         (TypeContainer.DoDefineMember): Check the constraints on our base
5072         class and interfaces.
5073
5074         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
5075         set the `ResolvingTypeTree' flag on the EmitContext.
5076
5077         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
5078
5079 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
5080
5081         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
5082         
5083         * expression.cs (Argument.GetParameterModifier): Turned to property.
5084         (Invocation.Error_InvalidArguments): Add more descriptive errors.
5085         
5086         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
5087         its C# equivalent.
5088         
5089 2005-05-09  Raja R Harinath  <rharinath@novell.com>
5090
5091         Fix #74852.
5092         * decl.cs (MemberCache.AddMethods): Register override methods,
5093         rather than non-override methods.
5094         * typemanager.cs (RegisterOverride): New.
5095         (IsOverride): Update.
5096
5097 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5098
5099         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
5100
5101 2005-05-06  Martin Baulig  <martin@ximian.com>
5102
5103         * attribute.cs
5104         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
5105         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
5106
5107 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5108
5109         Fix #73105.
5110         
5111         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
5112         recursive declaration.
5113         
5114         * statement.cs (Block.ResolveMeta): Report any error in resolving.
5115         
5116 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
5117
5118         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
5119         
5120         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
5121
5122 2005-05-05  Raja R Harinath  <rharinath@novell.com>
5123
5124         Fix #74797.
5125         * decl.cs (DeclSpace.FamilyAccessible): 
5126         Use TypeManager.IsNestedFamilyAccessible.
5127
5128         Fix reopened #64812.
5129         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
5130         internal'.
5131
5132 2005-05-04  Raja R Harinath  <rharinath@novell.com>
5133             Abin Thomas  <projectmonokochi@rediffmail.com>
5134             Anoob V E  <projectmonokochi@rediffmail.com>
5135             Harilal P R  <projectmonokochi@rediffmail.com>
5136
5137         Fix #64812.
5138         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
5139         allow access to all static members.
5140
5141 2005-05-04  Martin Baulig  <martin@ximian.com>
5142
5143         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
5144
5145 2005-05-04  Martin Baulig  <martin@ximian.com>
5146
5147         Fix #74655.
5148
5149         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
5150         section at the end; make things work if `default' is not the last
5151         section.        
5152
5153 2005-05-04  Martin Baulig  <martin@ximian.com>
5154
5155         Fix #70400.
5156
5157         * statement.cs (Switch): Replaced the `got_default' field with a
5158         `default_section' one.
5159         (Switch.CheckSwitch): Set `default_section' here.
5160         (Switch.Resolve): If we're a constant switch and the constant is
5161         not found, use the default section.
5162
5163 2005-05-03  Martin Baulig  <martin@ximian.com>
5164
5165         * expression.cs (ArrayAccess.EmitGetLength): New public method.
5166
5167         * statement.cs (Foreach.ArrayForeach): New nested class.
5168         (Foreach.TemporaryVariable): New nested class.
5169         (Foreach.EmitArrayForeach): Removed; this is now in the new
5170         ArrayForeach class.
5171
5172 2005-05-03  Raja R Harinath  <rharinath@novell.com>
5173
5174         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
5175         more conservative.
5176         (VerifyPendingMethods): Revert change below.
5177
5178         * typemanager.cs (IsOverride, RegisterNonOverride): New.
5179         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
5180         that used to trigger warning -28.  Remove warning -28.
5181         * expression.cs (Invocation.OverloadResolve): Use
5182         TypeManager.IsOverride to distinguish override methods.
5183
5184         Fix #74773.
5185         * pending.cs (VerifyPendingMethods): If a base type implements the
5186         requested interface, don't bother checking individual methods of
5187         the base type.  As a side-effect, this prevents the creation of
5188         unnecessary proxies.
5189
5190 2005-05-02  Martin Baulig  <martin@ximian.com>
5191
5192         Fix #70182.
5193
5194         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
5195         Also `And' the locals if the old vector is null.
5196         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
5197         null; in this case we basically reset all the variables.        
5198
5199 2005-05-02  Martin Baulig  <martin@ximian.com>
5200
5201         Fix #74529.
5202
5203         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
5204         Added `FlowBranching branching' argument; always `and' the
5205         variables instead of `or'ing them unless we're an infinite loop.
5206
5207         * statement.cs (While.Resolve): Create a new sibling unless we're
5208         infinite.       
5209
5210 2005-05-02  Martin Baulig  <martin@ximian.com>
5211
5212         Fix #70140.
5213
5214         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
5215         arguments; use it instead of creating a new TopLevelBlock.
5216         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
5217         our ConstructorInitializer.
5218
5219         * statement.cs
5220         (TopLevelBlock.TopLevelBranching): New public property.
5221         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
5222         and create our `TopLevelBranching'.
5223
5224         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
5225         anonymous method host, use `block.TopLevelBranching' rather than
5226         creating a new branching.
5227
5228 2005-04-20  Miguel de Icaza  <miguel@novell.com>
5229
5230         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
5231         a ScopeInfo, if any of the current children is a child of the new
5232         entry, move those children there.
5233
5234 2005-04-30  Martin Baulig  <martin@ximian.com>
5235
5236         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
5237         at the beginning of a SwitchSection.  Fix #73335.
5238
5239 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
5240
5241         Fix #74378
5242         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
5243         
5244         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
5245         (FieldExpr.DoResolve): Obsolete members are ignored for field
5246         initializers.
5247         
5248 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
5249
5250         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
5251         of arrays detection.
5252
5253         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
5254         verification.
5255         (Field.VerifyClsCompliance): Volatile fields are not compliant.
5256
5257         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
5258         arrays report.
5259
5260 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
5261
5262         * cs-parser.jay: Use the prefered version of -unsafe in error
5263         message.
5264
5265 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
5266
5267         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
5268         circumstances.
5269
5270 2005-04-20  John Luke  <john.luke@gmail.com>
5271
5272         * driver.cs: fix typo in error message, --outout to --output
5273
5274 2005-04-30  Martin Baulig  <martin@ximian.com>
5275
5276         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
5277         handle the .NET 2.x security attributes.
5278
5279 2005-04-30  Martin Baulig  <martin@ximian.com>
5280
5281         * typemanager.cs
5282         (TypeManager.ExpandInterfaces): Don't add things twice.
5283
5284         * class.cs
5285         (TypeContainer.VerifyClsCompliance): Allow generic instances.
5286
5287 2005-04-29  Martin Baulig  <martin@ximian.com>
5288
5289         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
5290
5291         * anonymous.cs: Added support for anonymous generic methods.
5292
5293 2005-04-29  Martin Baulig  <martin@ximian.com>
5294
5295         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
5296         generic instances.
5297
5298 2005-04-29  Martin Baulig  <martin@ximian.com>
5299
5300         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
5301
5302         * expression.cs (New.DoResolve): Fix the CS0304 check.
5303
5304 2005-04-29  Martin Baulig  <martin@ximian.com>
5305
5306         * typemanager.cs (TypeManager.GetFullName): Updated to the new
5307         naming schema.
5308
5309         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
5310         explicit interface implementation, compare the interface types.
5311         (MethodData.Define): Use the new naming scheme from the latest
5312         .NET 2.x beta2.
5313         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
5314
5315         * decl.cs (MemberName.GetMemberName): Removed.
5316         (MemberName.MethodName, FullName): New properties.
5317
5318 2005-04-25  Raja R Harinath  <rharinath@novell.com>
5319
5320         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
5321
5322 2005-04-22  Martin Baulig  <martin@ximian.com>
5323
5324         * generic.cs (GenericMethod): Create the EmitContext in the
5325         `Define()'; in `Define(MethodBuilder)', create the type parameters
5326         before calling `Define()'.  Fixes #73933.
5327
5328 2005-04-22  Martin Baulig  <martin@ximian.com>
5329
5330         * generic.cs
5331         (Constraints.Resolve): Make things work wrt. the new type lookup system.
5332         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
5333
5334         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
5335         ConstructedType, check its constraints.
5336
5337 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
5338
5339         * codegen.cs (InRefOutArgumentResolving): New field.
5340         
5341         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
5342         fields outside contructor.
5343         
5344         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
5345         
5346 2005-04-19  Miguel de Icaza  <miguel@novell.com>
5347
5348         * anonymous.cs (CaptureContext.EmitParameterInstance): The
5349         parameter code was not completed ever, so it was not as up-to-date
5350         as local variables.  Must finish it.
5351
5352         The bug fix was to compare the Toplevel of the block, not the
5353         current block.  Thanks for Ben for pointing this out. 
5354
5355 2005-04-19  Raja R Harinath  <rharinath@novell.com>
5356
5357         * decl.cs (AddMethods): Use the declaring type of the problem
5358         method to determine if we want to squash a warning.
5359
5360 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
5361
5362         * attribute.cs: Removed debug output.
5363
5364         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
5365         
5366         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
5367         Report.Stderr.
5368         
5369 2005-04-18  Raja R Harinath  <rharinath@novell.com>
5370
5371         Fix #74481.
5372         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
5373         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
5374         all null comparisons against reference types.
5375
5376 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
5377
5378         Fix# 74565
5379         * class.cs (TypeContainer.CircularDepException) New nested
5380         exception class.
5381         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
5382         (TypeContainer.DefineType): Removed error, reset InTransit before
5383         exit.
5384         (Class.DefineType): Throw exception when is in Transit.
5385         Catch exception and report error.
5386         (Struct.DefineType): Throw exception when is in Transit.
5387         Catch exception and report error.
5388         (Interface.DefineType): Throw exception when is in Transit.
5389         Catch exception and report error.
5390
5391         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
5392         handle nested exception handlers.
5393
5394         * flowanalysis.cs (InTryWithCatch): New method, search for try with
5395         a catch.
5396
5397         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
5398         InFinally and InCatch storage.
5399
5400         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
5401         (Catch.Resolve): Set and Restore ec.InCatch.
5402         (Try.Resolve): Set and Restore ec.InFinally.
5403         (Try.HasCatch): True when try has catch.
5404
5405 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
5406
5407         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
5408           for the same event member, so exclude such cases from warning 419.
5409           Fixed bug #74633.
5410
5411 2005-04-16  Miguel de Icaza  <miguel@novell.com>
5412
5413         * expression.cs (Binary.ResolveOperator): Apply patch from John
5414         Luke to fix bug 59864: operators &, | and ^ on enumerations
5415         require that the same enum type on both sides.
5416
5417         * driver.cs: Add warnings to old flag usage, this is to assist
5418         people who produce Makefiles and hope that the Makefiles will be
5419         used on Windows.
5420
5421         * class.cs (TypeContainer.EmitType): Moved the definition of the
5422         special $PRIVATE$ field from the resolve phase to the Emit phase.
5423         During resolve we do not know if we are a struct with
5424         HasExplicitLayout, we know this only after the attributes for the
5425         type are emitted.
5426
5427         Set the FieldOffset to zero on the dummy field that we create for
5428         the class.   Fixes 74590.
5429
5430 2005-04-16  Raja R Harinath  <rharinath@novell.com>
5431
5432         Fix #73834.
5433         * ecore.cs (PropertyExpr.resolved): New.
5434         (DoResolve): Use it to handle a case of double resolution here.
5435         Handle a case of identical-name-and-type-name.
5436         * expression.cs (ArrayCreation.CheckIndices): Avoid double
5437         resolution by storing the results of expression resolution back
5438         into the "probes" array.
5439
5440 2005-04-15  Raja R Harinath  <rharinath@novell.com>
5441
5442         Fix cs0208-7.cs and cs0208-8.cs.
5443         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5444         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5445         error reporting to point out the reason a struct is not unmanaged.
5446
5447 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5448
5449         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5450           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5451
5452 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5453
5454         Fix #74528.
5455         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5456         IdenticalNameAndTypeName here.
5457         (EventExpr.InstanceResolve): Likewise.
5458
5459 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5460
5461         C# 2.0 DefaultCharSetAttribute implementation
5462         
5463         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5464         which allows us to set GlobalNamespace for every resolve.
5465         (Attribute.ResolveArguments): Cut from Resolve.
5466         (Attribute.GetCharSetValue): Returns CharSet named argument.
5467         (Attribute.DefinePInvokeMethod): Gets default charset from
5468         module settings.
5469         (GlobalAttribute.ResolveAsTypeStep): Override.
5470         (GlobalAttribute.ResolveArguments): Override.
5471         
5472         * class.cs (TypeAttr): Is protected.
5473         
5474         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5475         (ModuleClass.DefaultCharSetType): New memeber.
5476         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5477         
5478         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5479         charset from module.
5480         
5481         * delegate.cs (TypeAttr): Override.
5482         (Delegate.DefineType): Use this TypeAttr.
5483         
5484         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5485         at very early stage (before types are defined) to resolve model
5486         module attributes. It will probably not work with corlib but it
5487         should be ok.
5488         
5489         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5490         charset from module.
5491         
5492         * typemanager.cs (default_charset_type): New type.
5493
5494 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5495
5496         * decl.cs (MemberCache.AddMethods): Don't warn if
5497         System.Object.Finalize has buggy MethodAttributes.
5498
5499         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5500         removed below.
5501
5502 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5503
5504         * doc.cs : detect ambiguous reference to overloaded members.
5505           Fixed bug #71603. MS 1.1 csc does not detect it.
5506
5507 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5508
5509         * doc.cs : delegates must not be referenced with parameters.
5510           Fixed bug #71605.
5511
5512 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5513
5514         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5515
5516 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5517
5518         * driver.cs (MainDriver): Stop processing if the CLS stage found
5519         errors. 
5520
5521         (CompilerCallableEntryPoint.InvokeCompiler): Always
5522         reset after execution;   Take a TextWriter argument for the
5523         output.
5524
5525         * report.cs: Use the error stream instead of hardcoding stderr. 
5526
5527 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5528
5529         * class.cs: Reduce code paths to test, too small of an
5530         optimization to make it worth the extra testing.  Always perform
5531         it. 
5532
5533 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5534
5535         Fix #74510.
5536         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5537         operators that had errors reported on them.
5538
5539 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5540
5541         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5542         argument types.
5543         (Attribute.Resolve): Add named argument type checking.
5544         
5545         * class.cs (FixedField.Define): Use IsPrimitiveType
5546         
5547         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5548         
5549         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5550         unsafe parameter types.
5551         
5552         * statement.cs (Using.ResolveExpression): Add better error description.
5553         
5554         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5555         
5556 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5557
5558         Fix #74484.
5559         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5560         AttributeUsageAttribute in the emitcontext of the attribute class,
5561         not in the emitcontext of the attributable entity it was attached to.
5562         * cs-parser.jay: Use 'current_class', not 'current_container',
5563         when creating a GlobalAttribute.
5564
5565 2005-04-08  Alp Toker  <alp@atoker.com>
5566
5567         * pending.cs: The fix to #58413 failed to compile methods implementing
5568         interfaces with/without params modifiers and vice versa, even though
5569         params modifiers aren't part of the signature. Make the modifier check
5570         less strict as in csc.
5571
5572 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
5573             Anoob V E  <projectmonokochi@rediffmail.com>
5574             Harilal P R  <projectmonokochi@rediffmail.com>
5575
5576         Fix #58413.
5577         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
5578         modifiers of pending methods.
5579         (PendingImplementation.PendingImplementation): Initialize it.
5580         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
5581         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
5582         with ParameterData.  Add check for modifiers.
5583         * class.cs (MethodData.Define): Update to changes.
5584
5585 2005-04-07  Raja R Harinath  <rharinath@novell.com>
5586
5587         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
5588
5589 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
5590
5591         * class.cs (PropertyMethod.Define): Check private accessor in abstract
5592         property.
5593         
5594         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
5595         
5596         * rootcontext.cs,
5597         * typemanager.cs: Registered RequiredAttributeAttribute.
5598         
5599 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
5600
5601         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
5602         Warning CS0169 is back at level 3.
5603         (IMethodData.SetMemberIsUsed): New method.
5604         
5605         * decl.cs (IsUsed): New value; moved from FieldBase.Status
5606         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
5607         
5608         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
5609
5610         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
5611         contants.
5612         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
5613         is used.
5614         
5615         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
5616         is used.
5617         
5618         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
5619         to avoid the problems with nested types.
5620
5621 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
5622             Anoob V.E  <projectmonokochi@rediffmail.com>
5623             Harilal P.R  <projectmonokochi@rediffmail.com>
5624             Raja R Harinath  <rharinath@novell.com>
5625
5626         Fix #73820.
5627         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
5628         attribute.
5629         * typemanager (GetConstructor): Make public.
5630
5631 2005-04-05  John Luke  <john.luke@gmail.com>
5632             Raja R Harinath  <rharinath@novell.com>
5633
5634         Fix #62232.
5635         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
5636         struct too.  Return false quicker in a few cases.
5637         (VerifyUnManaged): Use it.
5638
5639 2005-04-05  Raja R Harinath  <rharinath@novell.com>
5640
5641         Fix #74041.
5642         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
5643         not 'unreachable_seen'.
5644
5645 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
5646
5647         * attribute.cs (Attribute.GetValue): Removed unused.
5648         
5649         * codegen.cs (CodeGen.TrimExt): Removed unused.
5650         
5651         * cs-parser.jay (output): Removed unused.
5652         
5653         * cs-tokenizer.cs (hex_digits): Removed unused.
5654         
5655         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
5656         
5657         * expression.cs (Indirection.LoadExprValue): Removed unused.
5658         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
5659         
5660         * iterators.cs (Iterator.param_types): Removed unused.
5661         
5662         * statement.cs (Goto.block): Removed unused.
5663         (ToplevelBlock.did): Removed unused.
5664         (Switch.ResolveConstantSwitch): Removed unused.
5665
5666 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
5667
5668         * rootcontext.cs: Allow mcs to bootstrap with the compilation
5669         resetting thingy.
5670
5671 2005-04-19  Martin Baulig  <martin@ximian.com>
5672
5673         Merged r42462 from MCS and made it work for GMCS.
5674
5675         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
5676
5677         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
5678
5679 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5680
5681         Fix #74232 and cs0208-3.cs.
5682         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
5683         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
5684         unmanaged type.  Don't use FieldBuilders when 't' is a
5685         TypeBuilder.  Use ModFlags and MemberType fields.
5686         * class.cs (MemberBase.member_type): Rename from MemberType.
5687         (MemberBase.MemberType): New property.  Determines member_type on
5688         demand.
5689         (MemberBase.DoDefine): Don't initialize MemberType here.
5690         (FieldMember.Define): Likewise.
5691
5692 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
5693
5694         Fix #74241
5695         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
5696         Attributes are emitted there.
5697         
5698 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5699
5700         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
5701         keyword in 'partial enum' too.
5702         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
5703         is not allowed).
5704         Report from Kamil Skalski <nazgul@omega.pl>.
5705
5706         Fix #74309.
5707         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
5708         have partial containers too.
5709
5710         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
5711         in block' checks to Block.CheckInvariantMeaningInBlock.
5712         * statement.cs (Block.GetKnownVariableInfo): Make private.
5713         (Block.IsVariableUsedInChildBlock): Remove.
5714         (Block.IsVariableUsedInBlock): Likewise.
5715         (Block.CheckInvariantMeaningInBlock): New.  Show location of
5716         conflicting declaration.
5717         (Block.AddVariable): Make error messages less long-winded and more
5718         specific.  Show location of conflicting declaration.
5719         * parameter.cs (Parameters.Location): New readonly property.
5720
5721 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5722
5723         Clean up semantics of invoking ResolveMemberAccess.
5724         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
5725         can have an instance, ensure that we pass in a non-TypeExpression
5726         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
5727         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
5728         argument.  Update to changes and simplify.
5729         (FieldExpr.Emitinstance): Remove CS0120 check.
5730         (PropertyExpr.EmitInstance): Likewise.
5731         * expression.cs (Argument.Resolve): Likewise.
5732         (Invocation.DoResolve): Update to changes in semantics of
5733         InstanceExpression.
5734
5735 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
5736
5737         Fix #74241
5738         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
5739         customization.
5740         
5741         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
5742
5743 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5744
5745         Fix difference in behaviour with commandline invocation.
5746         * driver.cs (Driver.Reset): New.
5747         (CompilerCallableEntryPoint): Call it.
5748
5749         * statement.cs (If.Resolve): Avoid spurious "uninitialized
5750         variable" warnings if the boolean expression failed to resolve.
5751
5752 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
5753
5754         * attribute.cs: Fix the union of several permissions when some of them
5755         are unrestricted (so the result isn't an unrestricted permission set).
5756         Fix #74036.
5757
5758 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5759
5760         * ecore.cs (MemberExpr): New class.  Convert from interface
5761         IMemberExpr.
5762         (MemberExpr.ResolveMemberAccess): Refactor and move here from
5763         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
5764         error checks.
5765         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
5766         (MethodGroupExpr.IsExplicitImpl): Remove.
5767         (Expression.GetFieldFromEvent): Remove.
5768         (SimpleName.MemberStaticCheck): Remove.
5769         (SimpleName.DoSimpleNameResolve): Update to changes.
5770         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
5771         (MemberAccess.IdenticalNameAndTypeName): Remove.
5772         (MemberAccess.error176): Move to MemberExpr.
5773         (MemberAccess.DoResolve): Update to changes.
5774         (BaseAccess.DoResolve): Likewise.
5775
5776 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
5777
5778         C# 2.0 Conditional attribute class implementation
5779         
5780         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
5781         Analyzes class whether it has attribute which has ConditionalAttribute
5782         and its condition is not defined.
5783         
5784         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
5785         (Class.IsExcluded): New method. Search for at least one defined
5786         condition in ConditionalAttribute of attribute class.
5787
5788 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5789
5790         * ecore.cs (PropertyExpr): Derive from Expression, not
5791         ExpressionStatement.
5792         (PropertyExpr.EmitStatement): Remove.
5793
5794 2005-03-29  Raja R Harinath  <rharinath@novell.com>
5795
5796         Fix #74060.
5797         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
5798         internal field "value__" of an enum be private.  The examples for
5799         "value__" that I found on MSDN all used FieldAttributes.Private.
5800
5801         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
5802         Don't mention IL method attribute names.
5803
5804         Fix #47991.  Remove a TODO.
5805         * statement.cs (Block.Toplevel): Make into a field.
5806         (Block.Parameters): Move into ToplevelBlock.
5807         (Block.known_variables): Rename from child_variable_names.
5808         (Block.Block): Remove variants that take Parameters.  Initialize
5809         'Toplevel' with the immediately surrounding toplevel block.
5810         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
5811         LocalInfo parameter.
5812         (Block.GetKnownVariableInfo): New.
5813         (Block.IsVariableNameUsedInChildBlock): Update.
5814         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
5815         the block, even though it may not be in scope.
5816         (Block.AddVariable): Remove Parameters parameter.  Use
5817         Toplevel.Parameters instead.
5818         (Block.AddConstant): Remove Parameters parameter.
5819         (Block.GetParameterReference): Update to use Toplevel.Parameters.
5820         (Block.IsParamaterReference): Likewise.
5821         (Block.IsLocalParameter): Likewise.  Simplify a lot.
5822         (ToplevelBlock.Parameters): New.  Moved from Block.
5823         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
5824         initialize Parameters to a non-null value.
5825         * cs-parser.jay: Update to changes.
5826         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
5827         simple names that mean different things in the same block.  Use
5828         Block.IsVariableNameUsedInBlock.
5829
5830 2005-03-28  Raja R Harinath  <rharinath@novell.com>
5831
5832         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
5833
5834 2005-03-26  Raja R Harinath  <harinath@acm.org>
5835
5836         Fix #73038.
5837         * assign.cs (Assign.DoResolve): When the RHS of an assignment
5838         fails to resolve, ensure that the LHS is still resolved as an
5839         lvalue.
5840
5841 2005-03-25  Raja R Harinath  <harinath@acm.org>
5842
5843         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
5844         ec.ContainerType.
5845         (Enum.current_ec): Remove.
5846         (Enum.LookupEnumValue): Remove EmitContext argument.
5847         Just uses the one created during DefineType.
5848         (Enum.FindMembers): Update.
5849         * expression.cs (MemberAccess.DoResolve): Update.
5850
5851 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
5852
5853         * assign.cs (Assign.DoResolve): Check for CS1717 when
5854         source and target are same (uses Equals).
5855
5856         * expression.cs (LocalVariableReference, ParameterReference,
5857         This): Implemented Equals, GetHashCode.
5858
5859         * statement.cs (Block.GetParameterReference): Removed useless
5860         local variable.
5861
5862 2005-03-22  Raja R Harinath  <rharinath@novell.com>
5863
5864         Fix cs0128.cs
5865         * statement.cs (Block.AddVariable): Ensure that we skip implicit
5866         blocks before deciding whether the error is cs0136 or cs0128.
5867
5868         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
5869         (using_alias_directive, using_namespace_directive): Pass
5870         MemberName, not an expression to Namespace.UsingAlias and
5871         Namespace.Using.
5872         (MakeName): Use the MemberName of the namespace.
5873         * namespace.cs (Namespace.MemberName): New.
5874         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
5875         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
5876         Likewise.
5877         * decl.cs (MemberName.Name): Make readonly.
5878         (MemberName.FromDotted): New "constructor".
5879         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
5880         (MemberCore.Name): Compute from MemberName on demand.
5881         (MemberCore.SetMemberName): Provide a way to change the
5882         MemberName.
5883         (MemberCore.AddToContainer): Don't take a fullname parameter.
5884         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
5885         fully qualified name of the container to the member name.
5886         (TypeContainer.AddToTypeContainer): Use a fully qualified name
5887         only if the type is a member of the root container.
5888         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
5889         MemberName.Left rather than searching for an embedded ".".
5890         (PartialContainer.CreatePart): Update to changes in RootContext.
5891         (MemberBase.ShortName): Turn into a property.  Use
5892         MemberCore.SetMemberName.
5893         (MemberBase.ExplicitInterfaceName): Remove.
5894         (MemberBase.UpdateMemberName): Remove.
5895         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
5896         (PropertyBase.SetMemberName): New override.
5897         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
5898         (Tree.GetDecl): New.
5899         (Tree.AllDecls): Rename from Decls.
5900         * attribute.cs, enum.cs, report.cs: Update to changes.
5901         * driver.cs (MainDriver): Use MemberName.FromDotted on
5902         RootContext.MainClass.
5903
5904 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
5905
5906         * class.cs (FixedField.Define): Check for CS1664 and more sanity
5907         checks.
5908
5909         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
5910
5911 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
5912
5913         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
5914         property accessor modifiers.
5915
5916         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
5917         fixed buffer attribute (CS1716).
5918         (PropertyMethod.HasCustomAccessModifier): When property accessor
5919         has custom modifier.
5920
5921         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
5922         modifiers.
5923         (PropertyExpr.DoResolveLValue): Add CS0272.
5924
5925 2005-03-17  Miguel de Icaza  <miguel@novell.com>
5926
5927         * convert.cs: When converting to a pointer, use the proper Conv.U
5928         or Conv.I depending on the source data type.
5929
5930         * cs-tokenizer.cs: Make the size for large decimal constants,
5931         fixes #72957.
5932
5933 2005-03-17  Martin Baulig  <martin@ximian.com>
5934
5935         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
5936         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
5937
5938 2005-03-17  Martin Baulig  <martin@ximian.com>
5939
5940         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
5941         to bool so we can return an error condition.
5942         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
5943         returned an error.
5944
5945 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
5946
5947         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
5948         attributes.
5949
5950 2005-03-16  Raja R Harinath  <rharinath@novell.com>
5951
5952         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
5953         Refactor to avoid traversing the list of assemblies, and to avoid
5954         string concatenation.
5955         * typemanager.cs (guid_attr_type): Remove.
5956         (negative_hits, pointers, references): Remove hashes.
5957         (type_hash): New.
5958         (GetConstructedType): New.  Uses type_hash to handle constructed
5959         types (arrays, references, pointers).
5960         (GetReferenceType, GetPointerType): Use it.
5961         (GetNestedType): New.  Uses type_hash to handle nested types of
5962         reflected types.
5963         (LookupType, LookupTypeDirect): Remove.
5964         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
5965         'types' hash and LookupTypeReflection directly.
5966         (params_string, params_object): Use GetConstructedType.
5967         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
5968         top-level types.
5969         (Namespace.Lookup): Use cached_types.
5970         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
5971         provided by old TypeManager.LookupType.
5972         * rootcontext.cs (MakeFQN): Remove.
5973         * decl.cs (DeclSpace.MakeFQN): Likewise.
5974         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
5975         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
5976         TypeManager.GetConstructedType.
5977         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
5978
5979 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
5980
5981         * cs-parser.jay: Fix build.
5982
5983 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
5984
5985         * class.cs (TypeContainer.CircularDepException) New nested
5986         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
5987
5988         * cs-parser.jay: Reports CS1527 for any namespace element.
5989
5990         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
5991         Added CS0407.
5992
5993         * expression.cs (ParameterReference.IsAssigned): Changed error to
5994         CS0269.
5995         (Error_WrongNumArguments): Moved CS0245 detection here.
5996
5997         * statement.cs (Return.Resolve): Add CS1622 report.
5998
5999 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
6000
6001         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
6002
6003 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
6004
6005         * attribute.cs expression.cs: Get rid of some allocations.
6006
6007 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
6008
6009         * doc.cs : just eliminate the latest change.
6010
6011 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6012
6013         * doc.cs : commented out the latest change. It breaks xml-030.cs
6014
6015 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6016
6017         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
6018           fail. So invoke CreateType() in FindDocumentedType().
6019
6020 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6021
6022         * cs-tokenizer.cs : added IsKeyword().
6023         * doc.cs : Detect keyword incorrectly used as identifier.
6024           Allow identifiers prefixed by @.
6025
6026 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
6027
6028         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
6029         It caused exception in namespace resolving (again!).
6030         
6031         * class.cs (Class.ctor): Removed exit.
6032         (PropertyMethod.ctor): ditto.
6033         
6034         * codegen.cs (Codegen.Reset): Reset static data.
6035         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
6036         
6037         * cs-tokenizer.cs (Cleanup): Removed.
6038         
6039         * driver.cs (GetSystemDir): Rewrote to one line command.
6040         It caused problem with unloaded dynamic modules.
6041         (UnixParseOption): Removed Exit.
6042         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
6043         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
6044         Now can be mcs used as library.
6045         
6046         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
6047         empty location.
6048         
6049         * location.cs (Reset): Reset static data.
6050         
6051         * namespace.cs (Reset): Reset static data.
6052         
6053         * report.cs (Report.Reset): Reset static data.
6054         
6055         * rootcontext.cs (RootContext.Reset): Reset static data.
6056         
6057         * tree.cs (RootTypes.ctor): Use Location.Null
6058         
6059         * typemanager.cs (TypeManager.Reset): Reset static data.
6060         (CoreLookupType): Removed Exit.
6061         (TypeHandle.Reset): Reset static data.
6062         
6063 2005-03-10  Raja R Harinath  <rharinath@novell.com>
6064
6065         Fix #73516.
6066         * typemanager.cs (ComputeNamespaces): Import namespaces from
6067         referenced modules too.
6068
6069 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6070
6071         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
6072         than '.'.
6073
6074 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6075
6076         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
6077         enclosing DeclSpace.  This ensures that a name-lookup populates
6078         more caches and there are fewer 'TypeExpression's.  Carve out
6079         nested type lookup into ...
6080         (LookupNestedTypeInHierarchy): ... this.
6081
6082 2005-04-15  Martin Baulig  <martin@ximian.com>
6083
6084         Merged r41590 from MCS and make it work in the generics land.
6085
6086         * generic.cs (TypeParameter.UpdateConstraints): Removed the
6087         `check' argument.
6088
6089         * class.cs (PartialContainer.UpdateConstraints): Removed.
6090         (PartialContainer.CheckConstraints): Removed.
6091         (PartialContainer.SetParameterInfo): Store the constraints here.
6092         (PartialContainer.DefineTypeParameters): New public method;
6093         resolve the type parameter's constraints here.  Note that the
6094         PartialContainer doesn't have an EmitContext anymore, so we must
6095         do this in the ClassPart.
6096
6097 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6098
6099         Clean up a few partial-class semantics.  
6100         Fixes test-357.cs and cs1618-2.cs.
6101         * cs-parser.jay (struct_declaration): Use 'current_class' as
6102         parent of newly-created struct.  Remove call to Register ().
6103         Use 'pop_current_class' to complete handing the current struct.
6104         (interface_declaration): Likewise.
6105         (class_declaration): Likewise.
6106         (enum_declaration): Use 'current_class' as parent of newly created
6107         enum.
6108         (delegate_declaration): Likewise.
6109         (pop_current_class): New function.  This is used to handle closing
6110         up the 'current_class' and 'current_container', and pointing them
6111         to the enclosing class/container.
6112         (CSharpParser): Initialize 'current_class' too.
6113         * decl.cs (MemberCore): Add check for invariant: a partial
6114         container is not a parsed entity, and thus does not enclose any
6115         parsed members.
6116         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
6117         (DeclSpace.BaseTypeExpr): Use it.
6118         (DeclSpace.LookupType): Add check for invariant.
6119         * class.cs (TypeContainer): Add check for invariant: a nested
6120         class should have the same NamespaceEntry as its enclosing class.
6121         (TypeContainer.EmitFieldInitializers): Make virtual.
6122         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
6123         MemberCore.
6124         (TypeContainer.Register): Remove.
6125         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
6126         null.  Use TypeResolveEmitContext for resolving base types and
6127         interfaces.  Move initialization of Parts.TypeBuilder here from
6128         ...
6129         (TypeContainer.DefineNestedTypes): ... here.
6130         (PartialContainer): Take a Namespace not a NamespaceEntry.
6131         (PartialContainer.Create): Don't use Register.  Call the
6132         appropriate Add... function directly.
6133         (ClassPart): Take both the PartialContainer and the enclosing
6134         class as constructor arguments.
6135         (ClassPart.EmitFieldInitializers): Override.
6136         (ClassPart.PartFindNestedTypes): Remove.
6137         (FieldBase.GetInitializerExpression): Resolve the initializer
6138         expression in the emit context of the enclosing class.
6139         * tree.cs (RootTypes): Remove Register ().
6140         
6141 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
6142
6143         * cs-parser.jay: Removed CS0134.
6144         
6145         * driver.cs: Removed CS1901.
6146         
6147         * expression.cs (SizeOf.DoResolve): Don't report CS0233
6148         for predefined types.
6149
6150 2005-03-07  Duncan Mak  <duncan@novell.com>
6151
6152         * codegen.cs (Save):  Catch UnauthorizedAccessException as
6153         well. Fixes bug #73454.
6154
6155 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
6156
6157         * cs-tokenizer.cs (xtoken): Add CS1035.
6158         
6159         * class.cs (MethodData.Define): Add CS0683.
6160         (FieldMember.ctor): Add CS0681.
6161
6162 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6163
6164         * ecore.cs (SimpleName.DoResolve): Rename from
6165         SimpleName.DoResolveAllowStatic.
6166         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
6167         Pass 'intermediate' flag to MemberStaticCheck.
6168         (SimpleName.MemberStaticCheck): Skip "static check" only in case
6169         of "intermediate" lookups via MemberAccess.
6170         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
6171         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
6172
6173 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6174
6175         Fix #73394.
6176         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
6177         slipped in because of variable names that are identical to a
6178         builtin type's BCL equivalent ('string String;', 'int Int32;').
6179         (PropertyExpr.EmitInstance): Likewise.
6180
6181 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
6182
6183         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
6184         
6185         * report.cs (warning_ignore_table): Made public.
6186
6187 2005-03-04  Raja R Harinath  <rharinath@novell.com>
6188
6189         Fix #73282.
6190         * class.cs (MethodData.Emit): Pass 'container' to
6191         container.GetObsoleteAttribute instead of 'container.Parent'.
6192
6193 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
6194
6195         * cs-parser.jay: Add 1534 error test.
6196
6197         * iterators.cs (Yield.CheckContext): Add error 1629.
6198         (Iterator.ctor): Save unsafe modifier.
6199         (MoveNextMethod.DoEmit): Restore unsafe context.
6200
6201         * namespace.cs (UsingAlias): Better error message.
6202
6203 2005-03-03  Dan Winship  <danw@novell.com>
6204
6205         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
6206         the warning message [#73219]
6207
6208 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6209
6210         Fix compile with MCS 1.0.0.0.
6211         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
6212         w_restore to not depend on string constant folding.
6213
6214 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6215
6216         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
6217         CS0246 check to users who passed 'silent = false'.
6218         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
6219         check.
6220         (SimpleName.SimpleNameResolve): Update.
6221         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
6222         (MemberAccess.IdenticalNameAndTypeName): Update.
6223         * doc.cs (FindDocumentedTypeNonArray): Update.
6224
6225 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
6226
6227         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
6228         * parameters.cs (ComputeAndDefineParameters): Remove.
6229         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
6230         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
6231         Use GetParameterInfo.
6232
6233 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
6234
6235         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
6236
6237 2005-03-02  Raja R Harinath  <rharinath@novell.com>
6238
6239         Unify DeclSpace.LookupType and DeclSpace.FindType.
6240         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
6241         is in charge of defining nested types on demand.
6242         (DeclSpace.LookupType): Use it when the current_type is a
6243         TypeBuilder.  Use LookupTypeDirect for reflected types.
6244         (DeclSpace.FindType): Remove.
6245         (DeclSpace.LookupInterfaceOrClass): Likewise.
6246         (DeclSpace.DefineTypeAndParents): Likewise.
6247         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
6248         DeclSpace.LookupType.
6249         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
6250         * typemanager.cs (LookupType): Simplify.
6251         (AddUserType): Remove type from negative_hits.
6252         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
6253         * class.cs (TypeContainer.FindMembers): Move handling of nested
6254         types ...
6255         (TypeContainer.FindMembers_NestedTypes): ... here.
6256         (TypeContainer.FindNestedType): Implement override.
6257         (ClassPart.FindNestedType): Delegate to PartialContainer.
6258         (ClassPart.PartFindNestedType): Looks up the nested types of the
6259         part alone.
6260
6261 2005-04-14  Martin Baulig  <martin@ximian.com>
6262
6263         * generic.cs (ConstructedType): Moved all the type lookup and
6264         nested class logic into SimpleName.
6265         (ConstructedType.ResolveConstructedType): Our underlying type is
6266         already fully resolved; all the type lookup stuff is in
6267         SimpleName.
6268
6269         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
6270         constructed types here instead of in ConstructedType.
6271
6272         * decl.cs (MemberName.GetTypeExpression): Always create a
6273         SimpleName, not a ConstructedType.
6274         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
6275
6276 2005-03-02  Martin Baulig  <martin@ximian.com>
6277
6278         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6279         static constructor in static classes.
6280
6281 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
6282
6283         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
6284         sizeParamIndex is not specified.
6285
6286 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
6287
6288         Fix #73117
6289         * report.cs (WarningMessage.IsEnabled): Missing null check.
6290
6291 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6292
6293         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
6294         in the fields and not in the properties.
6295
6296 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
6297
6298         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
6299         fields as well.
6300
6301 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6302
6303         * attribute.cs: Small refactoring (improved robustness).
6304         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
6305         (ValidateGuid): Removed.
6306         (Resolve): Removed referenced to above mentioned.
6307         (GetAttributeUsage): Made private and changed to work without
6308         class assistance.
6309         (GetIndexerAttributeValue): Don't crash.
6310         (GetConditionalAttributeValue): Ditto.
6311         (GetClsCompliantAttributeValue): Ditto.
6312         (ExtractSecurityPermissionSet): All attributes exceptions are
6313         error 648.
6314         (GetPropertyValue): New helper.
6315         (GetMethodImplOptions): New method.
6316         (DefinePInvokeMethod): Reuse common code. Implemented handling of
6317         some missing properties.
6318         
6319         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
6320         (Method.ApplyAttributeBuilder): Updated.
6321         
6322         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
6323         exception.
6324
6325 2005-02-28  Raja R Harinath  <rharinath@novell.com>
6326
6327         Fix #73052.
6328         * report.cs (Report.SymbolRelatedToPreviousError): Handle
6329         non-simple types (array, pointer, reference).
6330
6331 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6332
6333         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
6334
6335         * class.cs (MethodCore.IsDuplicateImplementation): Special error
6336         for operators.
6337         (Method.CheckBase): Catch wrong destructor here.
6338         (MethodData.Define): Add errors 550, 668.
6339
6340         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
6341
6342         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
6343
6344         * pending.cs (VerifyPendingMethods): Add error 551.
6345
6346         * typemanager.cs (CSharpName): Next error report helper.
6347
6348 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
6349
6350         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
6351         attributes. Removed useless attribute double check.
6352         It saves almost 2MBs for corlib.
6353
6354 2005-02-25  Raja R Harinath  <rharinath@novell.com>
6355
6356         Fix #72924.
6357         * statement.cs (ExpressionStatement.Resolve): Make robust to being
6358         called twice in case of error.
6359
6360 2005-02-23  Chris Toshok  <toshok@ximian.com>
6361
6362         Fix compiler portions of #72827.
6363         * statement.cs (Block.Emit): call Begin/EndScope on the
6364         EmitContext instead of the ILGenerator.
6365
6366         * codegen.cs (EmitContext.BeginScope): new method, call
6367         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
6368         we have one.)
6369         (EmitContext.BeginScope): same, but EndScope and CloseScope
6370
6371         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
6372         offset and call the superclass's OpenScope(int) with it.
6373         (SymbolWriter.CloseScope): get the current il
6374         offset and call superclass's CloseScope(int) with it.
6375
6376 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
6377
6378         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
6379         CS1677 for out and ref as well.
6380
6381         * class.cs (Method.Define): Add error CS1599 detection.
6382         
6383         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
6384         
6385         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
6386         
6387         * delegate.cs (Delegate.Define): Add error CS1599 detection.
6388         
6389         * support.cs.cs (ModifierDesc): New helper method.
6390
6391 2005-02-23  Raja R Harinath  <rharinath@novell.com>
6392             Abin Thomas  <projectmonokochi@rediffmail.com>
6393             Anoob V E  <projectmonokochi@rediffmail.com>
6394             Harilal P R  <projectmonokochi@rediffmail.com>
6395
6396         Fix #57851, #72718.
6397         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
6398         MemberLookup (used for error reporting) actually returns a result.
6399         Fix error report number (122, not 112).
6400
6401 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
6402             Anoob V E  <projectmonokochi@rediffmail.com>
6403             Harilal P R  <projectmonokochi@rediffmail.com>
6404
6405         Fix #71134.
6406         * pending.cs (PendingImplementation.GetAbstractMethods):
6407         Find NonPublic members too.
6408
6409 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
6410
6411         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
6412         Fixed error 217.
6413         
6414         * class.cs (MethodCore.CheckMethodAgainstBase):
6415         Add error 239 report.
6416
6417 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6418
6419         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6420         
6421         * class.cs (Operator.Define): Add error 217 report.
6422         
6423 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6424
6425         Fix #68955.
6426         * expression.cs (Invocation.IsApplicable): Make public.
6427         (Invocation.IsParamsMethodApplicable): Likewise.
6428         * delegate.cs (Delegate.VerifyApplicability): Don't use
6429         Invocation.VerifyArgumentCompat for parameter applicability
6430         testing.  Use Invocation.IsApplicable and
6431         Invocation.IsParamsMethodApplicable.
6432
6433 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6434
6435         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6436         
6437         * class.cs (Operator.Define): Add error 217 report.
6438         
6439 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6440
6441         * namespace.cs (UsingEntry.Resolve): Undo change below.
6442
6443 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6444
6445         Fix #72756.
6446         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6447         disable the error message when the extended MemberLookup also
6448         fails.
6449         (Expression.MemberLookupFinal): Update.
6450         (SimpleName.DoSimpleNameResolve): Update.
6451         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6452         Don't use MemberLookupFinal.
6453         (New.DoResolve): Update.
6454         (BaseAccess.CommonResolve): Update.
6455
6456 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6457
6458         Fix #72732.
6459         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6460         occured previously, don't resolve again.
6461
6462 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6463
6464         Fix #69949
6465         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6466         argument. Call ResolveAttributeUsage for unresolved.
6467         when types doesn't match ctor arguments.
6468         
6469         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6470         for nested attribute classes.
6471         (Class.attribute_usage): Removed.
6472         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6473         for attribute class.
6474         
6475         * ecore.cs (IsAttribute): Removed.
6476         
6477         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6478         
6479         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6480         now normal types.
6481         (attribute_types): Removed.
6482         (EmitCode): Global attributes are emited as the latest.
6483
6484 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6485
6486         * class.cs (EmitFieldInitializers): Don't emit field initializer
6487         for default values when optimilization is on.
6488         
6489         * constant.cs (Constant.IsDefaultValue): New property.
6490         
6491         * driver.cs: Add /optimize handling.
6492         
6493         * constant.cs,
6494         * ecore.cs,
6495         * literal.cs: Implement new IsDefaultValue property.
6496         
6497         * rootcontext.cs (Optimize): New field, holds /optimize option.
6498
6499 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6500
6501         Fix crasher in re-opened #72347.
6502         * namespace.cs (Namespace.Lookup): Return null if
6503         DeclSpace.DefineType returns null.
6504
6505         Fix #72678.
6506         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6507
6508 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6509
6510         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6511         now returns null if it cannot resolve to an lvalue.
6512         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6513         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6514         returned null.  Remove check for SimpleName.
6515         (EventExpr.DoResolveLValue): New.
6516         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6517         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6518         error from ...
6519         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6520         avoid CS0131 error.
6521         (Unary.ResolveOperator): Move CS0211 check ...
6522         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6523         CS0131 error.
6524         (Unary.DoResolveLValue): Simplify.
6525         (AddressOf.DoResolveLValue): New.
6526         (ArrayAccess.DoResolveLValue): New.
6527
6528 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6529
6530         * attribute.cs (Attribute.Resolve): Add arguments casting for
6531         when types doesn't match ctor arguments.
6532
6533 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6534
6535         Fix parts of #63202.
6536         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6537         lookup of operator in base type.  Ensure that all checks happen
6538         when the operator resolves to an "op_..." method.
6539
6540 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6541
6542         Fix #71992.
6543         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6544         'ignore_cs0104' parameter.  Pass it to ...
6545         (NamespaceEntry.Lookup): ... this.
6546         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6547         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6548         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6549         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6550         Update.  Request that cs0104 errors be ignored.
6551         (ComposedCast.ResolveAsTypeStep): Update.
6552
6553 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6554
6555         Fix #59209.
6556         * expression.cs (Invocation.BetterFunction): Remove support for
6557         comparing virtual functions and their overrides.
6558         (Invocation.IsOverride): New.
6559         (Invocation.OverloadResolve): Don't consider 'override' functions
6560         during candidate selection.  Store them in a lookaside list.
6561         If the selected method is a 'virtual' function, use the list to
6562         find any overrides that are closer to the LHS type.
6563
6564 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6565
6566         * expression.cs (New.DoResolve): Add complex core type reduction.
6567         (New.Constantify): Converts complex core type syntax like 'new int ()'
6568         to simple constant.
6569         
6570 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6571
6572         * decl.cs (EntryType.EntryType): New constructor to create an
6573         updated copy of a cache entry.
6574         (MemberCache.AddMethods): Use it.
6575         (MemberCache.ClearDeclaredOnly): Remove.
6576         (MemberCache.MemberCache): Update.
6577
6578 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6579
6580         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
6581         variable.  This one is represents the actual low-level declaration
6582         of the method, as opposed to the semantic level `IsStatic'.   
6583
6584         An anonymous method which is hosted into a static method might be
6585         actually an instance method.  IsStatic would reflect the
6586         container, while MethodIsStatic represents the actual code
6587         generated.
6588
6589         * expression.cs (ParameterReference): Use the new MethodIsStatic
6590         instead of IsStatic.
6591
6592         * anonymous.cs (AnonymousMethod.Compatible): Pass the
6593         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
6594         set on the current EmitContext. 
6595
6596         * expression.cs (Cast): Overload DoResolveLValue so we can pass
6597         resolve our casted expression as an LValue.  This triggers the
6598         proper LValue processing that is later required by Assign.
6599
6600         This fixes 72347.
6601
6602         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
6603
6604 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
6605
6606         C# 2.0 Fixed buffer implementation
6607
6608         * anonymous.cs: Update after RegisterHelperClass renaming.
6609
6610         * attribute.cs (AttributeTester.fixed_buffer_cache):
6611         Cache of external fixed buffers.
6612         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
6613         implementation if field is fixed buffer else null.
6614
6615         * class.cs
6616         (TypeContainer.AddField): Accept FieldMember instead of Field.
6617         (FieldBase.IsFieldClsCompliant): Extracted code from
6618         VerifyClsCompliance descendant customization.
6619         (FixedField): New class handles fixed buffer fields.
6620         (FixedFieldExternal): Keeps information about imported fixed
6621         buffer.
6622         (IFixedField): Make access to internal or external fixed buffer
6623         same.
6624
6625         * cs-parser.jay: Add fixed buffer parsing.
6626
6627         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
6628         buffer.
6629
6630         * expression.cs (Indirection): Extended implementation to accept
6631         fixed buffer field.
6632         (PointerArithmetic.Emit): Get element from fixed buffer as well.
6633         (ElementAccess.MakePointerAccess): Get type as parameter.
6634         (DoResolve): Add fixed buffer field expression conversion.
6635         (DoResolveLValue): Ditto.
6636         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
6637         (ArrayPtr): Derives from FixedBufferPtr.
6638         (ArrayPtr.Emit): Add extra emit for array elements.
6639
6640         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
6641
6642         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
6643         for compiler generated types.
6644         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
6645
6646         * statement.cs (Fixed): Refactored to be easier add fixed buffer
6647         and consume less memory.
6648         (Fixed.Resolve): Add fixed buffer case.
6649
6650         * typemanager.cs (compiler_generated_attr_ctor,
6651         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
6652         (HasElementType): Add our own implementation to work on every
6653         runtime.
6654
6655 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6656
6657         * anonymous.cs (CaptureContext): Track whether `this' has been
6658         referenced.   
6659
6660         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
6661         only captured `this' if it was implicitly done (instance
6662         methods/variables were used). 
6663
6664         * codegen.cs (EmitContext.CaptureThis): New method to flag that
6665         `this' must be captured.
6666
6667 2005-01-30  Miguel de Icaza  <miguel@novell.com>
6668  
6669         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
6670         is null it means that there has been no need to capture anything,
6671         so we just create a sibling.
6672
6673         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
6674
6675         Just a partial fix.  The other half is fairly elusive.
6676         
6677 2005-02-10  Raja R Harinath  <rharinath@novell.com>
6678
6679         Fix #52586, cs0121-4.cs.
6680         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
6681         and return a hashtable.
6682         (MemberCache.ClearDeclaredOnly): New.
6683         (MemberCache.MemberCache): Update to change.  Make a deep copy of
6684         the method_hash of a base type too.
6685         (MemberCache.AddMethods): Adapt to having a deep copy of the base
6686         type methods.  Overwrite entries with the same MethodHandle so
6687         that the ReflectedType is correct.  The process leaves in base
6688         virtual functions and their overrides as distinct entries.
6689         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
6690         matters since it was boxed in a ArrayList before.
6691         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
6692         modifier.
6693         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
6694         case of a virtual function and its override (choose the overload
6695         as better).
6696         (Invocation.OverloadResolve): Avoid 'override' members during
6697         'applicable_type' calculation.
6698
6699 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6700
6701         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
6702         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
6703         GetTypeHandle.  It is possible for a reflected type to derive from
6704         a TypeBuilder (e.g., int[] derives from the TypeBuilder
6705         System.Array during mscorlib compilation).
6706         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
6707         contain a method_hash, don't create one either.  Don't create a
6708         deep copy of the base cache's method_hash.
6709         (MemberCache.SetupCache): Rename back from DeepCopy.
6710         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
6711         already initialized.  If we see an override function, add its
6712         underlying base virtual function to the member_hash too.
6713
6714 2005-02-09  Raja R Harinath  <rharinath@novell.com>
6715
6716         Combine two near-redundant caches.
6717         * typemanager.cs (method_params): Rename from method_internal_params.
6718         (TypeManager.GetParameterData): New.  Replace
6719         Invocation.GetParameterData.
6720         (TypeManager.LookupParametersByBuilder): Remove.
6721         * expression.cs (Invocation.method_parameter_cache): Remove.
6722         (Invocation.GetParameterData): Remove.
6723         Update to changes.
6724         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
6725         Update to changes.
6726
6727 2005-02-08  Raja R Harinath  <rharinath@novell.com>
6728
6729         Fix #72015.
6730         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
6731         TypeManager.multicast_delegate_type is null, resolve it by looking
6732         up "System.MulticastDelegate".
6733         * rootcontext.cs (RootContext.ResolveCore): Simplify.
6734
6735 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
6736             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
6737             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
6738
6739         Fix cs0164.cs.
6740         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
6741         (LabeledStatement.AddReference): New.  Set 'referenced'.
6742         (Goto.Resolve): Use it.
6743
6744 2005-02-05  John Luke  <john.luke@gmail.com>
6745
6746         * driver.cs: remove duplicate -doc line in Usage ()
6747
6748 2005-02-04  Raja R Harinath  <rharinath@novell.com>
6749
6750         * location.cs (Location.AddFile): Fix CS2002 error report.
6751
6752 2005-02-02  Martin Baulig  <martin@ximian.com>
6753
6754         * delegate.cs (Delegate.DefineType): Report an internal error if
6755         TypeManager.multicast_delegate_type is null.  See bug #72015 for
6756         details.        
6757
6758 2005-02-02  Raja R Harinath  <rharinath@novell.com>
6759
6760         Fix a crasher in a variant of #31984.
6761         * const.cs (Constant.CheckBase): New override that defers the
6762         new-or-override check in case the base type hasn't been populated
6763         yet.
6764         (Constant.Define): Ensure the new-or-override check is performed.
6765
6766 2005-02-01  Duncan Mak  <duncan@ximian.com>
6767
6768         * const.cs (LookupConstantValue): Check that `ce' is not null
6769         before calling GetValue ().
6770
6771 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6772
6773         Fix test-334.cs (#69519).
6774         * cs-parser.jay (using_alias_directive): Pass in an expression to
6775         NamespaceEntry.UsingAlias.
6776         (using_namespace_directive): Pass in an expression to
6777         NamespaceEntry.Using.
6778         (namespace_name): Don't flatten to a string.
6779         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
6780         (NamespaceEntry.AliasEntry.Resolve): Lookup using
6781         ResolveAsTypeStep.
6782         (NamespaceEntry.UsingEntry): Likewise.
6783         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
6784         changes.
6785         (NamespaceEntry.LookupForUsing): Remove.
6786         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
6787         names.
6788         (NamespaceEntry.Lookup): Remove support for dotted names.
6789
6790 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6791
6792         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
6793         split into two.
6794         (NamespaceEntry.ImplicitParent): Compute on demand.
6795         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
6796         parallels the current.
6797         (NamespaceEntry.LookupForUsing): Use it.
6798         (NamespaceEntry.Lookup): If the current namespace-entry is
6799         implicit, don't search aliases and using tables.
6800
6801 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6802
6803         Fix #31984.
6804         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
6805         BaseCache here.
6806         (TypeContainer.BaseCache): Compute on demand.
6807         (TypeContainer.FindMembers): Define constants and types if they're
6808         not already created.
6809         (FieldMember.Define): Move resetting of ec.InUnsafe before error
6810         check.
6811         * const.cs (Constant.Define): Make idempotent.
6812
6813 2005-01-29  Miguel de Icaza  <miguel@novell.com>
6814
6815         * pending.cs: Produce better code (no nops produced by using Ldarg
6816         + value).
6817         
6818         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
6819         i - 1' it should be arg + 1.
6820
6821         Fixes bug #71819.
6822
6823 2005-01-28  Raja R Harinath  <rharinath@novell.com>
6824
6825         * attribute.cs (Attribute.CheckAttributeType): Make private
6826         non-virtual.
6827         (Attribute.ResolveType): Make virtual.
6828         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
6829         handling of RootContext.Tree.Types.
6830
6831 2005-01-27  Raja R Harinath  <rharinath@novell.com>
6832
6833         Update attribute-handling to use the SimpleName/MemberAccess
6834         mechanisms.
6835         * cs-parser.jay (attribute): Pass in an expression to the
6836         constructors of Attribute and GlobalAttribute.
6837         * attribute.cs (Attribute): Take an expression for the name.
6838         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
6839         passed in attribute name expression.
6840         (Attribute.CheckAttributeType): Use it.
6841         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
6842         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
6843         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
6844         argument to prevent error messages if the lookup fails.
6845
6846 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
6847
6848         * expression.cs (Indirection): Implemented IVariable interface
6849         to support indirection in AddressOf operator.
6850         (PointerArithmetic.Emit): Add optimalization for case where
6851         result can be precomputed.
6852
6853 2005-01-26  Martin Baulig  <martin@ximian.com>
6854
6855         * class.cs (TypeContainer.AttributeTargets): Return the correct
6856         AttributeTargets depending on our `Kind' instead of throwing an
6857         exception; fixes #71632.
6858
6859 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
6860
6861         Fix #71257
6862         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
6863         constant members.
6864
6865 2005-03-17  Martin Baulig  <martin@ximian.com>
6866
6867         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6868         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6869
6870 2005-03-17  Martin Baulig  <martin@ximian.com>
6871
6872         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6873         to bool so we can return an error condition.
6874         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6875         returned an error.
6876
6877 2005-03-17  Martin Baulig  <martin@ximian.com>
6878
6879         * generic.cs (TypeMananager.IsIEnumerable): New public method.
6880
6881         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
6882         converting from an array-type of T to `IEnumerable<T>'.
6883
6884 2005-03-16  Martin Baulig  <martin@ximian.com>
6885
6886         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
6887         (Nullable.LiftedUnaryMutator): New public class.
6888
6889         * expression.cs (UnaryMutator.DoResolve): Added support for
6890         Nullable Types.
6891
6892 2005-03-14  Martin Baulig  <martin@ximian.com>
6893
6894         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
6895
6896 2005-03-14  Martin Baulig  <martin@ximian.com>
6897
6898         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
6899         the comparision operators `<', `>', `<=' and `>='.
6900
6901 2005-03-13  Martin Baulig  <martin@ximian.com>
6902
6903         * generic.cs
6904         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
6905         avoid confusion with the `NullLiteral'.
6906         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
6907
6908 2005-03-13  Martin Baulig  <martin@ximian.com>
6909
6910         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
6911         comparing arbitrary types with the null literal.
6912
6913 2005-03-13  Martin Baulig  <martin@ximian.com>
6914
6915         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
6916         boolean operators '&&', '||', '&' and '|'.
6917         (Nullable.OperatorTrueOrFalse): New public class.
6918
6919         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
6920         instead of a `StaticCallExpr'; added support for nullables.
6921
6922 2005-03-10  Martin Baulig  <martin@ximian.com>
6923
6924         * expression.cs
6925         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
6926         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
6927
6928 2005-03-07  Martin Baulig  <martin@ximian.com>
6929
6930         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
6931         it work if `expr' is not an IMemoryLocation.
6932         (Nullable.Lifted): Implement IMemoryLocation.
6933         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
6934         target type.
6935
6936 2005-03-05  Martin Baulig  <martin@ximian.com>
6937
6938         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
6939         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
6940         (Nullable): Added support for lifted unary and binary operators.
6941
6942         * expression.cs (Unary.DoResolve): Added support for nullable types.
6943         (Binary.DoResolve): Likewise.
6944         (Conditional.DoResolve): Likewise.
6945
6946 2005-03-02  Martin Baulig  <martin@ximian.com>
6947
6948         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
6949
6950         * class.cs (ClassPart.SetParameterInfo): Override this.
6951         (PartialContainer.SetParameterInfo): Override this.
6952         (TypeContainer.CheckConstraints): New protected method.
6953         (PartialContainer.CheckConstraints): Override this and check
6954         whether the same contraints were specified in all parts of a
6955         partial generic type definition.
6956         (PartialContainer.UpdateConstraints): New public method.
6957
6958         * generic.cs (TypeParameter.UpdateConstraints): New public method.
6959
6960 2005-03-02  Martin Baulig  <martin@ximian.com>
6961
6962         Committing a patch from Carlos Alberto Cortez to fix #72887.
6963
6964         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
6965         casts from `T []' to `int []'.
6966
6967 2005-03-02  Martin Baulig  <martin@ximian.com>
6968
6969         * generic.cs (TypeManager.IsEqual): Make this symmetric.
6970
6971         * expression.cs (Binary.ResolveOperator): When resolving a
6972         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
6973         `=='.  Fixes #71866.  See gen-127.cs.
6974
6975 2005-03-02  Martin Baulig  <martin@ximian.com>
6976
6977         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6978         static constructor in static classes.
6979
6980 2005-03-02  Martin Baulig  <martin@ximian.com>
6981
6982         * generic.cs
6983         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
6984         (Nullable.LiftedConversion): Added support for user-defined
6985         conversions.
6986
6987         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
6988
6989         * cs-parser.jay: Use ComposedCast everywhere instead of
6990         NullableType, so we don't need to check for NullableType
6991         everywhere.
6992         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
6993         case where we'll be resolved into a `parenthesized_expression_0'
6994         afterwards.
6995
6996         * convert.cs
6997         (Convert.UserDefinedConversion): Added nullable conversions.
6998
6999 2005-02-28  Martin Baulig  <martin@ximian.com>
7000
7001         * generic.cs (TypeManager.IsNullableType): New static method.
7002         (Nullable): New abstract class.
7003         (Nullable.NullLiteral): New public class.
7004         (Nullable.LiftedConversion): New public class.
7005
7006         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
7007         `builtin_types opt_nullable'.
7008
7009         * convert.cs
7010         (Convert.ImplicitConversionStandard): Added nullable conversions.
7011         (Convert.ExplicitConversionStandard): Likewise.
7012         (Convert.ExplicitConversion): Likewise.
7013
7014 2005-02-26  Martin Baulig  <martin@ximian.com>
7015
7016         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
7017         begin with a "?", for instance "?[]".  Don't do a type lookup if
7018         `dim' is empty.
7019
7020 2005-02-25  Martin Baulig  <martin@ximian.com>
7021
7022         The first part of Nullable Types :-)
7023
7024         * generic.cs (NullableType): New public class.
7025         (NullCoalescingOperator): New public class.
7026         (TypeArguments.Resolve): Add a CS0306 check.
7027
7028         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
7029         (opt_nullable): New rule.
7030         (type): Added `opt_nullable' to `namespace_or_type_name',
7031         `builtin_types' and `pointer_type'.
7032         (array_type): Added `opt_nullable'.
7033         (opt_rank_specifier_or_nullable): New rule; this is the
7034         combination of `opt_rank_specifier' and `opt_nullable'.
7035         (opt_error): New rule; catch errors here.
7036         (nullable_type_or_conditional): New rule; we use this to check for
7037         nullable and still detect the conditional operator.
7038         (local_variable_type): Use `opt_rank_specifier_or_nullable'
7039         instead `opt_rank_specifier'.
7040
7041         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
7042         for nullables.
7043
7044 2005-02-24  Martin Baulig  <martin@ximian.com>
7045
7046         * README, README.Changes: Removed; they're old and obsolete.
7047
7048 2005-02-22  Martin Baulig  <martin@ximian.com>
7049
7050         * generic.cs (TypeParameter.Resolve): If resolving the constraints
7051         returned an error, set `constraints' to null to avoid a crash
7052         later on.
7053         (TypeParameter.ResolveType): Likewise.
7054
7055 2005-02-22  Martin Baulig  <martin@ximian.com>
7056
7057         * generic.cs
7058         (Constraints.ResolveTypes): Protect against being called twice.
7059         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
7060         (TypeParameter.ResolveType): New public method; calls
7061         constraints.ResolveTypes().
7062         (TypeParameter.DefineType): Moved constraints.ResolveType() out
7063         into the new ResolveType().
7064         (GenericMethod.Define): Call ResolveType() on all our
7065         TypeParameter's.        
7066
7067 2005-02-21  Martin Baulig  <martin@ximian.com>
7068
7069         * generic.cs
7070         (TypeManager.generic_nullable_type): New static public field.
7071         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
7072
7073         * rootcontext.cs
7074         (RootContext.ResolveCore): Resolve "System.Nullable`1".
7075
7076 2005-02-15  Martin Baulig  <martin@ximian.com>
7077
7078         * generic.cs (ConstructedType.Constraints): Correctly check
7079         constraints if the argument type is a type parameter; fixes
7080         #72326. 
7081
7082 2005-02-02  Martin Baulig  <martin@ximian.com>
7083
7084         * delegate.cs (Delegate.DefineType): Report an internal error if
7085         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7086         details.        
7087
7088 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7089
7090         * pending.cs: Produce better code (no nops produced by using Ldarg
7091         + value).
7092         
7093         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7094         i - 1' it should be arg + 1.
7095
7096         Fixes bug #71819.
7097         
7098 2005-01-26  Martin Baulig  <martin@ximian.com>
7099
7100         * cs-parser.jay (indexer_declarator): Don't report an error if we
7101         have type parameters since we can be an explicit interface
7102         implementation; fixes #71449.
7103
7104 2005-01-26  Martin Baulig  <martin@ximian.com>
7105
7106         * class.cs (TypeContainer.AttributeTargets): Return the correct
7107         AttributeTargets depending on our `Kind' instead of throwing an
7108         exception; fixes #71632.
7109
7110 2005-01-26  Martin Baulig  <martin@ximian.com>
7111
7112         * delegate.cs (Delegate.DefineType): Correctly define our type
7113         parameters.  Fixes #71483.
7114
7115 2005-01-25  Raja R Harinath  <rharinath@novell.com>
7116
7117         Fix #71602.
7118         * expression.cs (MemberAccess.DoResolve): Don't complain with
7119         cs0572 when the LHS of a member access has identical name and type
7120         name.
7121
7122 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
7123
7124         Fix #71651, #71675
7125         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
7126         CreatePermission.
7127         Create custom PermissionSet only for PermissionSetAttribute.
7128
7129 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
7130
7131         Fix #71649
7132         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
7133         delegates in static class.
7134
7135 2005-01-24  Martin Baulig  <martin@ximian.com>
7136
7137         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7138         merging an implicit block, just use its reachability.
7139
7140         * statement.cs (Block.Resolve): Make the unreachable code check
7141         work wrt. implicit blocks; see test-337 from #63842.
7142
7143 2005-01-21  Alp Toker  <alp@atoker.com>
7144  
7145         * cs-parser.jay: destructor_declaration's container is PartialContainer
7146         not Class when partial types are used, so use Kind prop instead of
7147         'is'.
7148         
7149 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
7150
7151         * cs-parser.jay: Improve error reporting when an interface
7152         declares new types.
7153
7154 2005-01-20  Dick Porter  <dick@ximian.com>
7155
7156         * support.cs: SeekableStreamReader fix from Sandor Dobos
7157         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
7158         chars are read.  Fixes bug 70369.
7159
7160 2005-01-20  Raja R Harinath  <rharinath@novell.com>
7161
7162         * cs-parser.jay (catch_clause): Simplify current_block handling
7163         somewhat.
7164
7165 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
7166
7167         * convert.cs (ImplicitStandardConversionExists): Synchronize the
7168         code with ImplicitStandardConversion to handle the implicit
7169         conversion of method groups into valid delegate invocations. 
7170
7171         The problem is that in parameter handling we were using this code
7172         path.  Fixes bug #64698
7173
7174 2005-01-19  Raja R Harinath  <rharinath@novell.com>
7175
7176         * cs-parser.jay: Fix several infelicities.
7177         - Avoid assigning to the parser value stack.  Code like 
7178           '$3 = null' is unclean.  Synthesize a value for the code block
7179           instead. 
7180         - Avoid using oob_stack for storing location information.  Use ...
7181         (_mark_): ... this.  New (empty) rule.  Saves the current location
7182         in $$.
7183         (foreach_statement): Avoid using oob_stack for current_block
7184         handling.  Use technique used in for_statement and
7185         using_statement.  Synthesize a value for the code block to store
7186         additional intermediate information.
7187
7188 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
7189
7190         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
7191         of a different type is only allowed to private fields of a
7192         containing type, not on fields of a base class.
7193
7194         See test-174.cs and error cs0122-9.cs
7195
7196 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7197
7198         Fix test-335.cs (bug #58126).
7199         * cs-parser.jay (argument): Split out non-expression parts of the
7200         rule into 'non_simple_argument'.
7201         (invocation_expression): Support parenthesized invocations with
7202         multiple arguments, and with single non-simple arguments.
7203
7204 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7205
7206         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
7207         places.
7208
7209 2005-01-12  Raja R Harinath  <rharinath@novell.com>
7210
7211         Fix cs0038-1.cs, cs1640-6.cs.
7212         * ecore.cs (Expression.Resolve): Remove special-case for
7213         SimpleName in error-handling.
7214         (Expression.almostMatchedMembers): Relax access permission to
7215         protected.
7216         (Expression.MemberLookupFailed): Handle duplicates in
7217         almostMatchedMembers list.
7218         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
7219         * expression.cs (New.DoResolve): Report CS1540 for more cases.
7220         * typemanager.cs (GetFullNameSignature): Use the MethodBase
7221         overload if the passed in MemberInfo is a MethodBase.
7222
7223 2005-01-25  Martin Baulig  <martin@ximian.com>
7224
7225         * doc.cs
7226         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
7227
7228 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
7229
7230         Fix #70749
7231         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
7232         for non-CAS & merge permission sets properly.
7233
7234 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7235
7236         Improve standard-compliance of simple name and member access 
7237         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
7238         * ecore.cs (FullNamedExpression): New abstract base class 
7239         for Namespaces and TypeExpressions.
7240         (ResolveFlags.SimpleName): Remove.
7241         (SimpleName): Remove support for dotted names.
7242         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
7243         DeclSpace.FindType and DeclSpace.LookupType.
7244         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
7245         (Expression.ExprClassName): Make member function.
7246         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
7247         a namespace.  Remove creation of dotted "SimpleName"s.
7248         (MemberAccess.DoResolve): Likewise.
7249         * decl.cs (DeclSpace.Cache): Make private.
7250         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
7251         (DeclSpace.FindType): Update.
7252         (DeclSpace.LookupType): Move here from RootContext.  Return a 
7253         FullNamedExpression.
7254         * namespace.cs (Namespace): Derive from FullNamedExpression
7255         so that it can be part of expression resolution.
7256         (Namespace.Lookup): Return an FullNamedExpression.
7257         (NamespaceEntry.LookupAlias): Lookup aliases only in current
7258         namespace.
7259         * rootcontext.cs (NamespaceLookup): Remove.
7260         (LookupType): Move to DeclSpace.
7261         * attribute.cs (CheckAttributeType): Update.
7262         * doc.cs (FindDocumentedType): Remove allowAlias argument.
7263         (FindDocumentedTypeNonArray): Likewise.
7264
7265 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7266
7267         Fix cs0509.cs, cs1632.cs.
7268         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
7269         is the same as IsInterface.
7270         (TypeContainer.GetClassBases): Likewise.
7271         * statement.cs (LabeledStatement.ig): New field.
7272         (LabeledStatement.LabelTarget): Save ILGenerator which created the
7273         label.
7274         (LabeledStatement.DoEmit): Check that the label was created with
7275         the same ILGenerator.
7276
7277 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7278
7279         Fix #71058
7280         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
7281         accessors to its properties.
7282
7283         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
7284         from accessors to property.
7285         
7286 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7287
7288         Fix #70722
7289         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
7290         only for overrides.
7291         
7292 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
7293
7294         * attribute.cs: Check for null and empty strings.  
7295
7296         I have lost another battle to Paolo.
7297
7298 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
7299
7300         Fix #70942
7301         * class.cs (PropertyMethod): Set Parent field in ctors.
7302         (SetMethod.InternalParameters): Add unsafe switch hack.
7303         Override MarkForDuplicationCheck where it is appropriate.
7304
7305         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
7306         It says whether container allows members with the same name.
7307         Base default is no.
7308         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
7309         Removed is_method parameter.
7310
7311 2005-01-06  Duncan Mak  <duncan@ximian.com>
7312
7313         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
7314         because the previous change led to incorrect reporting of CS1032
7315         ("Cannot define/undefine preprocessor symbols after first token in
7316         file"). Instead of using `tokens_seen' as the only flag that
7317         triggers CS1040, introduce `comments_seen'. This new flag is used
7318         to signify having seen comments on the current line, so it is
7319         unset after a newline.
7320
7321 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7322
7323         * doc.cs : When searching for a type, find nested type too.
7324           This fixes bug #71040.
7325
7326 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7327
7328         * doc.cs :
7329           - Warn missing member comment on those classes which also does not
7330             have doc comments. Fixed bug #71041.
7331           - Don't warn missing doc comment on default constructor.
7332             Fixed bug #71042.
7333
7334 2005-01-06  Duncan Mak  <duncan@ximian.com>
7335
7336         * cs-tokenizer.cs (xtoken): After handling traditional C-style
7337         comments, set `tokens_seen' to true. This allows us to detect
7338         misplaced preprocessor directives (i.e. not at the beginning of
7339         the a line, nor after whitespaces). In that case, report error
7340         CS1040. This fixes bug #56460.
7341
7342         * cs-parser.jay (interface_member_declaration): Add checks for
7343         IsExplicitImpl, and report CS0541 error if an interface member is
7344         defined as an explicit interface declaration.
7345
7346 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
7347
7348         Fix #70817
7349         * class.cs (PropertyMethod): Set Parent field in ctors.
7350         (SetMethod.InternalParameters): Add unsafe switch hack.
7351         
7352         * decl.cs (MemberCore.Parent): Cannot be readonly.
7353
7354 2005-01-06  Raja R Harinath  <rharinath@novell.com>
7355
7356         * decl.cs (DeclSpace.ResolveType): Remove.
7357         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
7358         Merge in code from ...
7359         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
7360         * class.cs, enum.cs: Update to changes.
7361
7362 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
7363
7364         * anonymous.cs: Ensure that we init the scope of our parent if it
7365         has not been initialized yet.
7366
7367 2004-12-30  Duncan Mak  <duncan@ximian.com>
7368
7369         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
7370         if field.FieldBuilder is null. Fixes #70758.
7371
7372         * convert.cs: Fixed some typos and updated some of the comments.
7373         (ImplicitStandardConversionExists):
7374         (TryImplicitIntConversion): If `target_type' is an interface and
7375         the type of `ic' implements this interface, return true or a new
7376         BoxedCast instead of null. This fixes #70468.
7377
7378 2004-12-29  Duncan Mak  <duncan@ximian.com>
7379
7380         * expression.cs (Argument.Emit): Check that Expr is
7381         IMemoryLocation before casting to it, and report CS1510 otherwise.
7382
7383         This fixes #70402.
7384
7385 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
7386
7387         * statement.cs (Block.ThisVariable): remove the recursion here, to
7388         make the --profile more sane.
7389
7390 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
7391
7392         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
7393         assembly, by JB Evain.
7394
7395 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7396
7397         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
7398           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
7399         "parent" refers to enclosing type/class.  "base" refers to superclass.
7400
7401 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7402
7403         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7404         Ensure that we only have GlobalAttributes.
7405         * attribute.cs (Attribute.Emit): Make non-virtual.
7406         (GlobalAttribute.Emit): Remove.
7407         (Attribute.Resolve): Make virtual.
7408         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
7409         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
7410         the argument. Don't create one.
7411         (Attribute.GetObsoleteAttribute): Likewise.
7412         (Attribute.GetClsCompliantAttributeValue): Likewise.
7413         * class.cs, decl.cs: Update to changes.
7414
7415 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
7416
7417         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
7418         
7419         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
7420         
7421         * statement.cs (Foreach.Resolve): Add error 186 report.
7422
7423 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
7424
7425         * expression.cs (Conditional.DoResolve): Add warning 429.
7426         
7427         * statement.cs (If.Resolve): Add warning 665.
7428
7429 2004-12-16  Raja R Harinath  <rharinath@novell.com>
7430
7431         New invariant: RootContext.Tree.Types.NamespaceEntry == null
7432         except when in the parser, and in GlobalAttribute.
7433         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
7434         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
7435         RootContext.Tree.Types.NamespaceEntry once work is done.
7436         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
7437         and resets RootContext.Tree.Types.NamespaceEntry.
7438
7439 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
7440
7441         * cs-parser.jay: Don't create a block for every variable.
7442
7443 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7444
7445         * location.cs: Provide extra information.
7446
7447         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7448         variables from the captured environment, it is the ldarg_0.
7449
7450 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7451
7452         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7453         find a conclusion.
7454         
7455         * class.cs: Changed warning level for 169 to avoid developer
7456         displeasure from warning flooding. It will be changed back when they
7457         fix most of current BCL warnings.
7458         
7459         * RootContext.cs: Pushed default WarningLevel to 3.
7460         
7461         * statement.cs: Removed unused variable.
7462
7463 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7464
7465         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7466         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7467         Add error 502 report.
7468         (StaticClass.DefineType): Add error 441 report.
7469         (Class.AllowedModifiersProp): New virtual property as temporary
7470         extension to AllowedModifiers.
7471         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7472         to share implementation with StaticClass and don't call virtual
7473         methods from ctor.
7474         
7475         * driver.cs (MainDriver): Add error 1558 test.
7476
7477         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7478         report. Moved error 36 test here.
7479
7480         * statement.cs (Throw.Resolve): Add error 724 report.
7481
7482         * typemanager.cs: Add out_attribute_type core type.
7483         
7484 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7485
7486         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7487         3018 report.
7488         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7489
7490         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7491         3017 report.
7492         
7493         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7494
7495         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7496         Add error 3023 report.
7497         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7498
7499         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7500         implementation.
7501
7502 2004-12-12  John Luke  <john.luke@gmail.com>
7503
7504         * driver.cs (AddArgs): take -- into account when
7505         adding arguments, fixes bug 65710 
7506
7507 2004-12-12  Martin Baulig  <martin@ximian.com>
7508
7509         * expression.cs (Unary.TryReduceNegative): Added support for
7510         SByteConstant and ByteConstant.
7511         (Unary.Reduce): Check error values from TryReduceNegative().
7512
7513 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7514
7515         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7516         and report exception as error 182.
7517
7518 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7519
7520         * driver.cs (Main): Fix message when there are warnings.
7521
7522 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7523
7524         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7525
7526 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7527
7528         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7529         Reduced number of warnings.
7530         
7531         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7532
7533 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7534
7535         * driver.cs: Removed message.
7536
7537         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7538
7539 2004-12-08    <vargaz@freemail.hu>
7540
7541         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7542
7543 2004-12-08  Martin Baulig  <martin@ximian.com>
7544
7545         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7546         instead of a CS3002 for properties and indexer.
7547
7548 2004-12-08  Martin Baulig  <martin@ximian.com>
7549
7550         * decl.cs (MemberName.ToString): Make this work again.
7551
7552 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7553
7554         * attribute.cs (Resolve): Add error 591 detection.
7555
7556         * class.cs (FieldMember.Define): Add error 1547 detection.
7557         (Indexer.Define): Add error 620 detection.
7558         (Operator.Define): Add error 590 detection.
7559
7560         * ecore.cs: Missing argument for error 79.
7561
7562         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7563         detection.
7564
7565 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7566
7567         Fix #70106
7568         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7569         only.
7570
7571 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7572
7573         * cs-parser.jay : handle doc comments on implicit/explicit operators.
7574           Some operator comments were suppressed.
7575         * doc.cs : Implicit/explicit operator name in doc comments are like
7576           "op_Explicit(type)~returnType", so added suffix handling.
7577
7578 2005-01-21  Alp Toker  <alp@atoker.com>
7579
7580         * cs-parser.jay: destructor_declaration's container is PartialContainer
7581         not Class when partial types are used, so use Kind prop instead of 'is'.
7582
7583 2004-12-12  Martin Baulig  <martin@ximian.com>
7584
7585         * expression.cs (Unary.TryReduceNegative): Added support for
7586         SByteConstant and ByteConstant.
7587         (Unary.Reduce): Check error values from TryReduceNegative().
7588
7589 2004-12-11  Martin Baulig  <martin@ximian.com>
7590
7591         * support.cs (ReflectionParameters.ParameterName): If we have a
7592         `gpd', call `ParameterName' on it.
7593
7594         * parameter.cs (Parameter.GetParameterAttributes): New static method.
7595
7596         * pending.cs (PendingImplementation.DefineProxy): Call
7597         DefineParameter() for all of the MethodBuilder's arguments.
7598
7599 2004-12-09  Martin Baulig  <martin@ximian.com>
7600
7601         * doc.cs (DocUtil): Make this a static class.
7602
7603 2004-12-09  Martin Baulig  <martin@ximian.com>
7604
7605         * expression.cs (Invocation.InferType): Moved the type inference
7606         implementation into TypeManager.
7607
7608         * generics.cs (TypeManager): Moved the type inference
7609         implementation here.
7610
7611 2004-12-09  Martin Baulig  <martin@ximian.com>
7612
7613         * typemanager.cs (TypeManager): Make this a partial class.
7614
7615         * generics.cs
7616         (TypeManager): Move the generics part of `TypeManager' here.
7617
7618 2004-12-08  Martin Baulig  <martin@ximian.com>
7619
7620         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7621         instead of a CS3002 for properties and indexer.  Added CS3024
7622         check for generic interfaces.
7623
7624         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
7625         instances are not CLS-compliant.
7626
7627 2004-12-08  Martin Baulig  <martin@ximian.com>
7628
7629         * cs-parser.jay
7630         (void_pointer_expression): New rule for `void*', `void**' etc.
7631         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
7632
7633 2004-12-08  Martin Baulig  <martin@ximian.com>
7634
7635         * expression.cs (Invocation.InferType): Removed the hack for
7636         MethodCore.MayUnify().  
7637
7638         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
7639         this actually work.
7640
7641         * class.cs (MethodCore.MayUnify): Use
7642         TypeManager.MayBecomeEqualGenericTypes().       
7643
7644 2004-12-08  Martin Baulig  <martin@ximian.com>
7645
7646         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
7647         parameter, box it.  Fixes #69233.
7648
7649 2004-12-08  Martin Baulig  <martin@ximian.com>
7650
7651         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
7652         have the ctor constraint.  Fixes #68326.
7653
7654 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7655
7656         * cs-parser.jay : interface comment was not consumed because of
7657           extra opt_semicolon before doc handling.
7658
7659 2004-12-03  Raja R Harinath  <rharinath@novell.com>
7660
7661         Fix test-327.cs, test-328.cs, and put in early infrastructure
7662         for eventually fixing #52697.
7663         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
7664         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
7665         from other methods.
7666         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
7667         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
7668         (VerifyUsing, error246): Update.
7669         * rootcontext.cs (RootContext.NamespaceLookup): Just use
7670         'NamespaceEntry.LookupNamespaceOrType'.
7671
7672 2004-12-07  Martin Baulig  <martin@ximian.com>
7673
7674         * driver.cs: Call it "BETA SOFTWARE" :-)
7675
7676 2004-12-06  Raja R Harinath  <rharinath@novell.com>
7677
7678         Fix crash on cs0657-17.cs.
7679         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7680         Use RootContext.Tree.Types, not 'new RootTypes ()'.
7681         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
7682         the case where the NamespaceEntry gets overwritten.
7683
7684 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
7685
7686         Fixed #69195, #56821
7687         * ecore.cs (ResolveBoolean): Tiny refactoring.
7688
7689         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
7690         of right expression resolving when left is false constant and
7691         operator is LogicalAnd OR true constant and operator is LogicalOr.
7692
7693         * statement.cs (ResolveUnreachable): Always reports warning.
7694
7695 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
7696
7697         * class.cs: Distinguish between 1721 and 1722 (just a little help
7698         for the programmer).
7699
7700 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
7701
7702         * delegate.cs: Only allow this on new versions of the language. 
7703
7704 2004-12-02  Duncan Mak  <duncan@ximian.com>
7705
7706         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
7707         Expression class.
7708         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
7709         here as a static method. Take an additional bool out parameter
7710         `must_do_cs1540_check' for signaling to InstanceResolve.
7711         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
7712         member field from PropertyExpr class and made it an argument of
7713         the method instead.
7714         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
7715         check for MarshalByRefObject, and report CS0122 instead of CS1540.
7716         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
7717         and `remove_accessor' as well as InstanceResolve: report CS0122
7718         where applicable.
7719
7720         Fixes #70129.
7721
7722 2004-12-07  Martin Baulig  <martin@ximian.com>
7723
7724         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
7725         and CS0692 where appropriate.
7726
7727 2004-12-06  Martin Baulig  <martin@ximian.com>
7728
7729         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
7730         IsDuplicateImplementation() and improved it.
7731
7732         * expression.cs (Invocation.InferTypeArguments): Added
7733         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
7734         and removed the "ref" modifier from `infered_types'.
7735
7736         * decl.cs (MemberName.ToString): Removed the exception.
7737
7738 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
7739
7740         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
7741           comments are allowed.
7742
7743 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7744
7745         * delegate.cs: Add checks for subtypes in paramaters and return values
7746         in VerifyMethod () to add support for Covariance/Contravariance
7747         in delegates.
7748         
7749 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7750
7751         * report.cs: Remove extra closing parenthesis.
7752
7753         * convert.cs (Error_CannotImplicitConversion): If the name of the
7754         types are the same, provide some extra information.
7755
7756 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
7757
7758         Fix bug #70102
7759         * attribute.cs (Resolve): Improved implementation of params
7760         attribute arguments.
7761
7762         * support.cs (ParameterData): Add HasParams to be faster.
7763
7764 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
7765
7766         all things are for /doc support:
7767
7768         * doc.cs: new file that supports XML documentation generation.
7769         * mcs.exe.sources: added doc.cs.
7770         * driver.cs:
7771           Handle /doc command line option.
7772           Report error 2006 instead of 5 for missing file name for /doc.
7773           Generate XML documentation when required, after type resolution.
7774         * cs-tokenizer.cs:
7775           Added support for picking up documentation (/// and /** ... */),
7776           including a new XmlCommentState enumeration.
7777         * cs-parser.jay:
7778           Added lines to fill Documentation element for field, constant,
7779           property, indexer, method, constructor, destructor, operator, event
7780           and class, struct, interface, delegate, enum.
7781           Added lines to warn incorrect comment.
7782         * rootcontext.cs :
7783           Added Documentation field (passed only when /doc was specified).
7784         * decl.cs:
7785           Added DocComment, DocCommentHeader, GenerateDocComment() and
7786           OnGenerateDocComment() and some supporting private members for
7787           /doc feature to MemberCore.
7788         * class.cs:
7789           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
7790         * delegate.cs:
7791           Added overriden DocCommentHeader.
7792         * enum.cs:
7793           Added overriden DocCommentHeader and GenerateDocComment().
7794
7795 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
7796
7797         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
7798         unwrapping the enumeration values, chain to
7799         DoConstantNumericPromotions again, so we can promote things to the
7800         fundamental types (takes care of enums that are bytes, sbytes).
7801
7802         Fixes bug #62054.
7803
7804 2004-12-01  Raja R Harinath  <rharinath@novell.com>
7805
7806         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
7807         Fix long-standing bug in type-lookup.  Use FindType instead of
7808         LookupType when ec.ResolvingTypeTree.
7809         (Attribute.ResolveType, Attribute.Resolve)
7810         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
7811         Update to changes.
7812         (Attributes.Search): Remove internal version.  Update.
7813         (Attributes.SearchMulti): Update.
7814         (Attributes.GetClsCompliantAttribute): Remove.
7815         (Attributes.GetIndexerNameAttribute): Remove.
7816         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
7817         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
7818         * class.cs (Indexer.Define): Likewise.
7819
7820 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
7821
7822         Fix bug #68790
7823         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
7824         MarshallByReference members access.
7825
7826         * expression.cs: Use CheckMarshallByRefAccess;
7827         Better error CS0197 message.
7828
7829         * report.cs: Print whole related error message.
7830
7831 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7832
7833         * class (GetClassBases): Better error 60 report.
7834         (EventProperty): Disabled warning 67 detection.
7835
7836 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7837
7838         Fix bug #60324
7839         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
7840
7841         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
7842         precise values.
7843
7844 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7845
7846         Fix bug #49488
7847         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
7848
7849         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
7850
7851 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
7852
7853         * attribute.cs (Attribute.Resolve): Refine error reporting and
7854         report a cs0117 if the identifier does not exist, to distinguish
7855         from 0617 which is a miss-use of the actual identifier.
7856
7857         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
7858         between cs0070 and cs0079.
7859
7860         * class.cs (MemberBase.DoDefine): When reporting a wrong
7861         accessibility level, we use MethodCore to compare instead of
7862         Method (this was a regression in some refactoring effort).
7863
7864         So now we correctly report cs0056 again.
7865
7866         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
7867         testing the target_type (which was known to be object_type) and
7868         not the source type (which is anonymous_method).
7869
7870         Fixed reporting of error cs1660.
7871
7872         * expression.cs (UserCast.Source): Expose the underlying cast.
7873
7874         * statement.cs (Switch.SwitchGoverningType): Sort the list of
7875         allowed types to find a match to int32 first (most common).
7876
7877         In addition, it ignores any ImplicitUserConversions that did an
7878         internal implicit conversion (as the switch statement allows only
7879         one integral conversion to exist).
7880
7881         * class.cs (PartialContainer.Create): rename `name' to
7882         `member_name' for clarity.  Then replace the string calls with a
7883         call to MemberName.GetPartialName, as now using
7884         MemberName.ToString is an error (this is due to the side effects
7885         it had, that were fixed in the past).
7886
7887         This will restore the error reporting on a number of partial class
7888         errors that were missusing this (and getting an exception as a
7889         results, which is now just a plain textual warning, because
7890         yyparse debug output would crash otherwise).
7891
7892 2004-11-26  Raja R Harinath  <rharinath@novell.com>
7893
7894         * Makefile (PROGRAM_INSTALL_DIR): Remove.
7895
7896 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7897
7898         * rootcontext.cs (LookupType): Make sure to cache lookups that
7899         don't give us a negative result. This saves about 5% of corlib
7900         compilation time.
7901
7902 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7903
7904         * report.cs (AbstractMessage.Print): messages are sent to stderr
7905
7906         * class.cs (TypeContainer.GetClassBases): It is an error to have a
7907         non-interface in the list of interfaces (at this point, either
7908         parent was properly set, or a base class is being listed in the
7909         interfaces section).
7910
7911         This flags error 1722, and resolves the crash from bug 69259.
7912
7913 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7914
7915         * statement.cs (Using.EmitExpressionFinally): make this work right
7916         for valuetypes. Fixes 69926.
7917
7918 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7919
7920         * const.cs (Const.ChangeType): Cope with the "0 literal can be
7921         converted to an enum" here, before we try to change the underlying
7922         type.  This code exists, but it is a different code path than the
7923         one used while encoding constants.
7924
7925         (ImplicitReferenceConversionExists): In addition, resynchronized
7926         the code here, so it matches the same code in
7927         ImplicitReferenceConversionExists for the `from any class-type S
7928         to any interface-type T'.       
7929
7930 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
7931
7932         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
7933
7934 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
7935
7936         * cs-parser.jay: Use verbosity accordingly. 
7937
7938 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7939
7940         * expression.cs (Unary.ResolveOperator): Do not report warning;
7941         AddressOf reads from variable.
7942         
7943         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
7944
7945 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7946
7947         Fix bug #69462
7948
7949         * attribute.cs (Attributable): Removed CheckTargets.
7950         (Attributes.Emit): Explicit attribute targets are tested here.
7951
7952         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
7953         not enabled for interfaces.
7954
7955         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
7956         (GetAssemblyName): Ouch next bug there.
7957
7958 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7959
7960         * expression.cs: Error 275 added.
7961         
7962 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
7963
7964         Fix bug #69177 (Implemented decimal constant support)
7965
7966         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
7967         (BinaryFold): Add DecimalConstant.
7968
7969         * const.cs (Define): Decimal constant 
7970         (is not constant.
7971         (ChangeType): Add decimal type handling.
7972         (LookupConstantValue): Don't set value for decimal type but
7973         emit DecimalConstantAttribute. Needed for constant optimization.
7974
7975         * constant.cs (ToDecimal): New method.
7976         (ConvertToDecimal): New method.
7977         (IntConstant): Implemented ConvertToDecimal.
7978         (DecimalConstant.Emit): Emit optimized version for decimals in
7979         int range.
7980
7981         * expression.cs (ResolveOperator): Changed order of constant
7982         reduction to work correctly with native types which have
7983         overloaded operators.
7984         (ResolveMemberAccess): Extract constant value from attribute
7985         for decimal type.
7986
7987         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
7988
7989         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
7990         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
7991         (ChangeType): Decimal is special.
7992         (TypeToCoreType): Add decimal type.
7993
7994 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
7995
7996         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
7997         decimal types.
7998
7999 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8000
8001         * class.cs (EventField.ApplyAttributeBuilder): Fix error
8002         test cs1667-5.cs.
8003
8004 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8005
8006         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
8007
8008         * pending.cs (PendingImplementation): Grab only interfaces.
8009
8010 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8011
8012         * statement.cs (ForeachHelperMethods): Add location member and
8013         error 202 detection.
8014
8015 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
8016
8017         * expression.cs (DoResolveBase): Fixed wrong warning for out
8018         variables.
8019
8020 2004-12-04  Martin Baulig  <martin@ximian.com>
8021
8022         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
8023         to check whether the conversion is ok.
8024
8025         * typemanager.cs (TypeManager.GetTypeArguments): Just return
8026         `Type.EmptyTypes' if we're not a generic TypeContainer.
8027
8028 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8029
8030         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
8031         old bug: when converting from the null literal to a pointer,
8032         return an EmptyCast, not the NullLiteral.
8033
8034         This fixes #69921, the recent null_type changes probably made this
8035         bug more prominent.
8036
8037 2004-12-03  Martin Baulig  <martin@ximian.com>
8038
8039         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8040         method as our child, call AnonymousMethod.Compatible() on it.
8041
8042 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8043
8044         * class.cs (FieldBase): Use an unused bit field from the field to
8045         encode the `has_offset' property from the FieldMember.  This saves
8046         a couple of Ks on bootstrap compilation.
8047
8048         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8049         method as our child, return the AnonymousMethod resolved
8050         expression.
8051
8052         * expression.cs (New.DoResolve): Allow return values from
8053         NewDelegate to also include AnonymousMethods.
8054
8055         Fixes #70150.
8056
8057 2004-11-29  Raja R Harinath  <rharinath@novell.com>
8058
8059         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
8060         cs1648 report.
8061         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
8062         System.Runtime.InteropServices._Exception, since it's a base
8063         interface of the core type System.Exception in the net_2_0 profile.
8064
8065 2004-11-27  Martin Baulig  <martin@ximian.com>
8066
8067         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
8068
8069 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8070
8071         * Makefile: Convert to use executable.make.
8072         * gmcs.exe.sources: New.
8073
8074 2004-11-25  Martin Baulig  <martin@ximian.com>
8075
8076         * expression.cs (Invocation.InferType): Added support for byref types.
8077
8078 2004-11-25  Martin Baulig  <martin@ximian.com>
8079
8080         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
8081         in TypeManager.TypeToCoreType().
8082
8083 2004-11-25  Martin Baulig  <martin@ximian.com>
8084
8085         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
8086         "Dispose" method from the `current_type'.
8087         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
8088         DoDefineMembers() instead of using the MethodBuilder; this is
8089         required for generic iterators.
8090
8091         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
8092
8093 2004-11-24  Martin Baulig  <martin@ximian.com>
8094
8095         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
8096
8097 2004-11-20  Martin Baulig  <martin@ximian.com>
8098
8099         * expression.cs (Invocation.InferType): Correctly infer generic
8100         instances; see gen-103.cs.
8101         (Invocation.InferTypeArguments): If a generic method doesn't have
8102         any unbound type parameters, we don't need to infer anything.
8103
8104 2004-11-19  Raja R Harinath  <rharinath@novell.com>
8105
8106         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
8107
8108 2004-11-17  Raja R Harinath  <rharinath@novell.com>
8109
8110         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
8111         (TypeHandle.GetMemberCache): New.
8112         (TypeHandle.TypeHandle): Update.
8113         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
8114         (TypeManager.LookupParentInterfacesCache):
8115         Rename from LookupInterfaceCache.  Optimize slightly.
8116         (TypeManager.MemberLookup_FindMembers): Update.
8117         * decl.cs (MemberCache.MemberCache): Set Container to null in the
8118         multi-type variant.
8119         (AddCacheContents): Rename from AddHashtable.
8120         * class.cs (TypeContainer.parent_container): Remove.
8121         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
8122         (TypeContainer.DoDefineMembers): Don't initialize it.
8123         Update to name changes.
8124         
8125 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
8126
8127         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
8128         that factors the code to check access modifiers on override.  
8129
8130         (PropertyBase): Use the code here.
8131
8132         Patch from Lluis S'anchez, fixes bug #69361.
8133
8134 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
8135
8136         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
8137         routine that is used to report the use of a captured variable
8138         whose address has been taken.
8139
8140         There are two checks: one when variables are being captured and
8141         the other check is when the address of a variable is taken. 
8142         
8143         (because an anonymous methods might be resolved before *or* after
8144         the address has been taken) and 
8145
8146         * expression.cs (Conditional.DoResolve): Remove the special
8147         casing that Martin added to trueExpr and falseExpr being both
8148         NullLiteral.  We get the right behavior now just by introducing
8149         the null_type into the compiler. 
8150
8151         * convert.cs (ExplicitConversion): Change the code to use
8152         null_type instead of testing `expr is NullLiteral'.
8153         (ImplicitConversionStandard): use null_type too.
8154         (ImplicitReferenceConversionExists): use null_type too.
8155         (ImplicitReferenceConversion): use null_type too.
8156
8157         * literal.cs: The type of `NullLiteral' is now null_type instead
8158         of object_type. 
8159         (Resolve): Set the type here.
8160
8161         * typemanager.cs: Introduce null_type.
8162
8163 2004-11-18  Martin Baulig  <martin@ximian.com>
8164
8165         * rootcontext.cs
8166         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
8167
8168 2004-11-18  Martin Baulig  <martin@ximian.com>
8169
8170         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
8171
8172 2004-11-18  Martin Baulig  <martin@ximian.com>
8173
8174         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
8175         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
8176         call ResolveConstructedType() on it to resolve it without checking
8177         constraints.
8178         (Constraints.ResolveTypes): Check them here.
8179         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
8180         but don't check constraints.
8181         (ConstructedType.ResolveAsTypeTerminal): Override this and also
8182         check constraints here.
8183         (ConstructedType.ResolveConstructedType): New public method.  This
8184         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
8185         resolve ourselves without checking constraints.
8186
8187         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
8188
8189 2004-11-18  Martin Baulig  <martin@ximian.com>
8190
8191         * decl.cs
8192         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
8193
8194         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
8195
8196 2004-11-18  Martin Baulig  <martin@ximian.com>
8197
8198         * ecore.cs (TypeExpr.ResolveType): Removed.
8199         (Expression.ResolveAsTypeTerminal): We always return a fully
8200         resolved `TypeExpr', so we can just access its `Type'.
8201
8202         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
8203
8204 2004-11-17  Martin Baulig  <martin@ximian.com>
8205
8206         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
8207         sure we don't return any unresolved TypeExpr's.
8208         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
8209         a `TypeExpr'.
8210         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
8211
8212         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
8213         unresolved `ConstructedType's.
8214
8215 2004-11-17  Martin Baulig  <martin@ximian.com>
8216
8217         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
8218
8219 2004-11-17  Martin Baulig  <martin@ximian.com>
8220
8221         * ecore.cs
8222         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
8223
8224         * decl.cs (DeclSpace.ResolveType): Removed.
8225         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
8226
8227 2004-11-17  Martin Baulig  <martin@ximian.com>
8228
8229         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
8230         direction, like FindMembers() does.  Fixes #69546, testcase is in
8231         test-315.cs.    
8232
8233 2004-11-16  Martin Baulig  <martin@ximian.com>
8234
8235         This is based on a patch from Marek Safar, see bug #69082.
8236         Fixes bugs #63705 and #67130.
8237
8238         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
8239         method; create a MemberCache for an interface type and cache the
8240         result.
8241
8242         * decl.cs (IMemberContainer.ParentContainer): Removed.
8243         (IMemberContainer.ParentCache): New property.
8244         (MemberCache.SetupCacheForInterface): Removed.
8245         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
8246         to create a cache for an interface's "parent".
8247
8248         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
8249         interfaces too.
8250
8251 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
8252
8253         * statement.cs: Avoid adding bools to a hashtable.
8254
8255 2004-11-15  Martin Baulig  <martin@ximian.com>
8256
8257         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
8258
8259 2004-11-11  Martin Baulig  <martin@ximian.com>
8260
8261         * typemanager.cs (TypeManager.GetMethodName): New method.
8262
8263         * class.cs (MethodData.Define): Include the generic arity in the
8264         name of an explicit interface; also add it to the method name.
8265
8266         * pending.cs (PendingImplementation.InterfaceMethod): The method
8267         name now includes the generic arity.
8268
8269 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
8270
8271         * expression.cs (Invocation.OverloadResolve): Flag error if we are
8272         calling an unsafe method from a safe location.
8273
8274 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
8275
8276         Fix #69167
8277         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
8278
8279 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
8280
8281         * namespace.cs (VerifyUsing): use GetPartialName instead of
8282         ToString. 
8283
8284 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
8285
8286         * statement.cs (Return.Resolve): Fix regression in typo: if
8287         `in_exc', we have to request a NeedReturnLabel, this was a typo
8288         introduced in the anonymous method check-in.  Fixes #69131.
8289
8290         * Indexers were using the ShortName when defining themselves,
8291         causing a regression in the compiler bootstrap when applying the
8292         patch from 2004-11-02 (first part), now they use their full name
8293         and the bug is gone.
8294
8295 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
8296
8297         * driver.cs: Strip the path from the names of embedded resources. Fixes
8298         #68519.
8299
8300 2004-11-04  Raja R Harinath  <rharinath@novell.com>
8301
8302         Fix error message regression: cs0104-2.cs.
8303         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
8304         (AliasEntry.Resolve): Update.
8305         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
8306         'silent' flag.
8307         (RootContext.LookupType): Update.
8308
8309 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
8310
8311         * cs-parser.jay: Add support for handling accessor modifiers
8312         * class: Add support port accessor modifiers and error checking,
8313         define PropertyMethod.Define as virtual (not abstract anymore)
8314         * ecore.cs: Add checking for proeprties access with access modifiers
8315         * iterators.cs: Modify Accessor constructor call based in the modified
8316         constructor
8317 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
8318
8319         * expression.cs (StringConcat): Handle being called twice,
8320         as when we have a concat in a field init with more than two
8321         ctors in the class
8322
8323 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
8324
8325         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
8326         special case explicit implementations, we should always produce
8327         the .property or .event declaration.
8328         
8329         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
8330         since it will not return correct data if people use this
8331         unresolved in the presence of using statements (see test-313).
8332
8333         * class.cs (MethodData.Define): If we are an explicit interface
8334         implementation, set the method name to the full name of the
8335         interface plus the name of the method.  
8336
8337         Notice that using the method.MethodName.GetFullName() does not
8338         work, as it will only contain the name as declared on the source
8339         file (it can be a shorthand in the presence of using statements)
8340         and not the fully qualifed type name, for example:
8341
8342         using System;
8343
8344         class D : ICloneable {
8345                 object ICloneable.Clone ()  {
8346                 }
8347         }
8348
8349         Would produce a method called `ICloneable.Clone' instead of
8350         `System.ICloneable.Clone'.
8351
8352         * namespace.cs (Alias.Resolve): Use GetPartialName.
8353         
8354 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8355
8356         * cs-parser.jay: Add error 1055 report.
8357
8358 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
8359
8360         * assign.cs (Assign.DoResolve): Only do the transform of
8361         assignment into a New if the types are compatible, if not, fall
8362         through and let the implicit code deal with the errors and with
8363         the necessary conversions. 
8364
8365 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8366
8367         * cs-parser.jay: Add error 1031 report.
8368
8369         * cs-tokenizer.cs: Add location for error 1038.
8370
8371 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8372
8373         * cs-parser.jay: Add error 1016 report.
8374
8375 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8376
8377         * cs-parser.jay: Add errors 1575,1611 report.
8378
8379 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8380
8381         * cs-parser.jay: Add error 1001 report.
8382
8383 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8384
8385         Fix #68850
8386         * attribute.cs (GetMarshal): Add method argument for
8387         caller identification.
8388
8389         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
8390         agument for GetMarshal and RuntimeMissingSupport.
8391
8392 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8393
8394         * attribute.cs (ExtractSecurityPermissionSet): Removed
8395         TypeManager.code_access_permission_type.
8396
8397         * typemanager.cs: Removed TypeManager.code_access_permission_type.
8398
8399 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
8400
8401         * expression.cs (LocalVariableReference.DoResolveLValue): Check
8402         for obsolete use of a variable here.   Fixes regression on errors
8403         cs0619-25 and cs0619-26.
8404
8405 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
8406
8407         Fix #62358, implemented security attribute encoding.
8408
8409         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
8410         Tests permitted SecurityAction for assembly or other types.
8411         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
8412         data from SecurityPermissionAttribute to PermisionSet class.
8413
8414         * class.cs (ApplyAttributeBuilder): Added special handling
8415         for System.Security.Permissions.SecurityAttribute based types.
8416
8417         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
8418         special handling for System.Security.Permissions.SecurityAttribute
8419         based types.
8420
8421         * enum.cs (ApplyAttributeBuilder): Added special handling
8422         for System.Security.Permissions.SecurityAttribute based types.
8423
8424         * parameter.cs (ApplyAttributeBuilder): Added special handling
8425         for System.Security.Permissions.SecurityAttribute based types.
8426
8427         * rootcontext.cs: Next 2 core types.
8428
8429         * typemanager.cs (TypeManager.security_permission_attr_type):
8430         Built in type for the SecurityPermission Attribute.
8431         (code_access_permission_type): Build in type.
8432
8433 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
8434
8435         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
8436         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
8437         all of this information into
8438         EmitContext.EmitCapturedVariableInstance.
8439         
8440         * codegen.cs (EmitCapturedVariableInstance): move here the
8441         funcionality of emitting an ldarg.0 in the presence of a
8442         remapping.   This centralizes the instance emit code.
8443
8444         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8445         then emit a load of this: it means that we have reached the
8446         topmost ScopeInfo: the one that contains the pointer to the
8447         instance of the class hosting the anonymous method.
8448
8449         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8450         captures to the topmost CaptureContext.
8451
8452 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8453
8454         * expression.cs (LocalVariableReference): Move the knowledge about
8455         the iterators into codegen's EmitCapturedVariableInstance.
8456
8457 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8458
8459         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8460         all code paths return a value from an anonymous method (it is the
8461         same as the 161 error, but for anonymous methods).
8462
8463 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8464
8465         The introduction of anonymous methods in the compiler changed
8466         various ways of doing things in the compiler.  The most
8467         significant one is the hard split between the resolution phase
8468         and the emission phases of the compiler.
8469
8470         For instance, routines that referenced local variables no
8471         longer can safely create temporary variables during the
8472         resolution phase: they must do so from the emission phase,
8473         since the variable might have been "captured", hence access to
8474         it can not be done with the local-variable operations from the runtime.
8475         
8476         * statement.cs 
8477
8478         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8479         is a toplevel block.
8480
8481         (ToplevelBlock): A new kind of Block, these are the blocks that
8482         are created by the parser for all toplevel method bodies.  These
8483         include methods, accessors and anonymous methods.
8484
8485         These contain some extra information not found in regular blocks:
8486         A pointer to an optional CaptureContext (for tracking captured
8487         local variables and parameters).  A pointer to the parent
8488         ToplevelBlock.
8489         
8490         (Return.Resolve): Catch missmatches when returning a value from an
8491         anonymous method (error 1662).
8492         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8493         phase.
8494
8495         (Break.Resolve): ditto.
8496
8497         (SwitchLabel): instead of defining the labels during the
8498         resolution phase, we now turned the public ILLabel and ILLabelCode
8499         labels into methods called GetILLabelCode() and GetILLabel() that
8500         only define the label during the Emit phase.
8501
8502         (GotoCase): Track the SwitchLabel instead of the computed label
8503         (its contained therein).  Emit the code by using
8504         SwitchLabel.GetILLabelCode ().
8505
8506         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8507         whether the Local has been captured or not.
8508
8509         (LocalInfo.IsCaptured): New property, used to tell whether the
8510         local has been captured.
8511         
8512         * anonymous.cs: Vastly updated to contain the anonymous method
8513         support.
8514
8515         The main classes here are: CaptureContext which tracks any
8516         captured information for a toplevel block and ScopeInfo used to
8517         track the activation frames for various local variables.   
8518
8519         Each toplevel block has an optional capture context associated
8520         with it.  When a method contains an anonymous method both the
8521         toplevel method and the anonymous method will create a capture
8522         context.   When variables or parameters are captured, they are
8523         recorded on the CaptureContext that owns them, for example:
8524
8525         void Demo () {
8526              int a;
8527              MyDelegate d = delegate {
8528                  a = 1;
8529              }
8530         }
8531
8532         Here `a' will be recorded as captured on the toplevel
8533         CapturedContext, the inner captured context will not have anything
8534         (it will only have data if local variables or parameters from it
8535         are captured in a nested anonymous method.
8536
8537         The ScopeInfo is used to track the activation frames for local
8538         variables, for example:
8539
8540         for (int i = 0; i < 10; i++)
8541                 for (int j = 0; j < 10; j++){
8542                    MyDelegate d = delegate {
8543                         call (i, j);
8544                    }
8545                 }
8546
8547         At runtime this captures a single captured variable `i', but it
8548         captures 10 different versions of the variable `j'.  The variable
8549         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8550         recorded on a child.  
8551
8552         The toplevel ScopeInfo will also track information like the `this'
8553         pointer if instance variables were referenced (this is necessary
8554         as the anonymous method lives inside a nested class in the host
8555         type of the method). 
8556
8557         (AnonymousMethod): Expanded to track the Toplevel, implement
8558         `AnonymousMethod.Compatible' to tell whether an anonymous method
8559         can be converted to a target delegate type. 
8560
8561         The routine now also produces the anonymous method content
8562
8563         (AnonymousDelegate): A helper class that derives from
8564         DelegateCreation, this is used to generate the code necessary to
8565         produce the delegate for the anonymous method that was created. 
8566
8567         * assign.cs: API adjustments for new changes in
8568         Convert.ImplicitStandardConversionExists.
8569
8570         * class.cs: Adjustments to cope with the fact that now toplevel
8571         blocks are of type `ToplevelBlock'. 
8572
8573         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
8574         insteda of standard blocks.
8575
8576         Flag errors if params arguments are passed to anonymous methods.
8577
8578         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
8579         `CurrentAnonymousMethod' which points to the current Anonymous
8580         Method.  The variable points to the AnonymousMethod class that
8581         holds the code being compiled.  It is set in the new EmitContext
8582         created for the anonymous method.
8583
8584         (EmitContext.Phase): Introduce a variable and an enumeration to
8585         assist in enforcing some rules about when and where we are allowed
8586         to invoke certain methods (EmitContext.NeedsReturnLabel is the
8587         only one that enfonces this right now).
8588
8589         (EmitContext.HaveCaptureInfo): new helper method that returns
8590         whether we have a CapturedContext initialized.
8591
8592         (EmitContext.CaptureVariable): New method used to register that a
8593         LocalInfo must be flagged for capturing. 
8594
8595         (EmitContext.CapturedParameter): New method used to register that a
8596         parameters must be flagged for capturing. 
8597         
8598         (EmitContext.CapturedField): New method used to register that a
8599         field must be flagged for capturing. 
8600
8601         (EmitContext.HaveCapturedVariables,
8602         EmitContext.HaveCapturedFields): Return whether there are captured
8603         variables or fields. 
8604
8605         (EmitContext.EmitMethodHostInstance): This is used to emit the
8606         instance for the anonymous method.  The instance might be null
8607         (static methods), this (for anonymous methods that capture nothing
8608         and happen to live side-by-side with the current method body) or a
8609         more complicated expression if the method has a CaptureContext.
8610
8611         (EmitContext.EmitTopBlock): Routine that drives the emission of
8612         code: it will first resolve the top block, then emit any metadata
8613         and then emit the code.  The split is done so that we can extract
8614         any anonymous methods and flag any captured variables/parameters.
8615         
8616         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
8617         during this phase, the ILGenerator should not be used as labels
8618         and local variables declared here might not be accessible to any
8619         code that is part of an anonymous method.  
8620
8621         Exceptions to this include the temporary variables that are
8622         created by some statements internally for holding temporary
8623         variables. 
8624         
8625         (EmitContext.EmitMeta): New routine, in charge of emitting all the
8626         metadata for a cb
8627
8628         (EmitContext.TemporaryReturn): This method is typically called
8629         from the Emit phase, and its the only place where we allow the
8630         ReturnLabel to be defined other than the EmitMeta.  The reason is
8631         that otherwise we would have to duplicate a lot of logic in the
8632         Resolve phases of various methods that today is on the Emit
8633         phase. 
8634
8635         (EmitContext.NeedReturnLabel): This no longer creates the label,
8636         as the ILGenerator is not valid during the resolve phase.
8637
8638         (EmitContext.EmitThis): Extended the knowledge in this class to
8639         work in anonymous methods in addition to iterators. 
8640
8641         (EmitContext.EmitCapturedVariableInstance): This emits whatever
8642         code is necessary on the stack to access the instance to a local
8643         variable (the variable will be accessed as a field).
8644
8645         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
8646         EmitContext.EmitAddressOfParameter): Routines to support
8647         parameters (not completed at this point). 
8648         
8649         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
8650         will also remove the parameters.
8651
8652         * convert.cs (Convert): Define a `ConstantEC' which points to a
8653         null.  This is just to prefity some code that uses
8654         ImplicitStandardConversion code and do not have an EmitContext
8655         handy.
8656
8657         The idea is to flag explicitly that at that point in time, it is
8658         known that the conversion will not trigger the delegate checking
8659         code in implicit conversions (which requires a valid
8660         EmitContext). 
8661
8662         Everywhere: pass new EmitContext parameter since
8663         ImplicitStandardConversionExists now requires it to check for
8664         anonymous method conversions. 
8665
8666         (Convert.ImplicitStandardConversionExists): If the type of an
8667         expression is the anonymous_method_type, and the type is a
8668         delegate, we invoke the AnonymousMethod.Compatible method to check
8669         whether an implicit conversion is possible. 
8670
8671         (Convert.ImplicitConversionStandard): Only do implicit method
8672         group conversions if the language level is not ISO_1.
8673
8674         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
8675         MethodInfo for the Invoke method.  used by Delegate and
8676         AnonymousDelegate.
8677
8678         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
8679         method conversions if the target type is a delegate.
8680
8681         Removed extra debugging nops.
8682
8683         (LocalVariableReference): Turn the `local_info' into a public
8684         field. 
8685
8686         Add `prepared' field, the same hack used for FieldExprs to cope
8687         with composed assignments, as Local variables do not necessarily
8688         operate purely on the stack as they used to: they can be captured
8689         fields. 
8690
8691         Add `temp' for a temporary result, like fields.
8692
8693         Refactor DoResolve and DoResolveLValue into DoResolveBase.
8694
8695         It now copes with Local variables that are captured and emits the
8696         proper instance variable to load it from a field in the captured
8697         case. 
8698
8699         (ParameterReference.DoResolveBase): During the resolve phase,
8700         capture parameters if we are in an anonymous method.
8701
8702         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
8703         anonymous method, use the EmitContext helper routines to emit the
8704         parameter reference.
8705
8706         * iterators.cs: Set RemapToProxy to true/false during the
8707         EmitDispose class.
8708
8709         * parameters.cs (GetParameterByName): New helper method. 
8710
8711         * typemanager.cs (anonymous_method_type) a new type that
8712         represents an anonyous method.  This is always an internal type,
8713         used as a fencepost to test against the anonymous-methodness of an
8714         expression. 
8715         
8716 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
8717
8718         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
8719         561 report.
8720         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
8721
8722 2004-11-10  Martin Baulig  <martin@ximian.com>
8723
8724         * expression.cs (Invocation.BetterFunction): If two methods have
8725         equal parameter types, but only one of them is generic, the
8726         non-generic one wins.
8727         (New.DoResolve): Don't set `is_struct' to false if we're a generic
8728         instance; just use `Type.IsValueType' to determine whether
8729         something is a struct or not.
8730         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
8731         so we can be called multiple times.
8732
8733 2004-11-10  Martin Baulig  <martin@ximian.com>
8734
8735         * generic.cs (TypeParameter.DefineConstraints): New public method.
8736         (TypeParameter.CheckAccessLevel): Override this and return true.
8737         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
8738         override ResolveType() anymore.
8739         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
8740
8741 2004-11-10  Martin Baulig  <martin@ximian.com>
8742
8743         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
8744         call DeclSpace.ResolveNestedType() on it.
8745
8746 2004-11-10  Martin Baulig  <martin@ximian.com>
8747
8748         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
8749         non-null, call ParameterModifier() on it.
8750
8751 2004-11-10  Martin Baulig  <martin@ximian.com>
8752
8753         * iterators.cs
8754         (Iterators): Added `current_type' and `this_type' fields.
8755         (Iterators.DefineIterator): Create a new EmitContext and store it
8756         in `ec'; compute `this_type'.
8757
8758 2004-11-10  Martin Baulig  <martin@ximian.com>
8759
8760         * typemanager.cs
8761         (TypeManager.IsPrivateAccessible): New public method.
8762         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
8763
8764 2004-11-10  Martin Baulig  <martin@ximian.com>
8765
8766         * class.cs (TypeContainer.DefineType): Call
8767         TypeBuilder.DefineGenericParameters() before resolving the type
8768         parameters.
8769         (MethodData.parent_method): New protected field.
8770         (MethodData..ctor): Added `MethodInfo parent_method' argument.
8771         (MethodData.Define): Compute `parent_method'.
8772
8773         * decl.cs
8774         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
8775         (MemberCore.GetClsCompliantAttributeValue): Likewise.
8776         (DeclSpace.ec): New protected field; store the EmitContext here.
8777         (DeclSpace.EmitContext): New public property.
8778         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
8779         (DeclSpace.ResolveNestedType): New public method.
8780         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
8781         (DeclSpace.NestedAccessible): Added `Type tb' argument.
8782         (DeclSpace.FamilyAccessible): Likewise.
8783         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
8784         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
8785         EmitContext.
8786
8787         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
8788         field.
8789
8790         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
8791         (Enum.Emit): Don't create a new EmitContext.
8792
8793 2004-10-18  Martin Baulig  <martin@ximian.com>
8794
8795         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
8796         `Type' directly, but call ResolveType() on it.
8797         (Catch.Resolve): Likewise.
8798         (Foreach.Resolve): Likewise.
8799
8800 2004-10-18  Martin Baulig  <martin@ximian.com>
8801
8802         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
8803         `Type' directly, but call ResolveType() on it.
8804         (Probe.DoResolve): Likewise.
8805         (ArrayCreation.LookupType): Likewise.
8806         (TypeOf.DoResolve): Likewise.
8807         (SizeOf.DoResolve): Likewise.
8808
8809 2004-10-18  Raja R Harinath  <rharinath@novell.com>
8810
8811         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
8812         the ResolveType.
8813
8814 2004-10-17  John Luke  <john.luke@gmail.com>
8815
8816         * class.cs (Operator.GetSignatureForError): use CSharpName
8817
8818         * parameter.cs (Parameter.GetSignatureForError): Returns
8819         correct name even if was not defined.
8820
8821 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8822
8823         Fix #65816.
8824         * class.cs (TypeContainer.EmitContext): New property.
8825         (DefineNestedTypes): Create an emitcontext for each part.
8826         (MethodCore.DoDefineParameters): Use container's emitcontext.
8827         Pass type array to InternalParameters.
8828         (MemberBase.DoDefine): Use container's emitcontext.
8829         (FieldMember.Define): Likewise.
8830         (Event.Define): Likewise.
8831         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8832         Pass type array to InternalParameters.
8833         (SetIndexerMethod.GetParameterInfo): Likewise.
8834         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8835         * delegate.cs (Define): Pass emitcontext to
8836         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8837         array to InternalParameters.
8838         * expression.cs (ParameterReference.DoResolveBase): Pass
8839         emitcontext to GetParameterInfo.
8840         (ComposedCast.DoResolveAsTypeStep): Remove check on
8841         ec.ResolvingTypeTree.
8842         * parameter.cs (Parameter.Resolve): Change argument to
8843         EmitContext.  Use ResolveAsTypeTerminal.
8844         (Parameter.GetSignature): Change argument to EmitContext.
8845         (Parameters.ComputeSignature): Likewise.
8846         (Parameters.ComputeParameterTypes): Likewise.
8847         (Parameters.GetParameterInfo): Likewise.
8848         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8849         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8850         * support.cs (InternalParameters..ctor): Remove variant that takes
8851         a DeclSpace.
8852         * typemanager.cs (system_intptr_expr): New.
8853         (InitExpressionTypes): Initialize it.
8854
8855 2004-10-12  Chris Toshok  <toshok@ximian.com>
8856
8857         * cs-parser.jay: fix location for try_statement and catch_clause.
8858
8859 2004-10-18  Martin Baulig  <martin@ximian.com>
8860
8861         * class.cs (FieldMember.Define): Don't access the TypeExpr's
8862         `Type' directly, but call ResolveType() on it.
8863         (MemberBase.DoDefine): Likewise.
8864
8865         * expression.cs (New.DoResolve): Don't access the TypeExpr's
8866         `Type' directly, but call ResolveType() on it.
8867         (ComposedCast.DoResolveAsTypeStep): Likewise.
8868
8869         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
8870         `Type' directly, but call ResolveType() on it.
8871
8872 2004-10-17  John Luke  <john.luke@gmail.com>
8873
8874         * class.cs (Operator.GetSignatureForError): use CSharpName
8875
8876         * parameter.cs (Parameter.GetSignatureForError): Returns
8877         correct name even if was not defined.
8878
8879 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8880
8881         Fix #65816.
8882         * class.cs (TypeContainer.EmitContext): New property.
8883         (DefineNestedTypes): Create an emitcontext for each part.
8884         (MethodCore.DoDefineParameters): Use container's emitcontext.
8885         Pass type array to InternalParameters.
8886         (MemberBase.DoDefine): Use container's emitcontext.
8887         (FieldMember.Define): Likewise.
8888         (Event.Define): Likewise.
8889         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8890         Pass type array to InternalParameters.
8891         (SetIndexerMethod.GetParameterInfo): Likewise.
8892         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8893         * delegate.cs (Define): Pass emitcontext to
8894         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8895         array to InternalParameters.
8896         * expression.cs (ParameterReference.DoResolveBase): Pass
8897         emitcontext to GetParameterInfo.
8898         (ComposedCast.DoResolveAsTypeStep): Remove check on
8899         ec.ResolvingTypeTree.
8900         * parameter.cs (Parameter.Resolve): Change argument to
8901         EmitContext.  Use ResolveAsTypeTerminal.
8902         (Parameter.GetSignature): Change argument to EmitContext.
8903         (Parameters.ComputeSignature): Likewise.
8904         (Parameters.ComputeParameterTypes): Likewise.
8905         (Parameters.GetParameterInfo): Likewise.
8906         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8907         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8908         * support.cs (InternalParameters..ctor): Remove variant that takes
8909         a DeclSpace.
8910         * typemanager.cs (system_intptr_expr): New.
8911         (InitExpressionTypes): Initialize it.
8912
8913 2004-10-12  Chris Toshok  <toshok@ximian.com>
8914
8915         * cs-parser.jay: fix location for try_statement and catch_clause.
8916
8917 2004-10-07  Raja R Harinath  <rharinath@novell.com>
8918
8919         More DeclSpace.ResolveType avoidance.
8920         * decl.cs (MemberCore.InUnsafe): New property.
8921         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
8922         with newly created EmitContext.
8923         (FieldMember.Define): Likewise.
8924         * delegate.cs (Delegate.Define): Likewise.
8925         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
8926         only if normal name-lookup fails.
8927         (TypeExpr.DoResolve): Enable error-checking.
8928         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
8929         (SizeOf.DoResolve): Likewise.
8930         (ComposedCast.DoResolveAsTypeStep): Likewise.
8931         (StackAlloc.DoResolve): Likewise.
8932         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
8933         (Block.Unsafe): New property.
8934         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
8935         (Unsafe): Set 'unsafe' flag of contained block.
8936         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
8937         (Fixed.Resolve): Likewise.
8938         (Catch.Resolve): Likewise.
8939         (Using.ResolveLocalVariableDecls): Likewise.
8940         (Foreach.Resolve): Likewise.
8941
8942 2004-10-05  John Luke <john.luke@gmail.com>
8943
8944         * cs-parser.jay: add location to error CS0175
8945
8946 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
8947
8948         * ecore.cs (Expression.Constantity): Add support for turning null
8949         into a constant.
8950
8951         * const.cs (Const.Define): Allow constants to be reference types
8952         as long as the value is Null.
8953
8954 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
8955
8956         * namespace.cs (NamespaceEntry.Using): No matter which warning
8957         level is set, check if this namespace name has already been added.
8958
8959 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
8960
8961         * expression.cs: reftype [!=]= null should always use br[true,false].
8962         # 67410
8963
8964 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
8965
8966         Fix #67108
8967         * attribute.cs: Enum conversion moved to 
8968         GetAttributeArgumentExpression to be applied to the all
8969         expressions.
8970
8971 2004-10-01  Raja R Harinath  <rharinath@novell.com>
8972
8973         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
8974         * class.c (TypeContainer.DefineType): Flag error if
8975         base types aren't accessible due to access permissions.
8976         * decl.cs (DeclSpace.ResolveType): Move logic to
8977         Expression.ResolveAsTypeTerminal.
8978         (DeclSpace.ResolveTypeExpr): Thin layer over
8979         Expression.ResolveAsTypeTerminal.
8980         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
8981         Refactor code into NestedAccess.  Use it.
8982         (DeclSpace.NestedAccess): New.
8983         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
8984         argument to silence errors.  Check access permissions.
8985         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
8986         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
8987         (Cast.DoResolve): Likewise.
8988         (New.DoResolve): Likewise.
8989         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
8990         (TypeOf.DoResolve): Likewise.
8991
8992         * expression.cs (Invocation.BetterConversion): Return the Type of
8993         the better conversion.  Implement section 14.4.2.3 more faithfully.
8994         (Invocation.BetterFunction): Make boolean.  Make correspondence to
8995         section 14.4.2.2 explicit.
8996         (Invocation.OverloadResolve): Update.
8997         (Invocation): Remove is_base field.
8998         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
8999         (Invocation.Emit): Likewise.
9000
9001 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
9002
9003         * cs-parser.jay: Reverted 642 warning fix.
9004
9005 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9006
9007         Fix bug #66615
9008         * decl.cs (FindMemberWithSameName): Indexer can have more than
9009         1 argument.
9010
9011 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9012
9013         * expression.cs (LocalVariableReference.DoResolveLValue):
9014         Do not report warning 219 for out values.
9015         (EmptyExpression.Null): New member to avoid extra allocations.
9016
9017 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9018
9019         * cs-parser.jay: Fix wrong warning 642 report.
9020
9021         * cs-tokenizer.cs (CheckNextToken): New helper;
9022         Inspect next character if is same as expected.
9023
9024 2004-09-23  Martin Baulig  <martin@ximian.com>
9025
9026         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9027         (Convert.ImplicitReferenceConversionExists): Likewise.
9028
9029 2004-11-09  Raja R Harinath  <rharinath@novell.com>
9030
9031         * Makefile (DISTFILES): Comment out a few missing files.
9032
9033 2004-10-29  Raja R Harinath  <rharinath@novell.com>
9034
9035         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
9036         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
9037         (gmcs.exe): Invoke bootstrap-libs.
9038         (clean-local): Clean the net_2_0_bootstrap profile too.
9039         (PROGRAM_INSTALL_DIR): New.
9040         (install-local): Use it.
9041
9042 2004-10-13  Martin Baulig  <martin@ximian.com>
9043
9044         * generic.cs (TypeManager.InflatedConstraints): New nested class.
9045         (TypeParameter.DefineType): If we're a method type parameter and
9046         that method is overriding something, "inflate" its constraints.
9047
9048 2004-10-12  Martin Baulig  <martin@ximian.com>
9049
9050         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
9051         and have type arguments, create and resolve a ConstructedType.
9052
9053 2004-10-12  Martin Baulig  <martin@ximian.com>
9054
9055         * decl.cs (MemberCache.FindMemberToOverride): Use
9056         TypeManager.IsEqual() to compare the parameters and Type.Equals()
9057         to compare the invocationType.
9058
9059         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
9060         When comparing two type parameters, only do the signature-only
9061         comparision for method type parameters.
9062
9063 2004-10-11  Martin Baulig  <martin@ximian.com>
9064
9065         * report.cs: Don't make --fatal abort on warnings, we have
9066         -warnaserror for that.
9067
9068 2004-10-11  Martin Baulig  <martin@ximian.com>
9069
9070         * typemanager.cs
9071         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
9072         (TypeManager.IsEqual): Call ourself recursively instead of using
9073         Type.IsEqual(). 
9074
9075 2004-10-11  Martin Baulig  <martin@ximian.com>
9076
9077         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
9078         on our own type parameters, not on the ones we inherit from a containing
9079         class.
9080
9081         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
9082         the comparision.
9083
9084         * generic.cs (TypeParameter.Define): We may only be called once.
9085
9086         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
9087         instead of TypeManager.IsEqual().
9088
9089 2004-09-28  Martin Baulig  <martin@ximian.com>
9090
9091         * generic.cs
9092         (GenericConstraints.EffectiveBaseClass): New public property.
9093         (TypeParameter.GenericConstraints): New public property.
9094         (ConstructedType.CheckConstraints): Improved.
9095
9096         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
9097         (Convert.TypeParameterConversion): New private method; use this in
9098         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
9099         for all conversions related to type parameters.
9100
9101 2004-09-24  Martin Baulig  <martin@ximian.com>
9102
9103         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
9104         type parameter conversions for type parameters which are known to
9105         be reference types.
9106
9107 2004-09-24  Martin Baulig  <martin@ximian.com>
9108
9109         * generic.cs (GenericConstraints): Added `IsReferenceType' and
9110         `IsValueType' properties.
9111
9112         * support.cs (ReflectionConstraints): Use
9113         Type.GetGenericParameterConstraints() instead of the old hack.
9114
9115 2004-09-24  Martin Baulig  <martin@ximian.com>
9116
9117         * generic.cs (GenericConstraints): Moved here and made it an
9118         abstract class.
9119
9120         * support.cs (GenericConstraints): Moved to generic.cs.
9121
9122 2004-09-24  Martin Baulig  <martin@ximian.com>
9123
9124         * support.cs
9125         (ReflectionConstraints): Un-nested this class and made it public.
9126
9127         * typemanager.cs
9128         (TypeManager.GetTypeParameterConstraints): New public method.
9129         (TypeManager.HasConstructorConstraint): Use the attributes.
9130
9131 2004-09-24  Martin Baulig  <martin@ximian.com>
9132
9133         * support.cs (GenericConstraints): Replaced `HasConstructor',
9134         `IsReferenceType' and `IsValueType' with `Attributes'.
9135         (ReflectionParameters.ReflectionConstraints): Removed the Create()
9136         method and made the .ctor public.
9137
9138         * generic.cs (Constraints.Attributes): New public property.
9139         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
9140         `IsReferenceType' -> `HasReferenceTypeConstraint' and
9141         `IsValueType' -> `HasValueTypeConstraint'.
9142
9143 2004-09-23  Martin Baulig  <martin@ximian.com>
9144
9145         * generic.cs (Constraints): Reflect latest runtime changes.
9146
9147 2004-09-23  Martin Baulig  <martin@ximian.com>
9148
9149         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9150         (Convert.ImplicitReferenceConversionExists): Likewise.
9151
9152 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9153
9154         * class.cs (Operator.Define): Add error 448 and 559 report.
9155         
9156 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9157
9158         * class.cs (MemberBase.IsTypePermitted): New protected
9159         method for checking error CS0610.
9160
9161 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9162
9163         * class.cs (TypeContainer.HasExplicitLayout): New property
9164         Returns whether container has StructLayout attribute set Explicit.
9165         (FieldMember): New abstract class for consts and fields.
9166         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
9167         (Field): Reuse FieldMember.
9168
9169         * const.cs (Const): Reuse FieldMember.
9170
9171         * rootcontext.cs: EmitConstants call moved to class.
9172
9173 2004-09-22  Martin Baulig  <martin@ximian.com>
9174
9175         Marek and me just fixed one of our oldest bugs: #28562 :-)
9176
9177         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
9178
9179         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
9180         we're an EnumConstant, just return that.
9181         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
9182         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
9183         to get the value which'll actually be written into the attribute.
9184         However, we have to use GetValue() to access the attribute's value
9185         in the compiler.        
9186
9187 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9188
9189         * constant.cs (Constant.IsNegative): New abstract property
9190         IsNegative.
9191
9192         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
9193         (StackAlloc.DoResolve): Reused IsNegative.
9194
9195 2004-09-22  Martin Baulig  <martin@ximian.com>
9196
9197         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
9198         public method; like LookupTypeContainer, but also works for
9199         generic instances.
9200
9201         * report.cs (Report.SymbolRelatedToPreviousError): Use
9202         TypeManager.LookupGenericTypeContainer().       
9203
9204 2004-09-22  Martin Baulig  <martin@ximian.com>
9205
9206         Thanks to Peter Sestoft for this bug report.
9207
9208         * expression.cs (Conditional): If both the `trueExpr' and the
9209         `falseExpr' is a NullLiteral, return a NullLiteral.
9210
9211 2004-09-22  Martin Baulig  <martin@ximian.com>
9212
9213         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
9214         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
9215         for the "get_Current" call.
9216
9217 2004-09-21  Martin Baulig  <martin@ximian.com>
9218
9219         * convert.cs (Convert.ImplicitReferenceConversion): When
9220         converting to an interface type, first check whether we're
9221         converting from a reference type.
9222
9223 2004-09-14  Martin Baulig  <martin@ximian.com>
9224
9225         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
9226
9227 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
9228
9229         Fixed bug #61902
9230         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
9231         called and is obsolete then this member suppress message
9232         when call is inside next [Obsolete] method or type.
9233
9234         * expression.cs: Use TestObsoleteMethodUsage member.
9235
9236 2004-09-14  Martin Baulig  <martin@ximian.com>
9237
9238         * genericparser.cs: Removed.
9239
9240 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
9241
9242         * class.cs (MethodCore.CheckBase): Fix bug #65757.
9243
9244 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
9245
9246         * attribute.cs (Attribute.Resolve): Add error 653 report.
9247
9248         * class.cs (Class.ApplyAttributeBuilder): Add error 641
9249         report.
9250         (Method.ApplyAttributeBuilder): Add error 685 report.
9251         (Operator.Define): Add error 564 report.
9252
9253         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
9254
9255         * expression.cs (Invocation.DoResolve): Add error
9256         245 and 250 report.
9257
9258         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
9259         error 674 report.
9260
9261 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9262
9263         * class.cs (ConstructorInitializer.Resolve):
9264         Wrong error number (515->516).
9265
9266 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9267
9268         * class.cs (Indexer.Define): Add error 631 report.
9269
9270 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9271
9272         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
9273
9274 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9275
9276         * expression.cs (Probe.DoResolve): Add error CS0241 report.
9277
9278 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
9279
9280         * cs-parser.jay: Added error CS0241 report.
9281
9282 2004-09-10  Raja R Harinath  <rharinath@novell.com>
9283
9284         * cs-parser.jay (fixed_statement): Introduce a scope for the
9285         declaration in the 'fixed' statement.
9286
9287 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9288
9289         * cs-parser.jay: Added CS0230 error report.
9290
9291 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9292
9293         * cs-parser.jay: Added errors CS0231 and CS0257 report.
9294
9295 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9296
9297         * expression.cs (Argument.Resolve): Added error CS0192 and
9298         CS0199 report.
9299
9300 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9301
9302         C# 2.0 #pragma warning feature
9303
9304         * cs-tokenizer.cs (PreProcessPragma): New method; 
9305         Handles #pragma directive.
9306
9307         * report.cs (WarningRegions): New class; Support
9308         class for #pragma warning directive. It tests whether
9309         warning is enabled for a given line.
9310
9311 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
9312
9313         * const.cs: Add more descriptive error report, tahnks to
9314         Sebastien. 
9315
9316 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
9317
9318         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
9319
9320 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
9321
9322         * expression.cs: Apply patch from Ben: Remove dead code from
9323         ArrayCreation, and remove the TurnintoConstant call in const.cs,
9324         as that code just threw an exception anwyays.
9325
9326         * const.cs: Remove the call to the turnintoconstant, for details
9327         see bug: #63144
9328         
9329         * literal.cs: The type of the null-literal is the null type;  So
9330         we use a placeholder type (literal.cs:System.Null, defined here)
9331         for it.
9332
9333         * expression.cs (Conditional.DoResolve): Remove some old code that
9334         is no longer needed, conversions have been fixed.
9335
9336         (ArrayCreationExpression.DoResolve): Return false if we fail to
9337         resolve the inner expression.
9338
9339 2004-09-07  Raja R Harinath  <rharinath@novell.com>
9340
9341         Fix test-290.cs.
9342         * cs-parser.jay (delegate_declaration): Record a delegate
9343         declaration as a type declaration.
9344         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
9345
9346 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
9347
9348         * parameter.cs: Do not crash if the type can not be resolved. 
9349
9350         * expression.cs: Report errors with unsafe pointers, fixes #64896
9351
9352 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
9353
9354         * expression.cs: Pointer arith always needs to do a conv.i
9355         if the operand is a long. fix 65320
9356
9357 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9358
9359         Fixed cs0619-37.cs, cs0619-38.cs
9360
9361         * enum.cs (GetObsoleteAttribute): Removed.
9362
9363         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
9364         on Enum member is double staged. The first is tested member
9365         and then enum.
9366
9367 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9368
9369         Fixed #56986, #63631, #65231
9370
9371         * class.cs: (TypeContainer.AddToMemberContainer): New method,
9372         adds member to name container.
9373         (TypeContainer.AddToTypeContainer): New method, adds type to
9374         name container.
9375         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
9376         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
9377         AddOperator): Simplified by reusing AddToMemberContainer.
9378         (TypeContainer.UserDefinedStaticConstructor): Changed to property
9379         instead of field.
9380         (Method.CheckForDuplications): Fixed implementation to test all
9381         possibilities.
9382         (MemberBase): Detection whether member is explicit interface
9383         implementation is now in constructor.
9384         (MemberBase.UpdateMemberName): Handles IndexerName.
9385         (Accessor): Changed to keep also location information.
9386         (AbstractPropertyEventMethod): Is derived from MemberCore.
9387         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
9388         will be emited or not.
9389         (PropertyBase.AreAccessorsDuplicateImplementation):
9390         Tests whether accessors are not in collision with some method.
9391         (Operator): Is derived from MethodCore to simplify common
9392         operations.
9393
9394         * decl.cs (Flags.TestMethodDuplication): Test for duplication
9395         must be performed.
9396         (DeclSpace.AddToContainer): Adds the member to defined_names
9397         table. It tests for duplications and enclosing name conflicts.
9398
9399         * enum.cs (EnumMember): Clean up to reuse the base structures
9400
9401 2004-09-03  Martin Baulig  <martin@ximian.com>
9402
9403         Merged latest changes into gmcs.  Please keep this comment in
9404         here, it makes it easier for me to see what changed in MCS since
9405         the last time I merged.
9406
9407 2004-09-03  Martin Baulig  <martin@ximian.com>
9408
9409         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9410         into TypeContainer, to make partial classes work again.
9411
9412 2004-09-03  Martin Baulig  <martin@ximian.com>
9413
9414         * rootcontext.cs (RootContext.V2): Removed.
9415
9416 2004-03-23  Martin Baulig  <martin@ximian.com>
9417
9418         * expression.cs (Invocation.OverloadResolve): Added `bool
9419         may_fail' argument and use it instead of the Location.IsNull() hack.
9420
9421 2004-09-09  Martin Baulig  <martin@ximian.com>
9422
9423         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
9424
9425 2004-09-09  Martin Baulig  <martin@ximian.com>
9426
9427         * generic.cs (TypeParameter.DefineType): Added support for
9428         explicit interface methods.
9429
9430 2004-09-09  Martin Baulig  <martin@ximian.com>
9431
9432         * README.Changes: New document.  Started to list important changes
9433         between MCS and GMCS here.
9434
9435 2004-09-08  Martin Baulig  <martin@ximian.com>
9436
9437         * class.cs
9438         (TypeContainer.CheckRecursiveDefinition): New protected method.
9439         (TypeContainer.DefineType): Move the CS0146 check into
9440         CheckRecursiveDefinition().     
9441
9442 2004-09-06  Martin Baulig  <martin@ximian.com>
9443
9444         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9445         types for the constructor constraint.
9446
9447 2004-09-03  Martin Baulig  <martin@ximian.com>
9448
9449         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9450         into TypeContainer, to make partial classes work again.
9451
9452 2004-09-03  Martin Baulig  <martin@ximian.com>
9453
9454         * rootcontext.cs (RootContext.V2): Removed.
9455
9456 2004-03-23  Martin Baulig  <martin@ximian.com>
9457
9458         * expression.cs (Invocation.OverloadResolve): Added `bool
9459         may_fail' argument and use it instead of the Location.IsNull() hack.
9460
9461 2004-09-03  Martin Baulig  <martin@ximian.com>
9462
9463         Merged latest changes into gmcs.  Please keep this comment in
9464         here, it makes it easier for me to see what changed in MCS since
9465         the last time I merged.
9466
9467 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9468
9469         Fix #61128.
9470         * expression.cs (BetterConversion): Don't allow either conversion 
9471         to be null.  Remove redundant implicit conversion test when 'q ==
9472         null' -- when this function is invoked, we already know that the
9473         implicit conversion exists.
9474         (BetterFunction): Assume that 'best' is non-null.  Remove
9475         redundant reimplementation of IsApplicable when 'best' is null.
9476         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9477         number of arguments.
9478         (IsAncestralType): Extract from OverloadResolve.
9479         (OverloadResolve): Make robust to the MethodGroupExpr being
9480         unsorted.  Implement all the logic of Section 14.5.5.1, and
9481         support overloading of methods from multiple applicable types.
9482         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9483
9484         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9485         (RealError, Warning): Append type of report to related symbol.
9486
9487 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9488
9489         * enum.cs: Fixed CLS-Compliance checks for enum members.
9490         Error tests cs3008-8.cs, cs3014-8.cs
9491
9492 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9493
9494         Fixed bug #62342, #63102
9495         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9496         like ImplementMethod.
9497
9498 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9499
9500         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9501         Fixed bug #65170.
9502
9503 2004-09-02  Martin Baulig  <martin@ximian.com>
9504
9505         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9506         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9507         on the MethodBase.
9508
9509 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9510
9511         C# 2.0 Static classes implemented
9512
9513         * class.cs (TypeContainer): instance_constructors,
9514         initialized_fields, initialized_static_fields,
9515         default_constructor, base_inteface_types are protected to be
9516         accessible from StaticClass.
9517         (TypeContainer.DefineDefaultConstructor): New virtual method
9518         for custom default constructor generating
9519         (StaticClass): New class to handle "Static classes" feature.
9520
9521         * cs-parser.jay: Handle static keyword on class like instance
9522         of StaticClass.
9523
9524         * driver.cs: Added "/langversion" command line switch with two
9525         options (iso-1, default).
9526
9527 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9528
9529         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9530
9531 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9532
9533         * delegate.cs: Style.
9534
9535 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9536
9537         * delegate.cs: Add seperate instance expr field for miguel.
9538
9539 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9540
9541         * PointerArithmetic (Resolve): make sure we are not doing
9542         pointer arith on void*. Also, make sure we are resolved
9543         by not setting eclass until resolve.
9544
9545         All callers: Make sure that PointerArithmetic gets resolved.
9546
9547 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9548
9549         * ArrayCreation (LookupType): If the type does not resolve 
9550         to an array, give an error.
9551
9552 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9553
9554         * statement.cs (Try.Resolve): Fixed bug #64222
9555
9556 2004-08-27  Martin Baulig  <martin@ximian.com>
9557
9558         * class.cs
9559         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9560         crash here.     
9561
9562 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9563
9564         * ecore.cs (Constantify): Get underlying type via
9565         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9566         Windows in special cases.
9567
9568 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9569
9570         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9571         for obtaining also private methods.
9572         (GetRemoveMethod): Used GetRemoveMethod (true)
9573         for obtaining also private methods.
9574
9575 2004-09-02  Martin Baulig  <martin@ximian.com>
9576
9577         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9578         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9579         on the MethodBase.
9580
9581 2004-08-27  Martin Baulig  <martin@ximian.com>
9582
9583         * class.cs
9584         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9585         crash here.     
9586
9587 2004-08-25  Martin Baulig  <martin@ximian.com>
9588
9589         * support.cs (ReflectionParameters..ctor): If this is a generic
9590         method, retrieve and store its type parameters.
9591         (InternalParameters..ctor): Added `TypeParameter[]' argument.
9592         (ReflectionParameters.GenericConstraints): The argument specifies
9593         the type parameter, not the method parameter.
9594         (InternalParameters.GenericConstraints): Likewise.
9595
9596         * generic.cs (TypeParameter.DefineType): Correctly handle
9597         constraints wrt. generic methods in interfaces and their
9598         implementations.        
9599
9600 2004-08-24  Martin Baulig  <martin@ximian.com>
9601
9602         * generic.cs (TypeParameter.IsSubclassOf): New public method.
9603         (Constraints.IsSubclassOf): New internal method.
9604
9605         * typemanager.cs (TypeManager.FindMembers): Added special support
9606         for GenericTypeParameterBuilder's.      
9607         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
9608         type parameters.
9609
9610 2004-08-24  Martin Baulig  <martin@ximian.com>
9611
9612         * typemanager.cs
9613         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
9614         this for accessibility checks.
9615         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
9616         IsNestedFamilyAccessible.
9617         (TypeManager.IsSubclassOf): New method, do what the name actually
9618         says.   
9619
9620 2004-08-24  Martin Baulig  <martin@ximian.com>
9621
9622         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
9623         as a SimpleName, include the generic arity.
9624
9625 2004-08-24  Martin Baulig  <martin@ximian.com>
9626
9627         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
9628         MethodAttributes.HideBySig for operators.
9629
9630 2004-08-23  Martin Baulig  <martin@ximian.com>
9631
9632         Back to the old error reporting system :-)
9633
9634         * report.cs (Message): Removed.
9635         (Report.MessageData, ErrorData, WarningData): Removed.
9636         (Report.Error, Warning): Back to the old system.
9637
9638 2004-08-23  Martin Baulig  <martin@ximian.com>
9639
9640         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
9641
9642         * class.cs (TypeContainer.ParentContainer): New public virtual
9643         method; replaces the explicit interface implementation.
9644         (ClassPart.ParentContainer): Override.
9645
9646 2004-08-23  Martin Baulig  <martin@ximian.com>
9647
9648         * statement.cs (Switch): Added support for constant switches; see
9649         #59428 or test-285.cs.
9650
9651 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9652
9653         Fixed bug #62740.
9654         * statement.cs (GetEnumeratorFilter): Removed useless
9655         logic because C# specs is strict. GetEnumerator must be
9656         public.
9657
9658 2004-08-22  Martin Baulig  <martin@ximian.com>
9659
9660         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9661         a switch and may break, reset the barrier.  Fixes #59867.
9662
9663 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9664
9665         CLS-Compliance speed up (~5% for corlib)
9666
9667         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
9668         New method. Tests container for CLS-Compliant names
9669
9670         * class.cs (TypeContainer.VerifyClsName): New method.
9671         Checks whether container name is CLS Compliant.
9672         (Constructor): Implements IMethodData.
9673
9674         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
9675         low-case table for CLS Compliance test.
9676         (MemberCache.VerifyClsParameterConflict): New method.
9677         Checks method parameters for CS3006 error.
9678
9679         * enum.cs (EnumMember): Is derived from MemberCore.
9680         (Enum.VerifyClsName): Optimized for better performance.
9681
9682 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9683
9684         * report.cs: Renamed Error_T to Error and changed all
9685         references.
9686
9687 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9688
9689         * class.cs (TypeContainer.IndexerArrayList): New inner class
9690         container for indexers.
9691         (TypeContainer.DefaultIndexerName): New constant for default
9692         indexer name. Replaced all "Item" with this constant.
9693         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
9694
9695         * typemanager.cs (TypeManager.default_member_ctor): Cache here
9696         DefaultMemberAttribute constructor.
9697
9698 2004-08-05  Martin Baulig  <martin@ximian.com>
9699
9700         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
9701         Fix bug #59429.
9702
9703 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
9704
9705         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
9706         multi platforms problem.
9707
9708         * compiler.csproj: Included shared files.
9709
9710 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9711
9712         Fix bug 60333, 55971 in the more general way
9713         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9714         Added arg_type argument for constant conversion.
9715         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
9716
9717 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9718
9719         Fix bug #59760
9720         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
9721         OperatorArrayList, MethodCoreArrayList for typecontainer
9722         containers. Changed class member types to these new types.
9723         (MethodArrayList.DefineMembers): Added test for CS0659.
9724
9725 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
9726
9727         * cfold.cs: Synchronize the folding with the code in expression.cs
9728         Binary.DoNumericPromotions for uint operands.
9729
9730         * attribute.cs: Revert patch from Raja, it introduced a regression
9731         while building Blam-1.2.1 (hard to isolate a test case).
9732
9733 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9734
9735         Fix for #55382
9736         * class.cs:
9737         (TypeContainer.Define): Renamed to DefineContainerMembers because of
9738         name collision.
9739         (MethodCore.parent_method): New member. The method we're overriding
9740         if this is an override method.
9741         (MethodCore.CheckBase): Moved from Method class and made common.
9742         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
9743         private.
9744         (MethodCore.CheckForDuplications): New abstract method. For custom
9745         member duplication search in a container
9746         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
9747         method and its return type.
9748         (Event.conflict_symbol): New member. Symbol with same name in the
9749         parent class.
9750
9751         * decl.cs:
9752         (MemberCache.FindMemberWithSameName): New method. The method
9753         is looking for conflict with inherited symbols.
9754
9755 2004-08-04  Martin Baulig  <martin@ximian.com>
9756
9757         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9758
9759         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9760
9761 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9762
9763         * report.cs (Message): New enum for better error, warning reference in
9764         the code.
9765         (MessageData): New inner abstract class. It generally handles printing of
9766         error and warning messages.
9767         Removed unused Error, Warning, Message methods.
9768
9769 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9770
9771         Fix for cs0592-8.cs test
9772         * attribute.cs
9773         (Attributable.ValidAttributeTargets): Made public.
9774         (Attribute.ExplicitTarget): New member for explicit target value.
9775         (Attribute.CheckTargets): Now we translate explicit attribute
9776         target to Target here.
9777
9778 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
9779
9780         * ecore.cs (MethodGroupExpr): new IsBase property.
9781
9782         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
9783
9784         * delegate.cs (DelegateCreation): store a MethodGroupExpr
9785         rather than an instance expr.
9786
9787         (DelegateCreation.Emit): Use the method group rather than
9788         the instance expression. Also, if you have base.Foo as the
9789         method for a delegate, make sure to emit ldftn, not ldftnvirt.
9790
9791         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
9792
9793         (NewDelegate.DoResolve): Only check for the existance of Invoke
9794         if the method is going to be needed. Use MethodGroupExpr.
9795
9796         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
9797
9798         * expression.cs: For pointer arith., make sure to use
9799         the size of the type, not the size of the pointer to
9800         the type.
9801
9802 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9803
9804         Fix for #60722
9805         * class.cs (Class): Added error CS0502 test.
9806
9807 2004-08-03  John Luke  <jluke@cfl.rr.com>
9808             Raja R Harinath  <rharinath@novell.com>
9809
9810         Fix for #60997.
9811         * attribute.cs (Attribute.complained_before): New flag.
9812         (Attribute.ResolveType, Attribute.Resolve),
9813         (Attribute.DefinePInvokeMethod): Set it.
9814         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
9815         
9816 2004-08-03  Martin Baulig  <martin@ximian.com>
9817
9818         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9819         use a user-defined operator; we still need to do numeric
9820         promotions in case one argument is a builtin type and the other
9821         one has an implicit conversion to that type.  Fixes #62322.
9822
9823 2004-08-18  Martin Baulig  <martin@ximian.com>
9824
9825         * class.cs (Method.Define): Use the correct method name when
9826         creating the MethodBuilder for a generic method.
9827
9828 2004-08-17  Martin Baulig  <martin@ximian.com>
9829
9830         * generic.cs (Constraints): Support type parameter constraints.
9831
9832 2004-08-16  Martin Baulig  <martin@ximian.com>
9833
9834         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
9835         (Token.GENERIC_DIMENSION): New token; this is returned if we
9836         encounter an unbound generic type in a typeof() expression.
9837
9838         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
9839         this token is only generated while parsing a typeof() expression.
9840         (typeof_expression): Removed the old unbound_type hack.
9841
9842         * generic.cs (TypeArguments.IsUnbound): New public property.
9843
9844         * decl.cs (MemberName): Added support for unbound types.
9845
9846 2004-08-14  Martin Baulig  <martin@ximian.com>
9847
9848         * typemanager.cs
9849         (TypeManager.IsEqualGenericInstance): New static method.
9850         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
9851         just used to check accessibility, so follow the rules of 26.1.6.        
9852
9853         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
9854         ConstructedType instead of a TypeExpression if we have type arguments.
9855
9856         * cs-parser.jay (typeof_expression): Support unbound generic types.
9857
9858         * ecore.cs (UnboundTypeExpression): New public class.
9859
9860 2004-08-12  Martin Baulig  <martin@ximian.com>
9861
9862         * typemanager.cs (TypeManager.IsNestedChildOf): Use
9863         TypeManager.IsEqual() rather than `=='.
9864
9865         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
9866         generic instances as well.
9867
9868 2004-08-12  Martin Baulig  <martin@ximian.com>
9869
9870         * expression.cs (Invocation.InferType): We can only infer method
9871         type parameters.  Fixes #62647.
9872
9873 2004-08-11  Martin Baulig  <martin@ximian.com>
9874
9875         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
9876         before resolving the base classes.
9877
9878 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
9879
9880         * Makefile: install .mdb file too.
9881
9882 2004-08-05  Martin Baulig  <martin@ximian.com>
9883
9884         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
9885         initializer, the current type is just the TypeBuilder, not the
9886         instantiated generic type.
9887         (FieldExpr.IsFieldInitializer): New public property.
9888
9889 2004-08-04  Martin Baulig  <martin@ximian.com>
9890
9891         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9892
9893         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9894
9895 2004-08-03  Martin Baulig  <martin@ximian.com>
9896
9897         * class.cs (MethodData.Define): If we're an explicit
9898         implementation, remove the generic arity from the type name.
9899
9900 2004-08-03  Martin Baulig  <martin@ximian.com>
9901
9902         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9903         use a user-defined operator; we still need to do numeric
9904         promotions in case one argument is a builtin type and the other
9905         one has an implicit conversion to that type.  Fixes #62322.
9906
9907 2004-08-02  Martin Baulig  <martin@ximian.com>
9908
9909         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
9910         `TypeExpr[]' array.
9911         (TypeContainer.GetClassBases): Return the unexpanded list of
9912         interfaces; we expand them later.
9913         (TypeContainer.DefineType): After creating the TypeBuilder, call
9914         TypeManager.ExpandInterfaces() to get an expanded and resolved
9915         list of interfaces.
9916
9917         * ecore.cs (TypeExpr.GetInterfaces): Removed
9918
9919         * generics.cs (Constraints.InterfaceConstraints): Remove.
9920         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
9921         register the interface constraints.
9922
9923         * typemanager.cs
9924         (TypeManager.AddUserType): Removed the `ifaces' argument.
9925         (TypeManager.AddTypeParameter): Likewise.
9926         (TypeManager.AddUserInterface): Removed, was unused.
9927         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
9928         `TypeExpr[]' array for the interfaces.
9929         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
9930         has been defined, returns a list of the resolved interfaces types.
9931         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
9932         (TypeManager.GetExplicitInterfaces): Likewise.  
9933
9934 2004-08-02  Martin Baulig  <martin@ximian.com>
9935
9936         * expression.cs (Invocation.EmitCall): If we're invoking a method
9937         on a type parameter, use the new `Constrained' prefix opcode.
9938
9939 2004-08-02  Martin Baulig  <martin@ximian.com>
9940
9941         * statement.cs (LocalInfo.Flags): Added `IsThis'.
9942         (LocalInfo.IsThis): New public property.
9943         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
9944
9945 2004-08-01  Martin Baulig  <martin@ximian.com>
9946
9947         * class.cs (TypeContainer.GetClassBases): Don't set the default
9948         here since we may get called from GetPartialBases().
9949         (TypeContainer.DefineType): If GetClassBases() didn't return a
9950         parent, use the default one.
9951
9952 2004-07-30  Martin Baulig  <martin@ximian.com>
9953
9954         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
9955
9956         * class.cs (SourceMethod): New public class, derive from the
9957         symbol writer's ISourceMethod.
9958         (Method): Use the new symbol writer API.
9959
9960         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
9961         as argument and use the new symbol writer.
9962
9963         * location.cs
9964         (SourceFile): Implement the symbol writer's ISourceFile.
9965         (Location.SymbolDocument): Removed.
9966         (Location.SourceFile): New public property.
9967
9968         * symbolwriter.cs: Use the new symbol writer API.
9969
9970 2004-07-30  Raja R Harinath  <rharinath@novell.com>
9971
9972         * Makefile (install-local): Remove.  Functionality moved to
9973         executable.make.
9974
9975 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
9976
9977         * Makefile: Install mcs.exe.config file together with mcs.exe.
9978         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
9979         correct runtime version.
9980         
9981 2004-07-25  Martin Baulig  <martin@ximian.com>
9982
9983         * class.cs
9984         (TypeContainer.RegisterOrder): Removed, this was unused.
9985         (TypeContainer, interface_order): Removed.
9986         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
9987         TypeContainer as argument since we can also be called with a
9988         `PartialContainer' for a partial class/struct/interface.
9989         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
9990         of checking whether we're an `Interface' - we could be a
9991         `PartialContainer'.
9992         (PartialContainer.Register): Override; call
9993         AddClass()/AddStruct()/AddInterface() on our parent.
9994
9995         * cs-parser.jay (interface_member_declaration): Add things to the
9996         `current_container', not the `current_class'.
9997
9998         * rootcontext.cs (RegisterOrder): The overloaded version which
9999         takes an `Interface' was unused, removed.
10000
10001         * typemanager.cs (TypeManager.LookupInterface): Return a
10002         `TypeContainer', not an `Interface'.
10003         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
10004         contain a `PartialContainer' for an interface, so check it's
10005         `Kind' to figure out what it is.
10006
10007 2004-07-25  Martin Baulig  <martin@ximian.com>
10008
10009         * class.cs (Class.DefaultTypeAttributes): New public constant.
10010         (Struct.DefaultTypeAttributes): Likewise.
10011         (Interface.DefaultTypeAttributes): Likewise.
10012         (PartialContainer.TypeAttr): Override this and add the
10013         DefaultTypeAttributes.
10014
10015 2004-07-25  Martin Baulig  <martin@ximian.com>
10016
10017         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
10018         we can just use the `Parent' field instead.
10019
10020 2004-07-25  Martin Baulig  <martin@ximian.com>
10021
10022         * class.cs (TypeContainer.Emit): Renamed to EmitType().
10023
10024 2004-07-25  Martin Baulig  <martin@ximian.com>
10025
10026         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
10027         our parts before defining any methods.
10028         (TypeContainer.VerifyImplements): Make this virtual.
10029         (ClassPart.VerifyImplements): Override and call VerifyImplements()
10030         on our PartialContainer.
10031
10032 2004-07-25  Martin Baulig  <martin@ximian.com>
10033
10034         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
10035
10036         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
10037         argument, we can just use the `Parent' field instead.
10038
10039         * class.cs
10040         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
10041         (MemberBase.DoDefine): Likewise.
10042
10043 2004-07-24  Martin Baulig  <martin@ximian.com>
10044
10045         * decl.cs (MemberCore.Parent): New public field.
10046         (DeclSpace.Parent): Moved to MemberCore.
10047
10048         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
10049         (MemberBase.ctor): Added TypeContainer argument, pass it to our
10050         parent's .ctor.
10051         (FieldBase, Field, Operator): Likewise.
10052         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
10053         (EventField, Event): Likewise.
10054
10055 2004-07-23  Martin Baulig  <martin@ximian.com>
10056
10057         * class.cs (PartialContainer): New public class.
10058         (ClassPart): New public class.
10059         (TypeContainer): Added support for partial classes.
10060         (TypeContainer.GetClassBases): Splitted some of the functionality
10061         out into GetNormalBases() and GetPartialBases().
10062
10063         * cs-tokenizer.cs (Token.PARTIAL): New token.
10064         (Tokenizer.consume_identifier): Added some hacks to recognize
10065         `partial', but only if it's immediately followed by `class',
10066         `struct' or `interface'.
10067
10068         * cs-parser.jay: Added support for partial clases.
10069
10070 2004-07-23  Martin Baulig  <martin@ximian.com>
10071
10072         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
10073         a `DeclSpace' and also made it readonly.
10074         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
10075         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
10076         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
10077
10078         * cs-parser.jay: Pass the `current_class', not the
10079         `current_container' (at the moment, this is still the same thing)
10080         to a new Method, Property, Event, Indexer or Constructor.
10081
10082 2004-07-23  Martin Baulig  <martin@ximian.com>
10083
10084         * cs-parser.jay (CSharpParser): Added a new `current_class' field
10085         and removed the `current_interface' one.
10086         (struct_declaration, class_declaration, interface_declaration):
10087         Set `current_class' to the newly created class/struct/interface;
10088         set their `Bases' and call Register() before parsing their body.
10089
10090 2004-07-23  Martin Baulig  <martin@ximian.com>
10091
10092         * class.cs (Kind): New public enum.
10093         (TypeContainer): Made this class abstract.
10094         (TypeContainer.Kind): New public readonly field.
10095         (TypeContainer.CheckDef): New public method; moved here from
10096         cs-parser.jay.
10097         (TypeContainer.Register): New public abstract method.
10098         (TypeContainer.GetPendingImplementations): New public abstract
10099         method.
10100         (TypeContainer.GetClassBases): Removed the `is_class' and
10101         `is_iface' parameters.
10102         (TypeContainer.DefineNestedTypes): Formerly known as
10103         DoDefineType().
10104         (ClassOrStruct): Made this class abstract.
10105
10106         * tree.cs (RootTypes): New public type. 
10107
10108 2004-07-20  Martin Baulig  <martin@ximian.com>
10109
10110         * tree.cs (Tree.RecordNamespace): Removed.
10111         (Tree.Namespaces): Removed.
10112
10113         * rootcontext.cs (RootContext.IsNamespace): Removed.
10114
10115         * cs-parser.jay (namespace_declaration): Just create a new
10116         NamespaceEntry here.
10117
10118 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
10119
10120         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
10121         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
10122         entry to make sure it runs in the correct runtime version.
10123         
10124 2004-07-18  Martin Baulig  <martin@ximian.com>
10125
10126         * generic.cs (ConstructedType.CheckConstraints): Improved
10127         constraints checking.
10128
10129 2004-07-18  Martin Baulig  <martin@ximian.com>
10130
10131         * expression.cs (Invocation.BetterMethod): Call
10132         TypeManager.TypeToCoreType() on all types and removed my previous
10133         hack; we're already doig the right thing here.
10134
10135 2004-07-17  Martin Baulig  <martin@ximian.com>
10136
10137         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
10138
10139 2004-07-16  Martin Baulig  <martin@ximian.com>
10140
10141         * iterators.cs: Added generics support.
10142
10143 2004-07-16  Martin Baulig  <martin@ximian.com>
10144
10145         * iterators.cs: Rewrote this.  We're now using one single Proxy
10146         class for both the IEnumerable and the IEnumerator interface and
10147         `Iterator' derives from Class so we can use the high-level API.
10148
10149         * class.cs (TypeContainer.AddIterator): New method.
10150         (TypeContainer.DoDefineType): New protected virtual method, which
10151         is called from DefineType().
10152         (TypeContainer.DoDefineMembers): Call DefineType() and
10153         DefineMembers() on all our iterators.
10154         (TypeContainer.Emit): Call Emit() on all our iterators.
10155         (TypeContainer.CloseType): Call CloseType() on all our iterators.
10156
10157         * codegen.cs (EmitContext.CurrentIterator): New public field.
10158
10159 2004-07-15  Martin Baulig  <martin@ximian.com>
10160
10161         * typemanager.cs
10162         (TypeManager.not_supported_exception_type): New type.   
10163
10164 2004-07-14  Martin Baulig  <martin@ximian.com>
10165
10166         * typemanager.cs
10167         (TypeManager.generic_ienumerable_type): New type.
10168         (TypeManager.generic_ienumerator_type): New type.
10169
10170         * rootcontext.cs
10171         (RootContext.interfaces_first_stage): Added
10172         "System.Collections.Generic.IEnumerator`1" and
10173         "System.Collections.Generic.IEnumerable`1".     
10174
10175 2004-07-14  Martin Baulig  <martin@ximian.com>
10176
10177         * iterators.cs: Use real error numbers.
10178
10179 2004-07-14  Martin Baulig  <martin@ximian.com>
10180
10181         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
10182         requires this to be a System.Collection.IEnumerable and not a
10183         class implementing that interface.
10184         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
10185
10186 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
10187
10188         * class.cs: Fixed previous fix, it broke some error tests.
10189
10190 2004-07-12  Martin Baulig  <martin@ximian.com>
10191
10192         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
10193         Fixes #61293.
10194
10195 2004-07-14  Martin Baulig  <martin@ximian.com>
10196
10197         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
10198         an exclamation mark (!) for the generic arity to reflect the
10199         latest spec changes; ie. use "System.Collections.Generic.IList`1".
10200
10201 2004-07-13  Martin Baulig  <martin@ximian.com>
10202
10203         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
10204         specifiers being part of a type argument.
10205
10206 2004-07-13  Martin Baulig  <martin@ximian.com>
10207
10208         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
10209         name for generic types.
10210
10211 2004-07-13  Martin Baulig  <martin@ximian.com>
10212
10213         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
10214         bit to fix #60119.
10215
10216 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
10217
10218         * assign.cs (LocalTemporary): Add new argument: is_address,If
10219         `is_address' is true, then the value that we store is the address
10220         to the real value, and not the value itself.
10221         
10222         * ecore.cs (PropertyExpr): use the new local temporary
10223         stuff to allow us to handle X.Y += z (where X is a struct)
10224
10225 2004-07-08  Martin Baulig  <martin@ximian.com>
10226
10227         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
10228         not always return, just like we're doing in Using.Resolve().
10229
10230 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
10231
10232         * cs-parser.jay (fixed_statement): flag this as Pinned.
10233
10234 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
10235
10236         * typemanager.cs (TypeManager): Removed MakePinned method, this
10237         mechanism is replaced with the .NET 2.x compatible mechanism of
10238         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
10239
10240         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
10241         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
10242         `IsFixed' property which has a different meaning.
10243
10244 2004-07-02  Raja R Harinath  <rharinath@novell.com>
10245
10246         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
10247         visible from inside a nested class, not just the names of the
10248         immediately enclosing class.
10249         Fix for bug #60730.
10250
10251 2004-06-24  Raja R Harinath  <rharinath@novell.com>
10252
10253         * expression.cs (BetterConversion): Remove buggy special-case
10254         handling of "implicit constant expression conversions".  At this
10255         point, we already know that the conversion is possible -- we're
10256         only checking to see which is better.
10257
10258 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10259
10260         * cs-parser.jay: Added error CS0210 test.
10261
10262 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10263
10264         * cs-parser.jay: Added error CS0134 test.
10265
10266 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10267
10268         Fix bug #52507
10269         * cs-parser.jay: Added error CS0145 test.
10270
10271 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10272
10273         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
10274
10275 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
10276         
10277         * expression.cs (StackAlloc.Resolve): The argument may not
10278         be a constant; deal with this case.
10279         
10280 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
10281
10282         * attribute.cs (IndexerName_GetIndexerName): Renamed to
10283         GetIndexerAttributeValue.
10284         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
10285
10286         * class.cs (Indexer.Define): Added error tests for CS0415,
10287         CS0609.
10288
10289 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
10290
10291         * attribute.cs (Attribute.Resolve): Keep field code in sync with
10292         property code.
10293
10294 2004-06-23  Martin Baulig  <martin@ximian.com>
10295
10296         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
10297         neither return nor throw, reset the barrier as well.  Fixes #60457.
10298
10299 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
10300
10301         * class.cs : EventAttributes is now set to None by default.
10302           This fixes bug #60459.
10303
10304 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10305
10306         Fix bug #60219
10307         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10308         Don't throw exception but return null (it's sufficient now).
10309
10310 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10311
10312         * typemanager.cs (GetArgumentTypes): Faster implementation.
10313
10314 2004-06-18  Martin Baulig  <martin@ximian.com>
10315
10316         * attribute.cs (Attribute.Resolve): Check whether we're an
10317         EmptyCast which a Constant child.  Fixes #60333.
10318
10319 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
10320
10321         * statement.cs (EmitCollectionForeach): Account for the fact that
10322         not all valuetypes are in areas which we can take the address of.
10323         For these variables, we store to a temporary variable. Also, make
10324         sure that we dont emit a `callvirt' on a valuetype method.
10325
10326 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10327
10328         * expression.cs (StackAlloc.DoReSolve): Added test for
10329         negative parameter (CS0247).
10330
10331 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10332
10333         Fix bug #59792
10334         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
10335
10336 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10337
10338         Fix bug #59781
10339         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
10340         ulong.
10341
10342 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10343
10344         Fix bug #58254 & cs1555.cs, cs1556.cs
10345         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
10346
10347 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10348
10349         * cs-parser.jay: Added error CS1669 test for indexers.
10350
10351 2004-06-18  Martin Baulig  <martin@ximian.com>
10352
10353         * generics.cs (GenericMethod.ctor): Don't take an Attributes
10354         argument.  Fixes #60441.
10355
10356 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
10357         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
10358         The name needs to have the actual name of the method in order
10359         for other tests (such as the one in OverloadResolve for Invoke
10360         on a delegate) to work. As well, it does not really help
10361         error reporting because the method group had multiple methods.
10362         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
10363         Make profiling work.
10364         
10365 2004-06-13  Martin Baulig  <martin@ximian.com>
10366
10367         * cs-parser.jay: Don't allow generic attributes.
10368
10369 2004-06-13  Martin Baulig  <martin@ximian.com>
10370
10371         * class.cs (MemberBase.DoDefineBase): New protected method.
10372         (MemberBase.DoDefine): Compute the `flags' in the new
10373         DoDefineBase() which must be called first.
10374         (Method.Define): Call DoDefineBase() first so we have the flags
10375         when defining the generic method.
10376
10377         * cs-parser.jay (interface_method_declaration): Support generic methods.
10378
10379 2004-06-13  Martin Baulig  <martin@ximian.com>
10380
10381         * decl.cs (TypeName): Removed.
10382         (MemberName): Removed TypeName and MemberNow; now we just have
10383         MemberName.
10384
10385         * cs-parser.jay: Don't distinguish between type arguments and type
10386         parameters in the grammar and simplified the rules a bit.  The
10387         reduce/reduce conflicts are now gone (except the one we inherited
10388         from mcs).
10389
10390 2004-06-11  Martin Baulig  <martin@ximian.com>
10391
10392         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
10393         call this twice: for params and varargs methods.
10394
10395 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10396
10397         * class.cs:
10398         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
10399
10400 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10401
10402         * attribute.cs (Attribute.GetValidTargets): Made public.
10403
10404         * class.cs: 
10405         (AbstractPropertyEventMethod): New class for better code sharing.
10406         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
10407         CS1667 report.
10408         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
10409
10410 2004-06-09  Martin Baulig  <martin@ximian.com>
10411
10412         * cs-parser.jay: Removed a reduce/reduce conflict.
10413
10414 2004-06-03  Martin Baulig  <martin@ximian.com>
10415
10416         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
10417         GetSimpleName() and return a SimpleName.
10418
10419         * ecore.cs (SimpleName.Arguments): New public field.
10420         (SimpleName): Added overloaded ctor which takes an additional
10421         TypeArguments argument.
10422         (SimpleName.SimpleNameResolve): Added support for generic methods.
10423         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
10424         formerly in MemberAccess.DoResolve(), but we also need it in
10425         SimpleNameResolve().
10426
10427         * expression.cs (MemberAccess.DoResolve): Use the new
10428         MethodGroupExpr.ResolveGeneric().       
10429
10430 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10431
10432         * decl.cs: If possible, use lookuptypedirect here. We can only do
10433         this if there is no `.' after the namespace. Avoids using
10434         LookupType, which does lots of slow processing.
10435         (FindNestedType) New method, does what it says :-).
10436         * namespace.cs: use LookupTypeDirect.
10437         * rootcontext.cs: use membercache, if possible.
10438         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10439
10440 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10441
10442         * expression.cs:
10443         According to the spec, 
10444
10445         In a member access of the form E.I, if E is a single identifier,
10446         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10447         field, property, localvariable, or parameter with the same type as
10448         the meaning of E as a type-name (§3.8), then both possible
10449         meanings of E are permitted.
10450
10451         We did not check that E as a simple-name had the same type as E as
10452         a type name.
10453
10454         This trivial check gives us 5-7% on bootstrap time.
10455
10456 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10457
10458         * expression.cs (Invocation.OverloadResolve): Avoid the
10459         use of hashtables and boxing here by allocating on demand.
10460
10461 2004-05-30  Martin Baulig  <martin@ximian.com>
10462
10463         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10464         we're doing a silent lookup.  Don't try to lookup nested types in
10465         TypeManager.object_type (thanks to Ben Maurer).
10466
10467 2004-05-30  Martin Baulig  <martin@ximian.com>
10468
10469         Committing a patch from Ben Maurer.
10470
10471         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10472
10473 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10474
10475         * convert.cs: add a trivial cache for overload operator resolution.
10476
10477 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10478
10479         * attribute.cs
10480         (AttributeTester.GetObsoleteAttribute): Returns instance of
10481         ObsoleteAttribute when type is obsolete.
10482
10483         * class.cs
10484         (TypeContainer.VerifyObsoleteAttribute): Override.
10485         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10486         (MethodCode.VerifyObsoleteAttribute): Override.
10487         (MemberBase.VerifyObsoleteAttribute): Override.
10488
10489         * decl.cs
10490         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10491         and report proper error.
10492
10493         *delegate.cs
10494         (Delegate.VerifyObsoleteAttribute): Override.
10495
10496         * ecore.cs
10497         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10498         and report proper error.
10499         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10500
10501         * enum.cs
10502         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10503         and enum member.
10504
10505         * expression.cs
10506         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10507         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10508         Added test for ObsoleteAttribute.
10509
10510         * statement.cs
10511         (Catch): Derived from Statement.
10512
10513 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10514
10515         * decl.cs: If possible, use lookuptypedirect here. We can only do
10516         this if there is no `.' after the namespace. Avoids using
10517         LookupType, which does lots of slow processing.
10518         (FindNestedType) New method, does what it says :-).
10519         * namespace.cs: use LookupTypeDirect.
10520         * rootcontext.cs: use membercache, if possible.
10521         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10522
10523 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10524
10525         * expression.cs:
10526         According to the spec, 
10527
10528         In a member access of the form E.I, if E is a single identifier,
10529         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10530         field, property, localvariable, or parameter with the same type as
10531         the meaning of E as a type-name (§3.8), then both possible
10532         meanings of E are permitted.
10533
10534         We did not check that E as a simple-name had the same type as E as
10535         a type name.
10536
10537         This trivial check gives us 5-7% on bootstrap time.
10538
10539 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10540
10541         Fixed bug #59071 & cs0160.cs
10542         * statement.cs (Try.Resolve): Check here whether order of catch
10543         clauses matches their dependencies.
10544
10545 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10546
10547         Fixed bug #58624
10548         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10549         unsafe type.
10550
10551 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10552
10553         * expression.cs (Invocation.OverloadResolve): Avoid the
10554         use of hashtables and boxing here by allocating on demand.
10555
10556 2004-05-30  Martin Baulig  <martin@ximian.com>
10557
10558         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10559         we're doing a silent lookup.  Don't try to lookup nested types in
10560         TypeManager.object_type (thanks to Ben Maurer).
10561
10562 2004-05-30  Martin Baulig  <martin@ximian.com>
10563
10564         Committing a patch from Ben Maurer.
10565
10566         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10567
10568 2004-05-29  Martin Baulig  <martin@ximian.com>
10569
10570         * class.cs (IMethodData.ShouldIgnore): New method.
10571
10572         * typemanager.cs (TypeManager.MethodFlags): Don't take a
10573         `Location' argument, we don't need it anywhere.  Use
10574         `IMethodData.ShouldIgnore ()' instead of
10575         `MethodData.GetMethodFlags ()'.
10576         (TypeManager.AddMethod): Removed.
10577         (TypeManager.AddMethod2): Renamed to AddMethod.
10578
10579 2004-05-29  Martin Baulig  <martin@ximian.com>
10580
10581         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
10582
10583         * convert.cs (Convert.ImplicitReferenceConversion): If we're
10584         converting from a class type S to an interface type and we already
10585         have an object on the stack, don't box it again.  Fixes #52578.
10586
10587 2004-05-29  Martin Baulig  <martin@ximian.com>
10588
10589         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10590         Added support for `params' parameters.  Fixes #59267.
10591
10592 2004-05-29  Martin Baulig  <martin@ximian.com>
10593
10594         * literal.cs (NullPointer): Provide a private .ctor which sets
10595         `type' to TypeManager.object_type.  Fixes #59048.
10596
10597 2004-05-29  Martin Baulig  <martin@ximian.com>
10598
10599         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
10600         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
10601
10602         * ecore.cs (EventExpr.instance_expr): Make the field private.
10603
10604 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
10605
10606         Fixed bug #50080 & cs0214-2.cs
10607         * expression.cs (Cast.DoResolve): Check unsafe context here.
10608         
10609         * statement.cs (Resolve.DoResolve): Likewise.
10610
10611 2004-05-26  Martin Baulig  <martin@ximian.com>
10612
10613         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
10614
10615         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
10616         (RootContext.LookupType): Pass down the `silent' flag.
10617
10618 2004-05-25  Martin Baulig  <martin@ximian.com>
10619
10620         * expression.cs
10621         (MethodGroupExpr.IdenticalTypeName): New public property.
10622         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
10623         expression actually refers to a type.
10624
10625 2004-05-25  Martin Baulig  <martin@ximian.com>
10626
10627         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
10628         for #56176 and made it actually work.
10629
10630 2004-05-25  Martin Baulig  <martin@ximian.com>
10631
10632         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
10633         (FieldExpr, PropertyExpr): Override and implement
10634         CacheTemporaries.  Fixes #52279.
10635
10636 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
10637
10638         * location.cs: In the new compiler listing a file twice is a
10639         warning, not an error.
10640
10641 2004-05-24  Martin Baulig  <martin@ximian.com>
10642
10643         * enum.cs (Enum.DefineType): For the `BaseType' to be a
10644         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
10645
10646 2004-05-24  Martin Baulig  <martin@ximian.com>
10647
10648         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
10649         walking the `using' list.  Fixes #53921.
10650
10651 2004-05-24  Martin Baulig  <martin@ximian.com>
10652
10653         * const.cs (Const.LookupConstantValue): Added support for
10654         EmptyCast's; fixes #55251.
10655
10656 2004-05-24  Martin Baulig  <martin@ximian.com>
10657
10658         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
10659         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
10660         which does the CS0135 check.  The reason is that we first need to
10661         check whether the variable actually exists.
10662
10663 2004-05-24  Martin Baulig  <martin@ximian.com>
10664
10665         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
10666         than RootContext.LookupType() to find the explicit interface
10667         type.  Fixes #58584.
10668
10669 2004-05-24  Raja R Harinath  <rharinath@novell.com>
10670
10671         * Makefile: Simplify.  Use executable.make.
10672         * mcs.exe.sources: New file.  List of sources of mcs.exe.
10673
10674 2004-05-24  Anders Carlsson  <andersca@gnome.org>
10675
10676         * decl.cs:
10677         * enum.cs:
10678         Use the invariant culture when doing String.Compare for CLS case
10679         sensitivity.
10680         
10681 2004-05-23  Martin Baulig  <martin@ximian.com>
10682
10683         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
10684         don't have any dots.  Fixes #52622, added cs0246-8.cs.
10685
10686         * namespace.cs (NamespaceEntry.Lookup): Likewise.
10687
10688 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10689
10690         * class.cs (MemberBase.Define): Reuse MemberType member for 
10691         resolved type. Other methods can use it too.
10692
10693 2004-05-23  Martin Baulig  <martin@ximian.com>
10694
10695         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
10696         the variable also exists in the current block (otherwise, we need
10697         to report a CS0103).  Fixes #58670.
10698
10699 2004-05-23  Martin Baulig  <martin@ximian.com>
10700
10701         * flowanalysis.cs (Reachability.Reachable): Compute this
10702         on-the-fly rather than storing it as a field.
10703
10704 2004-05-23  Martin Baulig  <martin@ximian.com>
10705
10706         * flowanalysis.cs (Reachability.And): Manually compute the
10707         resulting `barrier' from the reachability.      
10708        
10709 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10710
10711         Fix bug #57835
10712         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
10713         instance of ObsoleteAttribute when symbol is obsolete.
10714
10715         * class.cs
10716         (IMethodData): Extended interface for ObsoleteAttribute support.
10717
10718 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10719
10720         * attribute.cs: Fix bug #55970
10721
10722 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10723
10724         Fix bug #52705
10725         * attribute.cs
10726         (GetObsoleteAttribute): New method. Creates the instance of
10727         ObsoleteAttribute.
10728         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
10729         ObsoleteAttribute when member is obsolete.
10730         (AttributeTester.Report_ObsoleteMessage): Common method for
10731         Obsolete error/warning reporting.
10732
10733         * class.cs
10734         (TypeContainer.base_classs_type): New member for storing parent type.
10735
10736         * decl.cs
10737         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
10738         for this MemberCore.
10739
10740 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10741
10742         * attribute.cs, const.cs: Fix bug #58590
10743
10744 2004-05-21  Martin Baulig  <martin@ximian.com>
10745
10746         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
10747         out parameters if the end of the method is unreachable.  Fixes
10748         #58098. 
10749
10750 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10751
10752         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
10753         Hari was right, why extra method.
10754
10755 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10756
10757         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
10758
10759 2004-05-20  Martin Baulig  <martin@ximian.com>
10760
10761         * delegate.cs: Convert this file to Unix mode - like the original
10762         version in mcs is.
10763
10764 2004-05-20  Martin Baulig  <martin@ximian.com>
10765
10766         * attribute.cs: Convert this file to Unix mode - like the original
10767         version in mcs is.
10768
10769 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
10770
10771        Fix bug #58688 (MCS does not report error when the same attribute
10772        is assigned twice)
10773
10774        * attribute.cs (Attribute.Emit): Distinction between null and default.
10775
10776 2004-05-19  Raja R Harinath  <rharinath@novell.com>
10777
10778        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
10779        of a top-level attribute without an attribute target.
10780        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
10781        Make non-static.
10782        (Attribute.Conditional_GetConditionName), 
10783        (Attribute.Obsolete_GetObsoleteMessage): Update.
10784        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
10785        part of ScanForIndexerName.
10786        (Attribute.CanIgnoreInvalidAttribute): New function.
10787        (Attribute.ScanForIndexerName): Move to ...
10788        (Attributes.ScanForIndexerName): ... here.
10789        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
10790        (Attributes.Search): New internal variant that can choose not to
10791        complain if types aren't resolved.  The original signature now
10792        complains.
10793        (Attributes.GetClsCompliantAttribute): Use internal variant, with
10794        complaints suppressed.
10795        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
10796        only if it not useful.
10797        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
10798        top-level for attributes that are shared between the assembly
10799        and a top-level class.
10800        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
10801        * class.cs: Update to reflect changes.
10802        (DefineIndexers): Fuse loops.
10803        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
10804        a couple more variants of attribute names.
10805
10806 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
10807
10808         Fix bug #52585 (Implemented explicit attribute declaration)
10809
10810         * attribute.cs:
10811         (Attributable.ValidAttributeTargets): New abstract method. It gets
10812         list of valid attribute targets for explicit target declaration.
10813         (Attribute.Target): It holds target itself.
10814         (AttributeSection): Removed.
10815         (Attribute.CheckTargets): New method. It checks whether attribute
10816         target is valid for the current element.
10817
10818         * class.cs:
10819         (EventProperty): New class. For events that are declared like
10820         property (with add and remove accessors).
10821         (EventField): New class. For events that are declared like field.
10822         class.cs
10823
10824         * cs-parser.jay: Implemented explicit attribute target declaration.
10825
10826         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
10827         Override ValidAttributeTargets.
10828
10829         * parameter.cs:
10830         (ReturnParameter): Class for applying custom attributes on 
10831         the return type.
10832         (ParameterAtribute): New class. Class for applying custom
10833         attributes on the parameter type.
10834
10835 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
10836
10837         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
10838         definitions. 
10839
10840         (Method): Allow UNSAFE here.
10841
10842         * modifiers.cs: Support unsafe reporting.
10843
10844 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
10845
10846         * decl.cs: Fix bug #58478.
10847
10848 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10849
10850         * statement.cs: When checking for unreachable code on an EmptyStatement,
10851         set the location. Fixes bug #58488.
10852
10853 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
10854
10855         * driver.cs: Add -pkg handling.
10856
10857         From Gonzalo: UseShelLExecute=false
10858
10859 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
10860
10861         * attribute.cs:
10862         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
10863         for attribute.
10864         (Attribute.IsClsCompliaceRequired): Moved to base for better
10865         accesibility.
10866         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
10867         when attribute is AttributeUsageAttribute.
10868         (Attribute.GetValidTargets): Simplified.
10869         (Attribute.GetAttributeUsage): New method returns AttributeUsage
10870         attribute for this type.
10871         (Attribute.ApplyAttributes): Method renamed to Emit and make
10872         non-static.
10873         (GlobalAttributeSection): New class for special handling of global
10874         attributes (assembly, module).
10875         (AttributeSection.Emit): New method.
10876
10877         * class.cs: Implemented Attributable abstract methods.
10878         (MethodCore.LabelParameters): Moved to Parameter class.
10879         (Accessor): Is back simple class.
10880         (PropertyMethod): Implemented Attributable abstract class.
10881         (DelegateMethod): Implemented Attributable abstract class.
10882         (Event): New constructor for disctintion between normal Event
10883         and Event with accessors.
10884
10885         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
10886
10887         * codegen.cs, const.cs, decl.cs, delegate.cs:
10888         (CommonAssemblyModulClass): Implemented Attributable abstract class
10889         and simplified.
10890
10891         * enum.cs: Implement IAttributeSupport interface.
10892         (EnumMember): New class for emum members. Implemented Attributable
10893         abstract class
10894
10895         * parameter.cs:
10896         (ParameterBase): Is abstract.
10897         (ReturnParameter): New class for easier [return:] attribute handling.
10898
10899         * typemanager.cs: Removed builder_to_attr.
10900
10901 2004-05-11  Raja R Harinath  <rharinath@novell.com>
10902
10903         Fix bug #57151.
10904         * attribute.cs (Attribute.GetPositionalValue): New function.
10905         * class.cs (TypeContainer.VerifyMembers): New function.
10906         (TypeContainer.Emit): Use it.
10907         (ClassOrStruct): New base class for Class and Struct.
10908         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
10909         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
10910         class.
10911         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
10912         then each non-static field should have a FieldOffset attribute.
10913         Otherwise, none of the fields should have a FieldOffset attribute.
10914         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
10915         and FieldOffset attributes.
10916         * typemanager.cs (TypeManager.struct_layout_attribute_type)
10917         (TypeManager.field_offset_attribute_type): New core types.
10918         (TypeManager.InitCoreTypes): Initialize them.
10919
10920 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
10921
10922         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
10923         Return correct type.
10924         From bug #58270.
10925
10926 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
10927
10928         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
10929         be implicitly converted to ulong.
10930         
10931         * expression.cs: The logic for allowing operator &, | and ^ worked
10932         was wrong, it worked before because we did not report an error in
10933         an else branch.  Fixes 57895.
10934
10935         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
10936         allow volatile fields to be reference types.
10937
10938 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
10939
10940         * driver.cs: Add support for /debug-
10941
10942 2004-05-07  Raja R Harinath  <rharinath@novell.com>
10943
10944         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
10945         Add a 'complain' parameter to silence errors.
10946         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
10947         silently overlooked type-resolutions.
10948         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
10949         to reflect changes.
10950         (Attributes.Search): New function.
10951         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
10952         (Attributes.GetAttributeFullName): Remove hack.
10953         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
10954         Update to reflect changes.
10955         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10956         Use Attributes.Search instead of nested loops.
10957
10958 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
10959
10960         * decl.cs:
10961         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
10962         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
10963         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
10964
10965         * report.cs: (Report.Warning): Renamed to Warning_T because of
10966         parameter collision.
10967
10968 2004-05-05  Raja R Harinath  <rharinath@novell.com>
10969
10970         * expression.cs (MemberAccess.ResolveMemberAccess):
10971         Exit with non-zero status after Report.Error.
10972         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
10973         Likewise.
10974         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
10975
10976 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
10977
10978         * support.cs: Don't hang when the file is empty.
10979
10980 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
10981
10982         * support.cs: In SeekableStreamReader, compute the preamble size of the
10983           underlying stream. Position changes should take into account that initial
10984           count of bytes.
10985
10986 2004-05-03  Todd Berman  <tberman@sevenl.net>
10987
10988         * driver.cs: remove unused GetSysVersion function.
10989
10990 2004-05-03  Todd Berman  <tberman@sevenl.net>
10991
10992         * driver.cs: Remove the hack from saturday, as well as the hack
10993         from jackson (LoadAssemblyFromGac), also adds the CWD to the
10994         link_paths to get that bit proper.
10995
10996 2004-05-01  Todd Berman  <tberman@sevenl.net>
10997
10998         * driver.cs: Try a LoadFrom before a Load, this checks the current
10999         path. This is currently a bug in mono that is be fixed, however, this
11000         provides a workaround for now. This will be removed when the bug
11001         is fixed.
11002
11003 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
11004
11005         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11006         incomplete key pairs (#57941).
11007
11008 2004-05-01  Todd Berman  <tberman@sevenl.net>
11009
11010         * driver.cs: Remove '.' from path_chars, now System.* loads properly
11011         from the GAC
11012
11013 2004-04-30  Jackson Harper  <jackson@ximian.com>
11014
11015         * codegen.cs: Open keys readonly.
11016         
11017 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11018
11019         * typemanager.cs: don't report cyclic struct layout when a struct
11020         contains 2 or more fields of the same type. Failed for Pango.AttrShape
11021         which has 2 Pango.Rectangle fields.
11022
11023 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11024
11025         * expression.cs: Handle IntPtr comparisons with IL code
11026         rather than a method call.
11027
11028 2004-04-29  Martin Baulig  <martin@ximian.com>
11029
11030         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
11031         the list of PropertyInfo's in class hierarchy and find the
11032         accessor.  Fixes #56013.
11033
11034 2004-04-29  Martin Baulig  <martin@ximian.com>
11035
11036         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
11037
11038 2004-04-29  Martin Baulig  <martin@ximian.com>
11039
11040         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11041
11042         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
11043
11044 2004-04-29  Martin Baulig  <martin@ximian.com>
11045
11046         * class.cs (ConstructorInitializer.Resolve): Check whether the
11047         parent .ctor is accessible.  Fixes #52146.
11048
11049 2004-04-29  Martin Baulig  <martin@ximian.com>
11050
11051         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11052
11053         * statement.cs (Using.EmitLocalVariableDecls): Use
11054         TypeManager.idisposable_type, not typeof (IDisposable).
11055         (Foreach.EmitCollectionForeach): Added support for valuetypes.
11056
11057 2004-04-29  Martin Baulig  <martin@ximian.com>
11058
11059         * class.cs (Event.Define): Don't emit the field and don't set
11060         RTSpecialName and SpecialName for events on interfaces.  Fixes
11061         #57703. 
11062
11063 2004-04-29  Raja R Harinath  <rharinath@novell.com>
11064
11065         Refactor Attribute.ApplyAttributes.
11066         * attribute.cs (Attributable): New base class for objects that can
11067         have Attributes applied on them.
11068         (Attribute): Make AttributeUsage fields public.
11069         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
11070         (Attribute.IsInternalCall): New property.
11071         (Attribute.UsageAttr): Convert to a public read-only property.
11072         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
11073         (Attribute.ResolveType, Attribute.Resolve)
11074         (Attribute.ScanForIndexerName): Update to reflect changes.
11075         (Attribute.CheckAttributeTarget): Re-format.
11076         (Attribute.ApplyAttributes): Refactor, to various
11077         Attributable.ApplyAttributeBuilder methods.
11078         * decl.cs (MemberCore): Make Attributable.
11079         * class.cs (Accessor): Make Attributable.
11080         (MethodData.ApplyAttributes): Use proper attribute types, not
11081         attribute names.
11082         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
11083         (TypeContainer.ApplyAttributeBuilder)
11084         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
11085         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
11086         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
11087         (Operator.ApplyAttributeBuilder): New factored-out methods.
11088         * const.cs (Const.ApplyAttributeBuilder): Likewise.
11089         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
11090         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
11091         * parameter.cs (ParameterBase): New Attributable base class
11092         that can also represent Return types.
11093         (Parameter): Update to the changes.
11094
11095 2004-04-29  Jackson Harper  <jackson@ximian.com>
11096
11097         * driver.cs: Prefer the corlib system version when looking for
11098         assemblies in the GAC. This is still a hack, but its a better hack
11099         now.
11100         
11101 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
11102
11103         * decl.cs, enum.cs: Improved error 3005 reporting.
11104   
11105         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
11106         (related_symbols): New private member for list of symbols
11107         related to reported error/warning.
11108         
11109         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
11110
11111 2004-04-29  Martin Baulig  <martin@ximian.com>
11112
11113         * ecore.cs (Expression.Constantify): If we're an enum and
11114         TypeManager.TypeToCoreType() doesn't give us another type, use
11115         t.UnderlyingSystemType.  Fixes #56178.  
11116
11117 2004-04-29  Martin Baulig  <martin@ximian.com>
11118
11119         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
11120         interfaces and for each interface, only add members directly
11121         declared in that interface.  Fixes #53255.
11122
11123 2004-04-28  Martin Baulig  <martin@ximian.com>
11124
11125         * expression.cs (ConditionalLogicalOperator): Use a temporary
11126         variable for `left' to avoid that we evaluate it more than once;
11127         bug #52588.
11128
11129 2004-04-28  Martin Baulig  <martin@ximian.com>
11130
11131         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
11132         `void[]' (CS1547).
11133
11134 2004-04-28  Martin Baulig  <martin@ximian.com>
11135
11136         * statement.cs (LocalInfo.Resolve): Check whether the type is not
11137         void (CS1547).
11138
11139         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
11140         whether the type is not void (CS1547).
11141
11142 2004-04-28  Martin Baulig  <martin@ximian.com>
11143
11144         * expression.cs (Unary.DoResolveLValue): Override this and report
11145         CS0131 for anything but Operator.Indirection.
11146
11147 2004-04-28  Martin Baulig  <martin@ximian.com>
11148
11149         Committing a patch from Ben Maurer; see bug #50820.
11150
11151         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11152         check for classes.
11153
11154         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11155         classes.        
11156
11157 2004-04-28  Martin Baulig  <martin@ximian.com>
11158
11159         Committing a patch from Ben Maurer; see bug #50820.
11160
11161         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11162         check for classes.
11163
11164         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11165         classes.        
11166
11167 2004-04-28  Martin Baulig  <martin@ximian.com>
11168
11169         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
11170         (Block.AddLabel): Call DoLookupLabel() to only search in the
11171         current block.
11172
11173 2004-04-28  Martin Baulig  <martin@ximian.com>
11174
11175         * cfold.cs (ConstantFold.BinaryFold): Added special support for
11176         comparing StringConstants and NullLiterals in Equality and Inequality.
11177
11178 2004-04-28  Jackson Harper  <jackson@ximian.com>
11179
11180         * driver.cs: Attempt to load referenced assemblies from the
11181         GAC. This is the quick and dirty version of this method that
11182         doesnt take into account versions and just takes the first
11183         canidate found. Will be good enough for now as we will not have more
11184         then one version installed into the GAC until I update this method.
11185
11186 2004-04-28  Martin Baulig  <martin@ximian.com>
11187
11188         * typemanager.cs (TypeManager.CheckStructCycles): New public
11189         static method to check for cycles in the struct layout.
11190
11191         * rootcontext.cs (RootContext.PopulateTypes): Call
11192         TypeManager.CheckStructCycles() for each TypeContainer.
11193         [Note: We only need to visit each type once.]
11194
11195 2004-04-28  Martin Baulig  <martin@ximian.com>
11196
11197         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
11198
11199         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
11200         success and added `out object value'.  Use a `bool resolved' field
11201         to check whether we've already been called rather than
11202         `ConstantValue != null' since this breaks for NullLiterals.
11203
11204 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11205
11206         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
11207         setting of this flag, since the 'set' method may be non-public.
11208
11209 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11210
11211         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
11212         check on current_vector.Block.
11213
11214 2004-04-27  Martin Baulig  <martin@ximian.com>
11215
11216         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
11217         a field initializer.  Fixes #56459.
11218
11219 2004-04-27  Martin Baulig  <martin@ximian.com>
11220
11221         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
11222         we're not attempting to use an indexer.  Fixes #52154.
11223
11224 2004-04-27  Martin Baulig  <martin@ximian.com>
11225
11226         * statement.cs (Return): Don't create a return label if we don't
11227         need it; reverts my change from January 20th.  Thanks to Ben
11228         Maurer for this.
11229
11230 2004-04-27  Martin Baulig  <martin@ximian.com>
11231
11232         According to the spec, `goto' can only leave a nested scope, but
11233         never enter it.
11234
11235         * statement.cs (Block.LookupLabel): Only lookup in the current
11236         block, don't recurse into parent or child blocks.
11237         (Block.AddLabel): Check in parent and child blocks, report
11238         CS0140/CS0158 if we find a duplicate.
11239         (Block): Removed this indexer for label lookups.
11240         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
11241         this already does the error reporting for us.
11242
11243         * flowanalysis.cs
11244         (FlowBranching.UsageVector.Block): New public variable; may be null.
11245         (FlowBranching.CreateSibling): Added `Block' argument.
11246         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
11247         label for the target of a `goto' and check whether we're not
11248         leaving a `finally'.
11249
11250 2004-04-27  Martin Baulig  <martin@ximian.com>
11251
11252         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11253         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
11254         just for returns).
11255
11256 2004-04-27  Martin Baulig  <martin@ximian.com>
11257
11258         * statement.cs (Block.AddLabel): Also check for implicit blocks
11259         and added a CS0158 check.
11260
11261 2004-04-27  Martin Baulig  <martin@ximian.com>
11262
11263         * flowanalysis.cs (FlowBranchingLoop): New class.
11264         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
11265         UsageVector's instead of an ArrayList.
11266         (FlowBranching.Label): Likewise.
11267         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
11268         (FlowBranching.AddBreakVector): New method.
11269
11270 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
11271
11272         * attribute.cs: Small regression fix: only convert the type if we
11273         the type is different, fixes System.Drawing build.
11274
11275 2004-04-27  Martin Baulig  <martin@ximian.com>
11276
11277         * attribute.cs (Attribute.Resolve): If we have a constant value
11278         for a named field or property, implicity convert it to the correct
11279         type.
11280
11281 2004-04-27  Raja R Harinath  <rharinath@novell.com>
11282
11283         * statement.cs (Block.Block): Implicit blocks share
11284         'child_variable_names' fields with parent blocks.
11285         (Block.AddChildVariableNames): Remove.
11286         (Block.AddVariable): Mark variable as "used by a child block" in
11287         every surrounding block.
11288         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
11289         been used in a child block, complain about violation of "Invariant
11290         meaning in blocks" rule.
11291         * cs-parser.jay (declare_local_variables): Don't use
11292         AddChildVariableNames.
11293         (foreach_statement): Don't create an implicit block: 'foreach'
11294         introduces a scope.
11295
11296 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
11297
11298         * convert.cs (ImplicitNumericConversion): 0 is also positive when
11299         converting from 0L to ulong.  Fixes 57522.
11300
11301 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11302
11303         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
11304         derived class hides via 'new' keyword field from base class (test-242.cs).
11305         TODO: Handle this in the more general way.
11306         
11307         * class.cs (CheckBase): Ditto.
11308
11309 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11310
11311         * decl.cs (caching_flags): New member for storing cached values
11312         as bit flags.
11313         (MemberCore.Flags): New enum where bit flags for caching_flags
11314         are defined.
11315         (MemberCore.cls_compliance): Moved to caching_flags.
11316         (DeclSpace.Created): Moved to caching_flags.
11317
11318         * class.cs: Use caching_flags instead of DeclSpace.Created
11319         
11320 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
11321
11322         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
11323         if we are only a derived class, not a nested class.
11324
11325         * typemanager.cs: Same as above, but do this at the MemberLookup
11326         level (used by field and methods, properties are handled in
11327         PropertyExpr).   Allow for the qualified access if we are a nested
11328         method. 
11329
11330 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
11331
11332         * class.cs: Refactoring.
11333         (IMethodData): New inteface; Holds links to parent members
11334         to avoid member duplication (reduced memory allocation).
11335         (Method): Implemented IMethodData interface.
11336         (PropertyBase): New inner classes for get/set methods.
11337         (PropertyBase.PropertyMethod): Implemented IMethodData interface
11338         (Event): New inner classes for add/remove methods.
11339         (Event.DelegateMethod): Implemented IMethodData interface.
11340
11341         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
11342         EmitContext (related to class.cs refactoring).
11343
11344 2004-04-21  Raja R Harinath  <rharinath@novell.com>
11345
11346         * delegate.cs (Delegate.VerifyApplicability): If the number of
11347         arguments are the same as the number of parameters, first try to
11348         verify applicability ignoring  any 'params' modifier on the last
11349         parameter.
11350         Fixes #56442.
11351
11352 2004-04-08  Martin Baulig  <martin@ximian.com>
11353
11354         Merged latest changes into gmcs.  Please keep this comment in
11355         here, it makes it easier for me to see what changed in MCS since
11356         the last time I merged.
11357
11358 2004-04-16  Raja R Harinath  <rharinath@novell.com>
11359
11360         * class.cs (TypeContainer.AddIndexer): Use
11361         'ExplicitInterfaceName' to determine if interface name was
11362         explicitly specified.  'InterfaceType' is not initialized at this time.
11363         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
11364         Indexers array is already in the required order.  Initialize
11365         'IndexerName' only if there are normal indexers.
11366         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
11367         (TypeContainer.Emit): Emit DefaultMember attribute only if
11368         IndexerName is initialized.
11369         Fixes #56300.
11370
11371 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
11372
11373         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
11374         Fixes #57007
11375
11376 2004-04-15  Raja R Harinath  <rharinath@novell.com>
11377
11378         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
11379         attributes.
11380         Fix for #56456.
11381
11382         * attribute.cs (Attribute.Resolve): Check for duplicate named
11383         attributes.
11384         Fix for #56463.
11385
11386 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
11387
11388         * iterators.cs (MarkYield): track whether we are in an exception,
11389         and generate code accordingly.  Use a temporary value to store the
11390         result for our state.
11391
11392         I had ignored a bit the interaction of try/catch with iterators
11393         since their behavior was not entirely obvious, but now it is
11394         possible to verify that our behavior is the same as MS .NET 2.0
11395
11396         Fixes 54814
11397
11398 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
11399
11400         * iterators.cs: Avoid creating temporaries if there is no work to
11401         do. 
11402
11403         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
11404         Enumerations, use TypeManager.EnumToUnderlying and call
11405         recursively. 
11406
11407         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
11408         bug #57013
11409
11410         (This.Emit): Use EmitContext.EmitThis to emit our
11411         instance variable.
11412
11413         (This.EmitAssign): Ditto.
11414
11415         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
11416         codepaths, we will move all the functionality into
11417         Mono.CSharp.This 
11418
11419         (FieldExpr.EmitAssign): Ditto.
11420
11421         This fixes several hidden bugs that I uncovered while doing a code
11422         review of this today.
11423
11424         * codegen.cs (EmitThis): reworked so the semantics are more clear
11425         and also support value types "this" instances.
11426
11427         * iterators.cs: Changed so that for iterators in value types, we
11428         do not pass the value type as a parameter.  
11429
11430         Initialization of the enumerator helpers is now done in the caller
11431         instead of passing the parameters to the constructors and having
11432         the constructor set the fields.
11433
11434         The fields have now `assembly' visibility instead of private.
11435
11436 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
11437
11438         * expression.cs (Argument.Resolve): Check if fields passed as ref
11439         or out are contained in a MarshalByRefObject.
11440
11441         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
11442         another compiler type.
11443
11444 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11445
11446         * class.cs (Indexer.Define): use the new name checking method.
11447         Also, return false on an error.
11448         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11449         (is_identifier_[start/part]_character): make static.
11450
11451 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11452
11453         * expression.cs (Binary.ResolveOperator): Do no append strings
11454         twice: since we can be invoked more than once (array evaluation)
11455         on the same concatenation, take care of this here.  Based on a fix
11456         from Ben (bug #56454)
11457
11458 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11459
11460         * codegen.cs: Fix another case where CS1548 must be reported (when 
11461         delay-sign isn't specified and no private is available #56564). Fix
11462         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11463         error when MCS is used on the MS runtime and we need to delay-sign 
11464         (which seems unsupported by AssemblyBuilder - see #56621).
11465
11466 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11467
11468         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11469         (TypeManager.ComputeNamespaces): Faster implementation for
11470         Microsoft runtime.
11471
11472         * compiler.csproj: Updated AssemblyName to mcs.
11473
11474 2004-05-11  Jackson Harper  <jackson@ximian.com>
11475
11476         * Makefile: Preserve MONO_PATH
11477         
11478 2004-05-11  Jackson Harper  <jackson@ximian.com>
11479
11480         * Makefile: Use mono and mcs to build gmcs
11481         
11482 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11483
11484         * codegen.cs: Add patch from Robert Shade
11485         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11486         sync with mcs.
11487
11488 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11489
11490         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11491         incomplete key pairs (#57941).
11492
11493 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11494
11495         * codegen.cs: Fix another case where CS1548 must be reported (when 
11496         delay-sign isn't specified and no private is available #56564). Fix
11497         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11498         error when MCS is used on the MS runtime and we need to delay-sign 
11499         (which seems unsupported by AssemblyBuilder - see #56621).
11500
11501 2004-04-29  Jackson Harper  <jackson@ximian.com>
11502
11503         * Makefile: Set MONO_PATH to use the bootstrap corlib
11504         * driver.cs: Check the GAC for referenced assemblies.
11505                 
11506 2004-04-29  Martin Baulig  <martin@ximian.com>
11507
11508         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11509
11510 2004-04-07  Martin Baulig  <martin@ximian.com>
11511
11512         * expression.cs (Binary.ResolveOperator): Added special case for
11513         Equality/Inequality between a type parameter and a null literal.
11514
11515 2004-04-07  Martin Baulig  <martin@ximian.com>
11516
11517         * convert.cs: Check null literal -> type parameter conversions.
11518
11519 2004-04-07  Martin Baulig  <martin@ximian.com>
11520
11521         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11522         `class' and `struct' constraints.
11523
11524 2004-04-07  Martin Baulig  <martin@ximian.com>
11525
11526         * generic.cs (SpecialConstraint): New public enum.
11527         (Constraints.Resolve): Added support for the `class' and `struct'
11528         constraints.
11529
11530         * cs-parser.jay (type_parameter_constraint): Added support for the
11531         `class' and `struct' constraints.
11532
11533 2004-04-07  Martin Baulig  <martin@ximian.com>
11534
11535         * support.cs (GenericConstraints): Replaced `Types' by
11536         `ClassConstraint' and `InterfaceConstraints'; added
11537         `HasClassConstraint'.   
11538
11539 2004-04-07  Martin Baulig  <martin@ximian.com>
11540
11541         * generic.cs
11542         (Constraints.InterfaceConstraints): New public property.
11543         (Constraints.Types): Make this property public
11544         (TypeParameter): Implement IMemberContainer.
11545         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11546         instead of a TypeBuilder/MethodBuilder; pass the interface
11547         constraints to TypeManager.AddTypeParameter().
11548         (TypeParameter.DefineType): Just take an EmitContext and no
11549         TypeBuilder/MethodBuilder.  Use the new public API.
11550
11551         * typemanager.cs (TypeManager.AddTypeParameter): Added
11552         `TypeExpr[]' argument; add the interfaces to the
11553         `builder_to_ifaces' hash.
11554         (TypeManager.LookupMemberContainer): For
11555         GenericTypeParameterBuilders, get the TypeParameter from the
11556         `builder_to_type_param'.
11557         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11558         the TypeParameter and call FindMembers on it.
11559
11560 2004-04-07  Martin Baulig  <martin@ximian.com>
11561
11562         * class.cs
11563         (MethodCore.GenericMethod): Moved this field here from Method.
11564         (MethodCore.IsDuplicateImplementation): Take the number of type
11565         parameters into account if we're a generic method.
11566
11567         * expression.cs (Invocation.InferTypeArguments): Don't return true
11568         if `arguments' is null; we still need to check whether we actually
11569         don't need to infer anything in this case.
11570         (MemberAccess): Merged the functionality from GenericMemberAccess
11571         into this class.
11572
11573         * generic.cs (GenericMemberAccess): Removed.
11574
11575 2004-04-05  Martin Baulig  <martin@ximian.com>
11576
11577         * decl.cs (MemberCore): For generic classes, interfaces and
11578         structs, `Name' now includes the number of type parameters
11579         ("Stack!1.Node!1").
11580         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
11581         encode the number of type arguments in the type name.
11582
11583         * expression.cs (Expression.MemberLookup): Removed the
11584         `num_type_args' argument; we now encode the number of type
11585         arguments in the type name.
11586
11587         * ecore.cs (SimpleName): Encode the number of type arguments in
11588         the type name itself.
11589
11590         * generic.cs (ConstructedType): Likewise.
11591
11592         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
11593         `MemberName'; we now include the number of type parameters in the
11594         type name.
11595
11596         * typemanager.cs (TypeManager.CheckGeneric): Removed.
11597         (TypeManager.MemberLookup): Removed the
11598         `num_type_args' argument; we now encode the number of type
11599         arguments in the type name.     
11600
11601 2004-04-03  Martin Baulig  <martin@ximian.com>
11602
11603         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
11604         (MemberCore.MemberName): Moved here from MemberBase.
11605         (DeclSpace.SetParameterInfo): Just take the constraints as an
11606         ArrayList; we already have the type parameters in our
11607         `MemberName'; also do the CS0080 reporting here.
11608
11609         * cs-parser.jay (struct_declaration): Use `member_name' instead of
11610         `IDENTIFIER opt_type_parameter_list'; when constructing our
11611         `MemberName', it'll already include our type parameters.
11612         (class_declaration, interface_declaration): Likewise.
11613         (delegate_declaration): Likewise.
11614         (MakeName): Take a MemberName and return a MemberName.
11615         The following two changes are required to avoid shift/reduce conflicts:
11616         (member_name): Don't include a TypeName anymore; ie. this is now
11617         just 'IDENTIFIER opt_type_parameter_list'.
11618         (property_declaration, event_declaration): Use a
11619         `namespace_or_type_name' instead of a `member_name'.            
11620
11621 2004-04-03  Martin Baulig  <martin@ximian.com>
11622
11623         * decl.cs (MemberName): Renamed to `TypeName' and created a new
11624         `MemberName' class.
11625         (TypeName): Formerly known as MemberName.
11626
11627         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
11628         instead of a `MemberName'.
11629
11630         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
11631         (member_name): New rule; create a MemberName.
11632
11633 2004-04-02  Martin Baulig  <martin@ximian.com>
11634
11635         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
11636         (CS0305 and CS0308).
11637
11638 2004-04-02  Martin Baulig  <martin@ximian.com>
11639
11640         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
11641         support for nested types.
11642
11643 2004-04-02  Martin Baulig  <martin@ximian.com>
11644
11645         * ecore.cs (IAlias): New public interface.
11646         (TypeExpr, TypeExpression): Implement IAlias.
11647         (TypeAliasExpression): New public class.
11648
11649         * namespace.cs (Namespace): Implement IAlias.
11650         (Namespace.Lookup): Return an IAlias instead on an object.
11651         (Namespace.DefineName): Take an IAlias instead of an object.
11652         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
11653         an object.
11654         (NamespaceEntry.UsingAlias): Take a Membername instead of an
11655         Expression.
11656         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
11657         object.
11658         (NamespaceEntry.Lookup): Likewise.
11659
11660         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
11661         instead of a Type.      
11662
11663         * decl.cs (DeclSpace): Implement IAlias.
11664         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
11665
11666         * generic.cs (ConstructedType): Improved error checking.
11667
11668 2004-04-02  Martin Baulig  <martin@ximian.com>
11669
11670         * convert.cs: Added type parameter conversions.
11671
11672         * ecore.cs
11673         (UnboxCast.Emit): Emit an `unbox.any' for type params.
11674         (ClassCast.Emit): If the source type is a type parameter, box it.
11675         If the target type is a type parameter, emit an `unbox.any'
11676         instead of a `classcast'.1      
11677
11678 2004-04-01  Martin Baulig  <martin@ximian.com>
11679
11680         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
11681
11682 2004-04-01  Martin Baulig  <martin@ximian.com>
11683
11684         * generic.cs (ConstructedType.CheckConstraints): Use
11685         Convert.ImplicitStandardConversionExists(); user-defined implicit
11686         conversions are not allowed according to the spec.
11687
11688 2004-03-30  Martin Baulig  <martin@ximian.com>
11689
11690         * expression.cs (New): Added support for type parameters.
11691
11692         * typemanager.cs
11693         (TypeManager.activator_type): New public static field.
11694         (TypeManager.activator_create_instance): Likewise.
11695
11696 2004-03-30  Martin Baulig  <martin@ximian.com>
11697
11698         * typemanager.cs (TypeManager.HasConstructorConstraint): New
11699         public method.
11700
11701 2004-03-30  Martin Baulig  <martin@ximian.com>
11702
11703         * generic.cs (ConstructedType.CheckConstraints): Actually follow
11704         the spec here: the argument type must be convertible to the
11705         constraints.
11706
11707 2004-03-30  Martin Baulig  <martin@ximian.com>
11708
11709         * generic.cs
11710         (TypeParameter.Define, TypeParameter.DefineMethod): Call
11711         TypeManager.AddTypeParameter().
11712         (ConstructedType.CheckConstraints): Re-enable this and actually
11713         check whether we have a constructor constraint.
11714
11715         * typemanager.cs
11716         (TypeManager.builder_to_type_param): New static field.
11717         (TypeManager.AddTypeParameter): New static method.
11718         (TypeManager.LookupTypeParameter): New public method.
11719
11720 2004-03-30  Martin Baulig  <martin@ximian.com>
11721
11722         * generic.cs (TypeParameter.DefineType): Return a boolean and use
11723         the new API to actually define the constructor constraint.
11724
11725         * typemanager.cs
11726         (TypeManager.new_constraint_attr_type): New static field.
11727         (TypeManager.InitCoreTypes): Initialize it.
11728
11729 2004-03-30  Martin Baulig  <martin@ximian.com>
11730
11731         * generic.cs (Constraints): Completed error checking, use correct
11732         error numbers.
11733
11734 2004-03-29  Martin Baulig  <martin@ximian.com>
11735
11736         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
11737
11738         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11739         public version which takes a `ParameterData pd' instead of an
11740         `ArrayList args'.
11741
11742 2004-03-29  Martin Baulig  <martin@ximian.com>
11743
11744         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
11745         not a MethodInfo.       
11746
11747 2004-03-29  Martin Baulig  <martin@ximian.com>
11748
11749         * expression.cs (Argument.ResolveMethodGroup): If we're a
11750         ConstructedType, call GetMemberAccess() on it.  
11751
11752 2004-03-29  Martin Baulig  <martin@ximian.com>
11753
11754         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
11755         (MethodCore.CheckGenericOverride): When overriding a generic
11756         method, check whether the constraints match.
11757
11758         * support.cs (GenericConstraints): New public interface.
11759         (ParameterData.GenericConstraints): New public method.
11760
11761         * parameter.cs (Parameter.Resolve): Check whether we're a generic
11762         method parameter and compute our constraints if appropriate.
11763         (Parameter.GenericConstraints): New public property.
11764
11765         * generic.cs (Constraints): Implement GenericConstraints.
11766
11767 2004-03-29  Martin Baulig  <martin@ximian.com>
11768
11769         * decl.cs (MemberCache.FindMemberToOverride): Use
11770         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
11771
11772 2004-03-29  Martin Baulig  <martin@ximian.com>
11773
11774         * generic.cs (GenericMethod.Define): Resolve our type parameters.
11775
11776 2004-03-29  Martin Baulig  <martin@ximian.com>
11777
11778         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
11779         not allowed on non-generic declarations").
11780
11781 2004-03-29  Martin Baulig  <martin@ximian.com>
11782
11783         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11784         public version of this method.
11785
11786         * class.cs (MethodCore.IsDuplicateImplementation): Use
11787         Invocation.InferTypeArguments() to check this.
11788
11789 2004-03-29  Martin Baulig  <martin@ximian.com>
11790
11791         * convert.cs: Use TypeManager.IsDelegateType() instead of
11792         comparing types correctly.
11793
11794 2004-03-29  Martin Baulig  <martin@ximian.com>
11795
11796         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
11797         types directly to make it work for generic instances.
11798
11799         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
11800
11801 2004-03-29  Martin Baulig  <martin@ximian.com>
11802
11803         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
11804         support for arrays.     
11805
11806 2004-03-24  Martin Baulig  <martin@ximian.com>
11807
11808         * decl.cs (DeclSpace.FindType): Also use
11809         TypeManager.CheckGeneric() for types from the using clauses.
11810
11811 2004-03-23  Martin Baulig  <martin@ximian.com>
11812
11813         * expression.cs (Invocation.OverloadResolve): Added `bool
11814         may_fail' argument and use it instead of the Location.IsNull() hack.
11815
11816 2004-03-23  Martin Baulig  <martin@ximian.com>
11817
11818         * expression.cs (Invocation.InferType): Use correct type inference
11819         rules here.     
11820
11821 2004-03-23  Martin Baulig  <martin@ximian.com>
11822
11823         * ecore.cs (MethodGroupExpr.Name): Use
11824         TypeManager.CSharpSignature() instead of just the name.
11825
11826         * expression.cs (Invocation.OverloadResolve): Provide better error
11827         reporting.
11828         (Invocation.DoResolve): OverloadResolve() never returns null
11829         without reporting an error, so removed the error -6 reporting here.
11830
11831 2004-03-23  Martin Baulig  <martin@ximian.com>
11832
11833         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
11834         generic methods.
11835
11836         * cs-parser.jay (delegate_declaration): Support generic delegates.
11837
11838         * delegate.cs: Support generic delegates.
11839
11840 2004-03-22  Martin Baulig  <martin@ximian.com>
11841
11842         * expression.cs (Invocation.InferParamsTypeArguments): New static
11843         method; does type inference for params arguments.
11844
11845 2004-03-21  Martin Baulig  <martin@ximian.com>
11846
11847         * typemanager.cs (TypeManager.IsGenericMethod): New public static
11848         method; checks whether a method is a generic method.    
11849
11850         * expression.cs (Invocation.InferTypeArguments): New static method;
11851         infer type arguments for generic method invocation.
11852
11853         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
11854         property; we set this to true if we're resolving a generic method
11855         invocation and the user specified type arguments, ie. we're not
11856         doing type inference.
11857
11858 2004-03-20  Martin Baulig  <martin@ximian.com>
11859
11860         * class.cs (MethodData.DeclaringType): New public property.
11861         (MethodData.Define): Set DeclaringType here.
11862         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
11863         instead of OperatorMethodBuilder.DeclaringType.
11864
11865 2004-03-20  Martin Baulig  <martin@ximian.com>
11866
11867         * cs-tokenizer.cs (xtoken): Return a special
11868         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
11869
11870         * cs-parser.jay (default_value_expression): Switch to the new
11871         syntax (14.5.13).
11872
11873 2004-03-19  Martin Baulig  <martin@ximian.com>
11874
11875         * decl.cs (MemberName): New class.  We use this to "construct"
11876         namespace_or_type_name's.
11877
11878         * generics.cs (TypeArguments.GetDeclarations): New public method;
11879         returns the type arguments as a string[] and reports a CS0081 if
11880         one of them is not an identifier.
11881
11882         * class.cs (MemberBase): The .ctor now takes the name as a
11883         MemberName instead of a string.
11884         (MemberBase.ExplicitInterfaceName): Changed type from string to
11885         Expression.
11886         (MemberBase.DoDefine): If we're an explicit implementation, the
11887         InterfaceType may be a generic instance.
11888
11889         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
11890         (namespace_name): Call MemberName.GetName () to transform the
11891         MemberName into a string and ensure we don't have any type
11892         arguments.
11893         (type_name): Call MemberName.GetTypeExpression() to transfrom the
11894         MemberName into an expression.
11895         (method_header): Use namespace_or_type_name instead of member_name.     
11896
11897 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
11898
11899         * rootcontext.cs: Add new types to the boot resolution.
11900
11901         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
11902         MulticastDelegate is not allowed.
11903
11904         * typemanager.cs: Add new types to lookup: System.TypedReference
11905         and ArgIterator.
11906
11907         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
11908         check for TypedReference or ArgIterator, they are not allowed. 
11909
11910         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
11911         makes us properly catch 1510 in some conditions (see bug 56016 for
11912         details). 
11913
11914 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
11915
11916         * CryptoConvert.cs: update from corlib version
11917         with endian fixes.
11918
11919 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
11920
11921         * class.cs (Indexer.Define): Check indexername declaration
11922
11923 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
11924
11925         * attribute.cs (IsClsCompliant): Fixed problem with handling
11926         all three states (compliant, not-compliant, undetected).
11927
11928 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
11929
11930         * attribute.cs (Attribute): Location is now public.
11931         (Resolve): Store resolved arguments (pos_values) in attribute class.
11932         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
11933         (GetClsCompliantAttributeValue): New method that gets
11934         CLSCompliantAttribute value.
11935         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
11936         if exists else null.
11937         (AttributeTester): New class for CLS-Compliant verification routines.
11938
11939         * class.cs (Emit): Add CLS-Compliant verification.
11940         (Method.GetSignatureForError): Implemented.
11941         (Constructor.GetSignatureForError): Implemented
11942         (Constructor.HasCompliantArgs): Returns if constructor has
11943         CLS-Compliant arguments.
11944         (Constructor.Emit): Override.
11945         (Construcor.IsIdentifierClsCompliant): New method; For constructors
11946         is needed to test only parameters.
11947         (FieldBase.GetSignatureForError): Implemented.
11948         (TypeContainer): New member for storing base interfaces.
11949         (TypeContainer.FindMembers): Search in base interfaces too.
11950
11951         * codegen.cs (GetClsComplianceAttribute): New method that gets
11952         assembly or module CLSCompliantAttribute value.
11953         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
11954         for assembly.
11955         (ModuleClass.Emit): Add error 3012 test.
11956
11957         * const.cs (Emit): Override and call base for CLS-Compliant tests.
11958
11959         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
11960         state for all decl types.
11961         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
11962         if CLS-Compliant tests are required.
11963         (IsClsCompliaceRequired): New method. Analyze whether code
11964         must be CLS-Compliant.
11965         (IsExposedFromAssembly): New method. Returns true when MemberCore
11966         is exposed from assembly.
11967         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
11968         value or gets cached value.
11969         (HasClsCompliantAttribute): New method. Returns true if MemberCore
11970         is explicitly marked with CLSCompliantAttribute.
11971         (IsIdentifierClsCompliant): New abstract method. This method is
11972         used to testing error 3005.
11973         (IsIdentifierAndParamClsCompliant): New method. Common helper method
11974         for identifier and parameters CLS-Compliant testing.
11975         (VerifyClsCompliance): New method. The main virtual method for
11976         CLS-Compliant verifications.
11977         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
11978         null. I don't know why is null (too many public members !).
11979         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
11980         and get value of first CLSCompliantAttribute that found.
11981
11982         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
11983         (VerifyClsCompliance): Override and add extra tests.
11984
11985         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
11986         clscheck- disable CLS-Compliant verification event if assembly is has
11987         CLSCompliantAttribute(true).
11988
11989         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
11990         ApllyAttribute is now called in emit section as in the other cases.
11991         Possible future Emit integration.
11992         (IsIdentifierClsCompliant): New override.
11993         (VerifyClsCompliance): New override.
11994         (GetEnumeratorName): Returns full enum name.
11995
11996         * parameter.cs (GetSignatureForError): Implemented.
11997
11998         * report.cs (WarningData): New struct for Warning message information.
11999         (LocationOfPreviousError): New method.
12000         (Warning): New method. Reports warning based on the warning table.
12001         (Error_T): New method. Reports error based on the error table.
12002
12003         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
12004         verifications are done here.
12005
12006         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
12007
12008         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
12009         CLSCompliantAttribute.
12010         (all_imported_types): New member holds all imported types from other
12011         assemblies.
12012         (LoadAllImportedTypes): New method fills static table with exported types
12013         from all referenced assemblies.
12014         (Modules): New property returns all assembly modules.
12015
12016 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
12017
12018         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
12019         throwing a parser error.
12020
12021         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
12022         which removes the hardcoded get_/set_ prefixes for properties, as
12023         IL allows for the properties to be named something else.  
12024
12025         Bug #56013
12026
12027         * expression.cs: Do not override operand before we know if it is
12028         non-null.  Fix 56207
12029
12030 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12031
12032         * typemanager.cs: support for pinned variables.
12033
12034 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12035
12036         * decl.cs, typemanager.cs: Avoid using an arraylist
12037         as a buffer if there is only one result set.
12038
12039 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12040
12041         * expression.cs: Make sure you cant call a static method
12042         with an instance expression, bug #56174.
12043
12044 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
12045
12046         * class.cs (IsDuplicateImplementation): Improve error reporting to
12047         flag 663 (method only differs in parameter modifier).
12048
12049         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
12050         in preprocessor directives.
12051
12052         * location.cs (LookupFile): Allow for the empty path.
12053
12054         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
12055         better approach for some of that patch, but its failing with the
12056         CharSet enumeration.  For now try/catch will do.
12057
12058         * typemanager.cs: Do not crash if a struct does not have fields.
12059         Fixes 56150.
12060
12061 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12062
12063         * expression.cs: cs0213, cant fix a fixed expression.
12064         fixes 50231.
12065
12066 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12067
12068         * cs-parser.jay: detect invalid embeded statements gracefully.
12069         bug #51113.
12070
12071 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12072
12073         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
12074         As a regex:
12075         s/
12076         the invocation type may not be a subclass of the tye of the item/
12077         The type of the item must be a subclass of the invocation item.
12078         /g
12079
12080         Fixes bug #50820.
12081
12082 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
12083
12084         * attribute.cs: Added methods to get a string and a bool from an
12085         attribute. Required to information from AssemblyKeyFileAttribute,
12086         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
12087         * codegen.cs: Modified AssemblyName creation to include support for
12088         strongnames. Catch additional exceptions to report them as CS1548.
12089         * compiler.csproj: Updated include CryptoConvert.cs.
12090         * compiler.csproj.user: Removed file - user specific configuration.
12091         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
12092         Mono.Security assembly. The original class is maintained and tested in
12093         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
12094         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
12095         like CSC 8.0 (C# v2) supports.
12096         * Makefile: Added CryptoConvert.cs to mcs sources.
12097         * rootcontext.cs: Added new options for strongnames.
12098
12099 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
12100
12101         * driver.cs: For --expect-error, report error code `2'
12102         if the program compiled with no errors, error code `1' if
12103         it compiled with an error other than the one expected.
12104
12105 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
12106
12107         * compiler.csproj: Updated for Visual Studio .NET 2003.
12108         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
12109         * compiler.sln: Updated for Visual Studio .NET 2003.
12110
12111 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
12112
12113         * expression.cs: Fix bug #47234. We basically need to apply the
12114         rule that we prefer the conversion of null to a reference type
12115         when faced with a conversion to 'object' (csc behaviour).
12116
12117 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12118
12119         * statement.cs: Shorter form for foreach, eliminates
12120         a local variable. r=Martin.
12121
12122 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12123
12124         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
12125         checks if we can use brtrue/brfalse to test for 0.
12126         * expression.cs: use the above in the test for using brtrue/brfalse.
12127         cleanup code a bit.
12128
12129 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12130
12131         * expression.cs: Rewrite string concat stuff. Benefits:
12132
12133         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
12134         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
12135         rather than a concat chain.
12136
12137         * typemanager.cs: Add lookups for more concat overloads.
12138
12139 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12140
12141         * expression.cs: Emit shorter il code for array init.
12142
12143         newarr
12144         dup
12145         // set 1
12146
12147         // set 2
12148
12149         newarr
12150         stloc.x
12151
12152         ldloc.x
12153         // set 1
12154
12155         ldloc.x
12156         // set 2
12157
12158 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
12159
12160         * statement.cs: Before, two switch blocks would be merged if the
12161         total size of the blocks (end_item - begin_item + 1) was less than
12162         two times the combined sizes of the blocks.
12163
12164         Now, it will only merge if after the merge at least half of the
12165         slots are filled.
12166
12167         fixes 55885.
12168
12169 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
12170
12171         * class.cs : csc build fix for GetMethods(). See bug #52503.
12172
12173 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
12174
12175         * expression.cs: Make sure fp comparisons work with NaN.
12176         This fixes bug #54303. Mig approved this patch a long
12177         time ago, but we were not able to test b/c the runtime
12178         had a related bug.
12179
12180 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
12181
12182         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
12183
12184 2004-03-19  Martin Baulig  <martin@ximian.com>
12185
12186         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
12187         two overloads may unify for some type parameter substitutions and
12188         report a CS0408 if appropriate.
12189
12190 2004-03-19  Martin Baulig  <martin@ximian.com>
12191
12192         * class.cs (MemberCore.IsDuplicateImplementation): Report the
12193         error here and not in our caller.
12194
12195 2004-03-19  Martin Baulig  <martin@ximian.com>
12196
12197         * interface.cs: Completely killed this file.
12198         (Interface): We're now a TypeContainer and live in class.cs.
12199
12200         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
12201         argument; we're now also called for interfaces.
12202         (TypeContainer.DefineMembers): Allow this method being called
12203         multiple times.
12204         (TypeContainer.GetMethods): New public method; formerly known as
12205         Interface.GetMethod().  This is used by PendingImplementation.
12206         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
12207         it's now private and non-static.
12208         (Interface): Moved this here; it's now implemented similar to
12209         Class and Struct.
12210         (Method, Property, Event, Indexer): Added `bool is_interface'
12211         argument to their .ctor's.
12212         (MemberBase.IsInterface): New public field.
12213
12214         * cs-parser.jay: Create normal Method, Property, Event, Indexer
12215         instances instead of InterfaceMethod, InterfaceProperty, etc.
12216         (opt_interface_base): Removed; we now use `opt_class_base' instead.
12217         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
12218
12219 2004-03-19  Martin Baulig  <martin@ximian.com>
12220
12221         * class.cs (MethodCore.IsDuplicateImplementation): New private
12222         method which does the CS0111 checking.
12223         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
12224         Use IsDuplicateImplementation().
12225
12226 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
12227
12228         * decl.cs (FindMemberToOverride): New method to find the correct
12229         method or property to override in the base class.
12230         * class.cs
12231             - Make Method/Property use the above method to find the
12232               version in the base class.
12233             - Remove the InheritableMemberSignatureCompare as it is now
12234               dead code.
12235
12236         This patch makes large code bases much faster to compile, as it is
12237         O(n) rather than O(n^2) to do this validation.
12238
12239         Also, it fixes bug 52458 which is that nested classes are not
12240         taken into account when finding the base class member.
12241
12242         Reviewed/Approved by Martin.
12243
12244 2004-03-17  Martin Baulig  <martin@ximian.com>
12245
12246         * expression.cs (MemberAccess.DoResolve): Take the parent's number
12247         of type arguments into account; use the `real_num_type_args'
12248         approach like in DoResolveAsTypeStep().
12249
12250         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
12251         nested types.
12252
12253 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
12254
12255         * interface.cs: In all interface classes removed redundant
12256         member initialization.
12257
12258 2004-03-16  Martin Baulig  <martin@ximian.com>
12259
12260         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12261
12262 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12263
12264         * decl.cs (DefineTypeAndParents): New helper method to define a
12265         type's containers before the type itself is defined;  This is a
12266         bug exposed by the recent changes to Windows.Forms when an
12267         implemented interface was defined inside a class that had not been
12268         built yet.   
12269
12270         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
12271
12272         (Check): Loop correctly to report errors modifiers
12273         (UNSAFE was not in the loop, since it was the same as TOP).
12274
12275         * interface.cs: Every interface member now takes a ModFlags,
12276         instead of a "is_new" bool, which we set on the base MemberCore. 
12277
12278         Every place where we called "UnsafeOk" in the interface, now we
12279         call the proper member (InterfaceMethod.UnsafeOK) instead to get
12280         the unsafe settings from the member declaration instead of the
12281         container interface. 
12282
12283         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
12284
12285         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12286         `set_indexer_name' to the pending bits (one per type).
12287
12288         We fixed a bug today that was picking the wrong method to
12289         override, since for properties the existing InterfaceMethod code
12290         basically ignored the method name.  Now we make sure that the
12291         method name is one of the valid indexer names.
12292
12293 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
12294  
12295         * support.cs (SeekableStreamReader): Keep track of stream byte
12296         positions and don't mix them with character offsets to the buffer.
12297
12298         Patch from Gustavo Giráldez
12299
12300 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
12301
12302         * interface.cs (InterfaceSetGetBase): Removed double member
12303         initialization, base class does it as well.
12304
12305 2004-03-13  Martin Baulig  <martin@ximian.com>
12306
12307         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
12308         when compiling corlib.
12309
12310 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
12311
12312         * convert.cs (ExplicitConversion): We were reporting an error on
12313         certain conversions (object_type source to a value type, when the
12314         expression was `null') before we had a chance to pass it through
12315         the user defined conversions.
12316
12317         * driver.cs: Replace / and \ in resource specifications to dots.
12318         Fixes 50752
12319
12320         * class.cs: Add check for duplicate operators.  Fixes 52477
12321
12322 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
12323
12324         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
12325         that are in the middle of the statements, not only at the end.
12326         Fixes #54987
12327
12328         * class.cs (TypeContainer.AddField): No longer set the
12329         `HaveStaticConstructor' flag, now we call it
12330         `UserDefineStaticConstructor' to diferentiate the slightly
12331         semantic difference.
12332
12333         The situation is that we were not adding BeforeFieldInit (from
12334         Modifiers.TypeAttr) to classes that could have it.
12335         BeforeFieldInit should be set to classes that have no static
12336         constructor. 
12337
12338         See:
12339
12340         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
12341
12342         And most importantly Zoltan's comment:
12343
12344         http://bugzilla.ximian.com/show_bug.cgi?id=44229
12345
12346         "I think beforefieldinit means 'it's ok to initialize the type sometime 
12347          before its static fields are used', i.e. initialization does not need
12348          to be triggered by the first access to the type. Setting this flag
12349          helps the JIT to compile better code, since it can run the static
12350          constructor at JIT time, and does not need to generate code to call it
12351          (possibly lots of times) at runtime. Unfortunately, mcs does not set
12352          this flag for lots of classes like String. 
12353          
12354          csc sets this flag if the type does not have an explicit static 
12355          constructor. The reasoning seems to be that if there are only static
12356          initalizers for a type, and no static constructor, then the programmer
12357          does not care when this initialization happens, so beforefieldinit
12358          can be used.
12359          
12360          This bug prevents the AOT compiler from being usable, since it 
12361          generates so many calls to mono_runtime_class_init that the AOT code
12362          is much slower than the JITted code. The JITted code is faster, 
12363          because it does not generate these calls if the vtable is type is
12364          already initialized, which is true in the majority of cases. But the
12365          AOT compiler can't do this."
12366
12367 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
12368
12369         * class.cs (MethodData.Emit): Refactor the code so symbolic
12370         information is generated for destructors;  For some reasons we
12371         were taking a code path that did not generate symbolic information
12372         before. 
12373
12374 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12375
12376         * class.cs: Create a Constructor.CheckBase method that
12377         takes care of all validation type code. The method
12378         contains some code that was moved from Define.
12379
12380         It also includes new code that checks for duplicate ctors.
12381         This fixes bug #55148.
12382
12383 2004-03-09  Joshua Tauberer <tauberer@for.net>
12384
12385         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
12386         a { ... }-style array creation invokes EmitStaticInitializers
12387         which is not good for reference-type arrays.  String, decimal
12388         and now null constants (NullCast) are not counted toward
12389         static initializers.
12390
12391 2004-03-05  Martin Baulig  <martin@ximian.com>
12392
12393         * location.cs (SourceFile.HasLineDirective): New public field;
12394         specifies whether the file contains or is referenced by a "#line"
12395         directive.
12396         (Location.DefineSymbolDocuments): Ignore source files which
12397         either contain or are referenced by a "#line" directive.        
12398
12399 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
12400
12401         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
12402         direct access to our parent, so check the method inline there.
12403
12404 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12405
12406         * expression.cs (Invocation.EmitCall): Miguel's last commit
12407         caused a regression. If you had:
12408
12409             T t = null;
12410             t.Foo ();
12411
12412         In Foo the implict this would be null.
12413
12414 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
12415
12416         * expression.cs (Invocation.EmitCall): If the method is not
12417         virtual, do not emit a CallVirt to it, use Call.
12418
12419         * typemanager.cs (GetFullNameSignature): Improve the method to
12420         cope with ".ctor" and replace it with the type name.
12421
12422         * class.cs (ConstructorInitializer.Resolve): Now the method takes
12423         as an argument the ConstructorBuilder where it is being defined,
12424         to catch the recursive constructor invocations.
12425
12426 2004-03-16  Martin Baulig  <martin@ximian.com>
12427
12428         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
12429         ConstructedType, call ResolveType() on it to get the type rather
12430         than just using `expr.Type'.
12431
12432 2004-03-16  Martin Baulig  <martin@ximian.com>
12433
12434         * generics.cs (ConstructedType.GetMemberAccess): Take the
12435         EmitContext instead on the TypeExpr and use
12436         ec.TypeContainer.CurrentType/ec.ContainerType.
12437
12438 2004-03-16  Martin Baulig  <martin@ximian.com>
12439
12440         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
12441         parameters before aliases.
12442
12443 2004-03-16  Martin Baulig  <martin@ximian.com>
12444
12445         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12446         New oublic function; checks whether two generic instances may become
12447         equal under some instantiations (26.3.1).
12448
12449         * class.cs (TypeContainer.Define): Call
12450         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12451         error.
12452
12453 2004-03-16  Martin Baulig  <martin@ximian.com>
12454
12455         * class.cs (TypeContainer.GetClassBases): Moved
12456         Error_TypeParameterAsBase() here and also check whether the base
12457         class is not an attribute.
12458
12459 2004-03-16  Martin Baulig  <martin@ximian.com>
12460
12461         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12462
12463 2004-03-16  Martin Baulig  <martin@ximian.com>
12464
12465         * class.cs (Error_TypeParameterAsBase): Use correct error number
12466         here (CS0689).  
12467
12468 2004-03-16  Martin Baulig  <martin@ximian.com>
12469
12470         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12471         for generics.
12472
12473         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12474         error reporting.
12475
12476 2004-03-15  Martin Baulig  <martin@ximian.com>
12477
12478         * typemanager.cs (TypeManager.GetFullName): New public method.
12479         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12480         argument; only return members with the correct number of type
12481         arguments.
12482         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12483         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12484         whether the number of type arguments matches.
12485
12486         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12487         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12488
12489         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12490         field; it's set by the protected .ctor when we're actually a
12491         GenericMemberAccess.
12492         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12493         arguments and pass it to MemberLookupFinal ().
12494
12495         * ecore.cs (Expression.MemberLookup): Added `int
12496         num_type_arguments' argument; only return members with the correct
12497         number of type arguments.
12498         (Expression.MemberLookupFailed): Check whether the MemberLookup
12499         failed because we did not have the correct number of type
12500         arguments; report CS0305 in this case.
12501
12502         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12503         `e.ResolveAsTypeTerminal()' already did so.
12504
12505 2004-03-15  Martin Baulig  <martin@ximian.com>
12506
12507         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12508         we're a ConstructedType; in this case, the caller must report an
12509         error (for instance CS0131).
12510
12511         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12512         (TypeArguments.Resolve): Actually report errors here.
12513
12514 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12515
12516         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12517         `set_indexer_name' to the pending bits (one per type).
12518
12519         We fixed a bug today that was picking the wrong method to
12520         override, since for properties the existing InterfaceMethod code
12521         basically ignored the method name.  Now we make sure that the
12522         method name is one of the valid indexer names.
12523
12524 2004-03-15  Martin Baulig  <martin@ximian.com>
12525
12526         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12527         for generic instances.
12528
12529 2004-03-13  Martin Baulig  <martin@ximian.com>
12530
12531         * class.cs (TypeContainer.DefineType): Call
12532         TypeManager.AddUserType() immediately after creating the
12533         TypeBuilder; pass all type parameters when creating the
12534         CurrentType.
12535
12536         * decl.cs (DeclSpace.FindNestedType): New public method.
12537         (DeclSpace.FindType): Added `int num_type_args' argument; only
12538         return types with the correct number of type parameters.
12539         (DeclSpace.CountTypeParams): New public property.
12540
12541         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12542         the number of type parameters; defaults to zero.
12543
12544         * generic.cs (TypeArguments.Count): New public property.
12545         (ConstructedType.DoResolveAsTypeStep): First call
12546         ds.FindNestedType() to find out whether we're nested in the
12547         current generic type; in this case, we inherit all type parameters
12548         from the current class.
12549
12550         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12551         num_type_args' argument.
12552         (RootContext.LookupType): Added overloaded version which takes the
12553         number of type arguments; only return types with the correct
12554         number of type arguments.
12555
12556         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12557         checks whether `Type t' has `int num_type_args'.
12558
12559 2004-03-13  Martin Baulig  <martin@ximian.com>
12560
12561         * generic.cs (GenericMethod.DefineType): New method; calls
12562         DefineType() on all the type parameters.
12563
12564         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12565         (MethodData.Define): If we're a generic method, call
12566         GenericMethod.DefineType() to define the type parameters.       
12567
12568 2004-03-10  Martin Baulig  <martin@ximian.com>
12569
12570         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12571         instead of IsAssignableFrom.    
12572
12573 2004-03-10  Martin Baulig  <martin@ximian.com>
12574
12575         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
12576
12577         * support.cs (ParameterData.HasArrayParameter): New property.
12578         (ReflectionParameters.ctor): Take a MethodBase instead of a
12579         ParameterInfo[].  If we have any type parameters, get the generic
12580         method definition and ask it whether we have variable arguments.
12581
12582 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
12583
12584         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
12585         routines to check if a type is an enumerable/enumerator allow
12586         classes that implement the IEnumerable or IEnumerator interfaces.
12587
12588         * class.cs (Property, Operator): Implement IIteratorContainer, and
12589         implement SetYields.
12590
12591         (Property.Define): Do the block swapping for get_methods in the
12592         context of iterators.   We need to check if Properties also
12593         include indexers or not.
12594
12595         (Operator): Assign the Block before invoking the
12596         OperatorMethod.Define, so we can trigger the Iterator code
12597         replacement. 
12598
12599         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
12600         Property and Operator classes are not created when we parse the
12601         declarator but until we have the block completed, so we use a
12602         singleton SimpleIteratorContainer.Simple to flag whether the
12603         SetYields has been invoked.
12604
12605         We propagate this setting then to the Property or the Operator to
12606         allow the `yield' to function.
12607
12608 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
12609
12610         * codegen.cs: Implemented attribute support for modules.
12611         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
12612         Assembly/Module functionality.
12613
12614         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
12615         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
12616         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
12617
12618 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
12619
12620         * interface.cs (FindMembers): The operation is performed on all base
12621         interfaces and not only on the first. It is required for future CLS Compliance patch.
12622
12623 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12624
12625         * statement.cs, codegen.cs:
12626         This patch deals with patterns such as:
12627
12628         public class List : IEnumerable {
12629
12630                 public MyEnumerator GetEnumerator () {
12631                         return new MyEnumerator(this);
12632                 }
12633
12634                 IEnumerator IEnumerable.GetEnumerator () {
12635                         ...
12636                 }
12637                 
12638                 public struct MyEnumerator : IEnumerator {
12639                         ...
12640                 }
12641         }
12642
12643         Before, there were a few things we did wrong:
12644         1) we would emit callvirt on a struct, which is illegal
12645         2) we emited ldarg when we needed to emit ldarga
12646         3) we would mistakenly call the interface methods on an enumerator
12647         type that derived from IEnumerator and was in another assembly. For example:
12648
12649         public class MyEnumerator : IEnumerator
12650
12651         Would have the interface methods called, even if there were public impls of the
12652         method. In a struct, this lead to invalid IL code.
12653
12654 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
12655
12656         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
12657           renamed to Emit.
12658
12659         * delegate.cs (Define): Fixed crash when delegate type is undefined.
12660
12661 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
12662
12663         * cs-parser.jay: Fix small regression: we were not testing V2
12664         compiler features correctly.
12665
12666         * interface.cs: If the emit context is null, then create one
12667
12668 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
12669
12670         * decl.cs (GetSignatureForError): New virtual method to get full name
12671           for error messages.
12672
12673         * attribute.cs (IAttributeSupport): New interface for attribute setting.
12674           Now it is possible to rewrite ApplyAttributes method to be less if/else.
12675
12676         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
12677           Duplicated members and code in these classes has been removed.
12678           Better encapsulation in these classes.
12679
12680 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
12681
12682         * assign.cs (Assign.DoResolve): When dealing with compound
12683         assignments, there is a new rule in ECMA C# 2.4 (might have been
12684         there before, but it is documented here) that states that in:
12685
12686         a op= b;
12687
12688         If b is of type int, and the `op' is a shift-operator, then the
12689         above is evaluated as:
12690
12691         a = (int) a op b 
12692
12693         * expression.cs (Binary.ResolveOperator): Instead of testing for
12694         int/uint/long/ulong, try to implicitly convert to any of those
12695         types and use that in pointer arithmetic.
12696
12697         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
12698         method to print information for from the type, not from the
12699         null-method we were given.
12700
12701 2004-02-01  Duncan Mak  <duncan@ximian.com>
12702
12703         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
12704         parsing for cmd, fixes bug #53694.
12705
12706 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
12707
12708         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
12709         in the member name duplication tests. Property and operator name duplication
12710         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
12711
12712 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
12713
12714         * interface.cs (PopulateMethod): Fixed crash when interface method
12715         returns not existing type (error test cs0246-3.cs).
12716
12717 2004-02-02  Ravi Pratap M <ravi@ximian.com>
12718
12719         * cs-parser.jay (interface_accessors): Re-write actions to also
12720         store attributes attached to get and set methods. Fix spelling
12721         while at it.
12722
12723         (inteface_property_declaration): Modify accordingly.
12724
12725         (InterfaceAccessorInfo): New helper class to store information to pass
12726         around between rules that use interface_accessors.
12727
12728         * interface.cs (Emit): Apply attributes on the get and set
12729         accessors of properties and indexers too.
12730
12731         * attribute.cs (ApplyAttributes): Modify accordingly to use the
12732         right MethodBuilder when applying attributes to the get and set accessors.
12733
12734 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
12735
12736         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
12737
12738 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
12739
12740         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
12741
12742 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
12743
12744         * cs-parser.jay: Remove YIELD token, instead use the new grammar
12745         changes that treat `yield' specially when present before `break'
12746         or `return' tokens.
12747
12748         * cs-tokenizer.cs: yield is no longer a keyword.
12749
12750 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
12751
12752         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
12753         setting for default constructors.
12754         For default constructors are almost every time set wrong Modifier. The
12755         generated IL code has been alright. But inside mcs this values was
12756         wrong and this was reason why several of my CLS Compliance tests
12757         failed.
12758
12759 2004-02-27  Martin Baulig  <martin@ximian.com>
12760
12761         * generics.cs (ConstructedType.ResolveType): Make the nested type
12762         stuff actually work.
12763
12764 2004-02-25  Martin Baulig  <martin@ximian.com>
12765
12766         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
12767         property; returns the type parameters just from the current type,
12768         ie. with the ones from outer classes.
12769         (DeclSpace.LookupGeneric): First search in the current class, then
12770         in outer classes.
12771         (DeclSpace.initialize_type_params): When hiding a type parameter
12772         from an outer class, put it into the `type_param_list' anyways.
12773
12774         * expression.cs (MemberAccess.expr): Made this field protected.
12775
12776         * class.cs (TypeContainer.Define): The `CurrentType' just contains
12777         the type parameters from the current class.
12778
12779         * generic.cs (ConstructedType.ResolveType): Support nested generic
12780         types by taking the type parameters which we inherit from outer
12781         classes into account.
12782         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
12783         support for nested generic types.
12784
12785 2004-02-23  Martin Baulig  <martin@ximian.com>
12786
12787         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
12788         field and check whether we're nested inside a generic type.
12789         (DeclSpace.ResolveType): If we're resolving to a generic type
12790         definition, create a ConstructedType and return its resolved type.
12791         (DeclSpace.initialize_type_params): New private method;
12792         initializes the `type_param_list' field from the type parameters
12793         from this and all enclosing classes.
12794         (DeclSpace.TypeParameters): Call initialize_type_params() unless
12795         we're already initialized.
12796
12797 2004-02-23  Martin Baulig  <martin@ximian.com>
12798
12799         * class.cs (Method.Define): Create the generic method before
12800         calling DoDefine().
12801         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
12802         the TypeContainer one); we use this for generic methods.
12803
12804         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
12805         parent's TypeBuilder.
12806
12807 2004-02-18  Martin Baulig  <martin@ximian.com>
12808
12809         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
12810         to check for equality.
12811
12812 2004-02-05  Martin Baulig  <martin@ximian.com>
12813
12814         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
12815         `ec.TypeContainer.CurrentType', use it instead of
12816         `ec.ContainerType' to check whether we're in the type's ctor.
12817
12818 2004-01-29  Martin Baulig  <martin@ximian.com>
12819
12820         * expression.cs (Invocation.DoResolve): If we're a
12821         `ConstructedType', then we're actually a generic method, so
12822         rewrite the expr as a GenericMemberAccess.
12823
12824         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
12825         here; manually parse it into a string.
12826
12827 2004-01-28  Martin Baulig  <martin@ximian.com>
12828
12829         * typemanager.cs (TypeManager.IsEqual): New static method.
12830         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
12831         check for equality instead of using `=='.
12832
12833 2004-01-26  Martin Baulig  <martin@ximian.com>
12834
12835         * decl.cs (DeclSpace.CurrentType): New public field.
12836
12837         * expression.cs (This.ResolveBase): If we have an
12838         `ec.TypeContainer.CurrentType', use it instead of
12839         `ec.ContainerType'.
12840
12841         * class.cs (TypeContainer.DefineType): If we're a generic type,
12842         create the `CurrentType' (unresolved).
12843         (TypeContainer.GenericType): New private field.
12844         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
12845         it and store it in `GenericType' before creating the MemberCache.
12846         (TypeContainer.GetMembers): If we have a `GenericType', call
12847         TypeManager.FindMembers() on it.
12848
12849         * interface.cs (Interface.GenericType): New private field.
12850         (Interface.DefineType): If we're a generic type, create the
12851         `CurrentType' (unresolved).
12852         (Interface.DefineMembers): If we have a `CurrentType', resolve it
12853         and store it in `GenericType' before creating the MemberCache.
12854         (Interface.GetMembers): If we have a `GenericType', call
12855         TypeManager.FindMembers() on it.
12856
12857 2004-01-22  Martin Baulig  <martin@ximian.com>
12858
12859         * cs-parser.jay (namespace_or_type_name): Return an Expression,
12860         not a QualifiedIdentifier.  This is what `type_name_expression'
12861         was previously doing.
12862         (type_name_expression): Removed; the code is now in
12863         `namespace_or_type_name'.
12864         (qualified_identifier): Removed, use `namespace_or_type_name'
12865         instead.
12866         (QualifiedIdentifier): Removed this class.      
12867
12868 2004-01-22  Martin Baulig  <martin@ximian.com>
12869
12870         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
12871         not a string as alias name.
12872
12873 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
12874
12875         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
12876         #52730 bug, and instead compute correctly the need to use a
12877         temporary variable when requesting an address based on the
12878         static/instace modified of the field and the constructor.
12879  
12880 2004-01-21  Martin Baulig  <martin@ximian.com>
12881
12882         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
12883         class and namespace before looking up aliases.  Fixes #52517.
12884
12885 2004-01-21  Martin Baulig  <martin@ximian.com>
12886
12887         * flowanalysis.cs (UsageVector.Merge): Allow variables being
12888         assinged in a 'try'; fixes exception4.cs.
12889
12890 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12891         * class.cs : Implemented parameter-less constructor for TypeContainer
12892
12893         * decl.cs: Attributes are now stored here. New property OptAttributes
12894
12895         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
12896
12897         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
12898
12899 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12900
12901         * typemanager.cs (CSharpSignature): Now reports also inner class name.
12902           (CSharpSignature): New method for indexer and property signature.
12903
12904 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12905
12906         * pending.cs (IsVirtualFilter): Faster implementation.
12907
12908 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12909
12910         * typemanager.cs: Avoid inclusion of same assembly more than once.
12911
12912 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12913
12914         * cs-parser.jay: Fixed problem where the last assembly attribute
12915           has been applied also to following declaration (class, struct, etc.)
12916           
12917 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12918
12919         * class.cs: Added error CS0538, CS0539 reporting.
12920         Fixed crash on Microsoft runtime when field type is void.
12921
12922         * cs-parser.jay: Added error CS0537 reporting.
12923
12924         * pending.cs: Added error CS0535 reporting.
12925         Improved error report for errors CS0536, CS0534.
12926
12927 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
12928
12929         Merge a few bits from the Anonymous Method MCS tree.
12930
12931         * statement.cs (ToplevelBlock): New class for toplevel methods,
12932         will hold anonymous methods, lifted variables.
12933
12934         * cs-parser.jay: Create toplevel blocks for delegates and for
12935         regular blocks of code. 
12936
12937 2004-01-20  Martin Baulig  <martin@ximian.com>
12938
12939         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
12940         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
12941         and `NeedExplicitReturn'; added `IsLastStatement'.
12942         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
12943         have a `ReturnLabel' or we're not unreachable.
12944
12945         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
12946         child's reachability; don't just override ours with it.  Fixes
12947         #58058 (lluis's example).
12948         (FlowBranching): Added public InTryOrCatch(), InCatch(),
12949         InFinally(), InLoop(), InSwitch() and
12950         BreakCrossesTryCatchBoundary() methods.
12951
12952         * statement.cs (Return): Do all error checking in Resolve().
12953         Unless we are the last statement in a top-level block, always
12954         create a return label and jump to it.
12955         (Break, Continue): Do all error checking in Resolve(); also make
12956         sure we aren't leaving a `finally'.
12957         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
12958         statement in a top-level block.
12959         (Block.Flags): Added `IsDestructor'.
12960         (Block.IsDestructor): New public property.
12961
12962 2004-01-20  Martin Baulig  <martin@ximian.com>
12963
12964         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
12965
12966 2004-01-20  Martin Baulig  <martin@ximian.com>
12967
12968         * statement.cs (Statement.ResolveUnreachable): New public method.
12969         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
12970         (Block.Resolve): Resolve unreachable statements.
12971
12972 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
12973
12974         * expression.cs: We need to fix the case where we do
12975         not have a temp variable here.
12976
12977         * assign.cs: Only expression compound assignments need
12978         temporary variables.
12979
12980 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
12981
12982         * flowanalysis.cs: Reduce memory allocation in a few ways:
12983           - A block with no variables should not allocate a bit
12984             vector for itself.
12985           - A method with no out parameters does not need any tracking
12986             for assignment of the parameters, so we need not allocate
12987             any data for it.
12988           - The arrays:
12989                 public readonly Type[] VariableTypes;
12990                 public readonly string[] VariableNames;
12991             Are redundant. The data is already stored in the variable
12992             map, so we need not allocate another array for it.
12993           - We need to add alot of checks for if (params | locals) == null
12994             due to the first two changes.
12995
12996 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
12997
12998         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
12999         implement IMemoryLocation, we store a copy on a local variable and
13000         take the address of it.  Patch from Benjamin Jemlich
13001
13002         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
13003         to use a special "type_name_expression" rule which reduces the
13004         number of "QualifiedIdentifier" classes created, and instead
13005         directly creates MemberAccess expressions.
13006
13007 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
13008
13009         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
13010         that fixes #52853.  Null literal assignment to ValueType
13011
13012         * class.cs (MethodData.Emit): Instead of checking the name of the
13013         method to determine if its a destructor, create a new derived
13014         class from Method called Destructor, and test for that.  
13015
13016         * cs-parser.jay: Create a Destructor object instead of a Method.  
13017
13018         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
13019
13020         Fixes: 52933
13021
13022 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
13023
13024         * expression.cs (Binary.ResolveOperator): Perform an implicit
13025         conversion from MethodGroups to their delegate types on the
13026         Addition operation.
13027
13028         * delegate.cs: Introduce a new class DelegateCreation that is the
13029         base class for `NewDelegate' and `ImplicitDelegateCreation',
13030         factor some code in here.
13031
13032         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
13033         conversion from MethodGroups to compatible delegate types. 
13034
13035         * ecore.cs (Expression.Resolve): Do not flag error 654
13036         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
13037         we allow conversions from MethodGroups to delegate types now.
13038
13039         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
13040         assignments in v2 either.
13041
13042 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
13043
13044         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
13045         static read-only fields in ctors.
13046
13047         Applied patch from Benjamin Jemlich 
13048
13049         * expression.cs (UnaryMutator): Avoid leaking local variables. 
13050
13051 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
13052
13053         * cs-tokenizer.cs (IsCastToken): Allow the various native types
13054         here to return true, as they can be used like this:
13055
13056                 (XXX) int.MEMBER ()
13057
13058         Fixed 49836 and all the other dups
13059
13060 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
13061
13062         * driver.cs: Implement /win32res and /win32icon.
13063
13064 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
13065
13066         * cs-parser.jay: Add a rule to improve error handling for the
13067         common mistake of placing modifiers after the type.
13068
13069 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
13070
13071         * cs-parser.jay (interface_event_declaration): Catch
13072         initialization of events on interfaces, and report cs0068
13073
13074         * cs-parser.jay (interface_event_declaration): Catch
13075         initialization of events. 
13076
13077         * ecore.cs: Better report missing constructors.
13078
13079         * expression.cs (Binary.ResolveOperator): My previous bug fix had
13080         the error reporting done in the wrong place.  Fix.
13081
13082         * expression.cs (Binary.ResolveOperator): Catch the 
13083         operator + (E x, E y) error earlier, and later allow for implicit
13084         conversions in operator +/- (E e, U x) from U to the underlying
13085         type of E.
13086
13087         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
13088         52596, if the container class is abstract, the default constructor
13089         is protected otherwise its public (before, we were always public).
13090
13091         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
13092         fixed statement.
13093
13094         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
13095         Jemlich that fixes bug #52597, MCS was generating invalid code for
13096         idisposable structs.   Thanks to Ben for following up with this
13097         bug as well.
13098
13099 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
13100
13101         * driver.cs: Allow assemblies without code to be generated, fixes
13102         52230.
13103
13104 2004-01-07  Nick Drochak <ndrochak@gol.com>
13105
13106         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
13107
13108 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
13109
13110         * cs-parser.jay: Add rules to improve error reporting if fields or
13111         methods are declared at the namespace level (error 116)
13112
13113         * Add rules to catch event add/remove
13114
13115 2004-01-04  David Sheldon <dave-mono@earth.li>
13116
13117   * expression.cs: Added matching ")" to error message for 
13118   CS0077
13119
13120 2004-01-03 Todd Berman <tberman@gentoo.org>
13121
13122         * ecore.cs, attribute.cs:
13123         Applying fix from #52429.
13124
13125 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13126
13127         * ecore.cs, expression.cs, statement.cs:
13128         Total rewrite of how we handle branching. We
13129         now handle complex boolean expressions with fewer
13130         jumps. As well if (x == 0) no longer emits a ceq.
13131
13132         if (x is Foo) is much faster now, because we generate
13133         better code.
13134
13135         Overall, we get a pretty big improvement on our benchmark
13136         tests. The code we generate is smaller and more readable.
13137
13138         I did a full two-stage bootstrap. The patch was reviewed
13139         by Martin and Miguel.
13140
13141 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13142
13143         * cs-parser.jay: Make primary_expression not take a QI.
13144         we dont need this because the member_access rule covers
13145         us here. So we replace the rule with just IDENTIFIER.
13146
13147         This has two good effects. First, we remove a s/r conflict.
13148         Second, we allocate many fewer QualifiedIdentifier objects.
13149
13150 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13151
13152         * attribute.cs: Handle MarshalAs attributes as pseudo, and
13153         set the correct information via SRE. This prevents
13154         hanging on the MS runtime. Fixes #29374.
13155
13156 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13157
13158         * convert.cs: correctly handle conversions to value types
13159         from Enum and ValueType as unboxing conversions.
13160
13161         Fixes bug #52569. Patch by Benjamin Jemlich.
13162
13163 2004-01-02  Ravi Pratap  <ravi@ximian.com>
13164
13165         * expression.cs (BetterConversion): Prefer int -> uint
13166         over int -> ulong (csc's behaviour). This fixed bug #52046.
13167
13168 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13169
13170         * decl.cs (MemberCache.FindMembers): now returns a
13171         MemberInfo [].
13172
13173         * typemanager.cs: In general, go with with ^^.
13174         (CopyNewMethods): take an IList.
13175         (RealMemberLookup): Only allocate an arraylist
13176         if we copy from two sets of methods.
13177
13178         This change basically does two things:
13179         1) Fewer array lists allocated due to CopyNewMethods.
13180         2) the explicit cast in MemberList costed ALOT.
13181
13182 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
13183
13184         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
13185         a hashtable to avoid needless string allocations when an identifier is
13186         used more than once (the common case).
13187
13188 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13189
13190         * pending.cs: MS's TypeBuilder.GetInterfaces ()
13191         is broken, it will not return anything. So, we
13192         have to use the information we have in mcs to
13193         do the task.
13194
13195         * typemanager.cs: Add a cache for GetInterfaces,
13196         since this will now be used more often (due to ^^)
13197
13198         (GetExplicitInterfaces) New method that gets the
13199         declared, not effective, interfaces on a type
13200         builder (eg, if you have interface IFoo, interface
13201         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
13202         { IBar }.
13203
13204         This patch makes MCS able to bootstrap itself on
13205         Windows again.
13206
13207 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13208
13209         * expression.cs: Remove the Nop's that Miguel put
13210         in by mistake.
13211
13212 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13213
13214         * report.cs, codegen.cs: Give the real stack trace to
13215         the error when an exception is thrown.
13216
13217 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13218
13219         * decl.cs: only allocate hashtables for ifaces if 
13220         it is an iface!
13221
13222 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13223
13224         * expression.cs: fix the error from cs0121-2.cs
13225         (a parent interface has two child interfaces that
13226         have a function with the same name and 0 params
13227         and the function is called through the parent).
13228
13229 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13230
13231         * class.cs, rootcontext.cs, typmanager.cs: do not
13232         leak pointers.
13233
13234 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13235
13236         * codegen.cs: remove stack for the ec flow branching.
13237         It is already a linked list, so no need.
13238
13239 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
13240
13241         * Makefile: Allow custom profiler here.
13242
13243 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13244
13245         * typemanager.cs (LookupType):
13246           - Use a static char [], because split takes
13247             a param array for args, so it was allocating
13248             every time.
13249           - Do not store true in a hashtable, it boxes.
13250
13251 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13252
13253         * flowanalysis.cs: bytify common enums.
13254
13255 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13256
13257         * modifiers.cs: Add a new set of flags for the
13258         flags allowed on explicit interface impls.
13259         * cs-parser.jay: catch the use of modifiers in
13260         interfaces correctly.
13261         * class.cs: catch private void IFoo.Blah ().
13262
13263         All related to bug #50572.
13264
13265 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13266
13267         * decl.cs: Rewrite the consistant accessability checking.
13268         Accessability is not linear, it must be implemented in
13269         a tableish way. Fixes #49704.
13270
13271 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13272
13273         * expression.cs: Handle negation in a checked context.
13274         We must use subtraction from zero. Fixes #38674.
13275
13276 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13277
13278         * class.cs: Ignore static void main in DLLs.
13279         * rootcontext.cs: Handle the target type here,
13280         since we are have to access it from class.cs
13281         * driver.cs: account for the above.
13282
13283 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13284
13285         * report.cs: Give line numbers and files if available.
13286
13287 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
13288
13289         * driver.cs: Implement /addmodule.
13290
13291         * typemanager.cs:  Change 'modules' field so it now contains Modules not
13292         ModuleBuilders.
13293
13294 2003-12-20  Martin Baulig  <martin@ximian.com>
13295
13296         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
13297         (FieldBase.IsAssigned): Removed this field.
13298         (FieldBase.SetAssigned): New public method.
13299         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
13300
13301 2003-12-20  Martin Baulig  <martin@ximian.com>
13302
13303         * expression.cs (LocalVariableReference.DoResolve): Don't set
13304         `vi.Used' if we're called from DoResolveLValue().
13305
13306         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
13307         returns the usage vector it just merged into the current one -
13308         pass this one to UsageWarning().
13309         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
13310         of the `EmitContext', don't call this recursively on our children.
13311
13312 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
13313
13314         * driver.cs: Implement /target:module.
13315
13316 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
13317
13318         * support.cs (CharArrayHashtable): New helper class.
13319
13320         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
13321         char arrays, not strings, so we can avoid creating a string in
13322         consume_identifier if the identifier is a keyword.
13323
13324 2003-12-16  Martin Baulig  <martin@ximian.com>
13325
13326         * statement.cs (LocalInfo.Assigned): Removed this property.
13327         (LocalInfo.Flags): Removed `Assigned'.
13328         (LocalInfo.IsAssigned): New public method; takes the EmitContext
13329         and uses flow analysis.
13330         (Block.UsageWarning): Made this method private.
13331         (Block.Resolve): Call UsageWarning() if appropriate.
13332
13333         * expression.cs (LocalVariableReference.DoResolve): Always set
13334         LocalInfo.Used here.
13335
13336 2003-12-13  Martin Baulig  <martin@ximian.com>
13337
13338         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
13339         any value here; we're now using flow analysis to figure out
13340         whether a statement/block returns a value.
13341
13342 2003-12-13  Martin Baulig  <martin@ximian.com>
13343
13344         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
13345         working again.
13346         (FlowBranching.MergeFinally): Don't call
13347         `branching.CheckOutParameters()' here, this is called in
13348         MergeTopBlock().
13349         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
13350         when adding the `finally' vector.       
13351
13352 2003-12-13  Martin Baulig  <martin@ximian.com>
13353
13354         * flowanalysis.cs
13355         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
13356         actually work and also fix #48962.
13357
13358 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13359
13360         * decl.cs: Do not check System.Object for nested types,
13361         since we know it does not have any. Big bang for buck:
13362
13363         BEFORE:
13364            Run 1:   8.35 seconds
13365            Run 2:   8.32 seconds
13366            corlib:  17.99 seconds
13367         AFTER:
13368            Run 1:   8.17 seconds
13369            Run 2:   8.17 seconds
13370            corlib:  17.39 seconds
13371
13372 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
13373
13374         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
13375         time we are returning 0 members, so we save alot here.
13376
13377 2003-12-11  Martin Baulig  <martin@ximian.com>
13378
13379         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
13380         `MergeChild()', also just take the `FlowBranching' as argument;
13381         call Merge() on it and return the result.
13382         (FlowBranching.Merge): We don't need to do anything if we just
13383         have one sibling.
13384
13385 2003-12-11  Martin Baulig  <martin@ximian.com>
13386
13387         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
13388         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
13389         Maurer for this idea.
13390
13391 2003-12-11  Martin Baulig  <martin@ximian.com>
13392
13393         * flowanalysis.cs (MergeResult): This class is now gone; we now
13394         use the `UsageVector' for this.  The reason for this is that if a
13395         branching just has one sibling, we don't need to "merge" them at
13396         all - that's the next step to do.
13397         (FlowBranching.Merge): We now return a `UsageVector' instead of a
13398         `MergeResult'.
13399
13400 2003-12-11  Martin Baulig  <martin@ximian.com>
13401
13402         Reworked flow analyis and made it more precise and bug-free.  The
13403         most important change is that we're now using a special `Reachability'
13404         class instead of having "magic" meanings of `FlowReturns'.  I'll
13405         do some more cleanups and optimizations and also add some more
13406         documentation this week.
13407
13408         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
13409         largely reworked this class.
13410         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
13411         the new `Reachability' class instead of having "magic" values here.
13412         (FlowBranching): We're now using an instance of `Reachability'
13413         instead of having separate `Returns', `Breaks' etc. fields.
13414
13415         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
13416         based on flow analysis; ignore the return value of block.Emit ().
13417
13418 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
13419
13420         * driver.cs typemanager.cs: Find the mono extensions to corlib even
13421         if they are private.
13422
13423 2003-12-09  Martin Baulig  <martin@ximian.com>
13424
13425         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
13426         call them directly on the UsageVector.
13427
13428 2003-12-09  Martin Baulig  <martin@ximian.com>
13429
13430         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
13431         Changed return type from `FlowReturns' to `Reachability'.
13432
13433 2003-12-09  Martin Baulig  <martin@ximian.com>
13434
13435         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
13436         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
13437         `Reachable' fields with a single `Reachability' one.
13438
13439 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13440
13441         * class.cs (FindMembers): Remove foreach's.
13442
13443         Bootstrap times:
13444
13445         BEFORE
13446                 Run 1:   8.74 seconds
13447                 Run 2:   8.71 seconds
13448
13449         AFTER
13450                 Run 1:   8.64 seconds
13451                 Run 2:   8.58 seconds
13452
13453
13454 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13455
13456         * cs-parser.jay:
13457         * gen-treedump.cs:
13458         * statement.cs:
13459         This patch does a few things:
13460                 1. EmptyStatement is now a singleton, so it is never reallocated.
13461                 2. All blah is EmptyStatement constructs have been changed to
13462                    blah == EmptyStatement.Value, which is much faster and valid
13463                    now that EmptyStatement is a singleton.
13464                 3. When resolving a block, rather than allocating a new array for
13465                    the non-empty statements, empty statements are replaced with
13466                    EmptyStatement.Value
13467                 4. Some recursive functions have been made non-recursive.
13468         Mainly the performance impact is from (3), however (1) and (2) are needed for
13469         this to work. (4) does not make a big difference in normal situations, however
13470         it makes the profile look saner.
13471
13472         Bootstrap times:
13473
13474         BEFORE
13475         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13476         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13477         Total memory allocated: 56397 KB
13478
13479         AFTER
13480         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13481         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13482         Total memory allocated: 55666 KB
13483
13484 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13485
13486         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13487         than the hashtable in a hashtable version
13488
13489         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13490         we always end up concating a string. This results in a huge perf
13491         loss, because many strings have to be tracked by the GC. In this
13492         patch, we first use a hashtable that works with two keys, so that
13493         the strings do not need to be concat'ed.
13494
13495         Bootstrap times:
13496         BEFORE
13497                 Run 1:   8.74 seconds
13498                 Run 2:   8.71 seconds
13499
13500         AFTER
13501                 Run 1:   8.65 seconds
13502                 Run 2:   8.56 seconds
13503
13504 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13505
13506         * Makefile: Add a new target `do-time' that does a quick and simple
13507         profile, leaving easy to parse output.
13508
13509 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13510
13511         * codegen.cs (Init): Create the dynamic assembly with 
13512         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13513
13514 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13515
13516         * support.cs: Make the PtrHashtable use only one
13517         instance of its comparer.
13518
13519 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13520
13521         * typemanager.cs: Fix lookup of GetNamespaces.
13522
13523 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13524
13525         * expression.cs: Removed redundant line.
13526
13527         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13528         ArrayLists, use for loops with bounds.  
13529
13530         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13531         arraylist.
13532
13533         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13534         arraylists, use for loop with bounds.
13535
13536         The above three changes give us a 0.071 second performance
13537         improvement out of 3.294 seconds down to 3.223.  On my machine
13538         the above changes reduced the memory usage by 1,387 KB during
13539         compiler bootstrap.
13540
13541         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13542         QualifiedIdentifiers.  Before we created a new string through
13543         concatenation, and mostly later on, the result would be
13544         manipulated by DecomposeQI through string manipulation.
13545
13546         This reduced the compiler memory usage for bootstrapping from
13547         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13548         compile times in 0.05 seconds.
13549
13550 2003-11-28  Dick Porter  <dick@ximian.com>
13551
13552         * support.cs: Do string compares with the Invariant culture.
13553
13554         * rootcontext.cs: 
13555         * gen-treedump.cs: 
13556         * expression.cs: 
13557         * driver.cs: 
13558         * decl.cs: 
13559         * codegen.cs: 
13560         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13561         the comparison is done with the Invariant culture.
13562
13563 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13564
13565         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13566         GetEnumerator method.
13567
13568         (ProbeCollectionType): Iterate starting at the most specific type
13569         upwards looking for a GetEnumerator
13570
13571         * expression.cs: Shift count can be up to 31 for int/uint and 63
13572         for long/ulong.
13573
13574 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
13575
13576         * statement.cs (Block.LookupLabel): Also look for the label on the
13577         children blocks.  Use a hash table to keep track of visited
13578         nodes. 
13579
13580         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
13581         we actually did transform the other operand, otherwise fall back
13582         to the common codepath that casts to long.
13583
13584         * cs-tokenizer.cs: Use the same code pattern as the int case.
13585         Maybe I should do the parsing myself, and avoid depending on the
13586         Parse routines to get this done.
13587
13588 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
13589
13590         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13591         which fixes bug 51347.  This time test it.
13592
13593         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
13594         attributes for example can not tell the difference between these.
13595         The difference was only a syntax feature of the language. 
13596
13597         * attribute.cs: Apply attributes to delegates.
13598
13599         * delegate.cs: Call the apply attributes method.
13600
13601 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
13602
13603         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
13604         comparing 0 vs Byte.MinValue, not the value
13605
13606         (ImplicitConversionRequired): When reporting a conversion error,
13607         use error 31 to print out the constant error instead of the
13608         simpler 29.
13609
13610         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13611         which fixes bug 51347.
13612
13613 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
13614
13615         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
13616         which fixes the -warnaserror command line option.
13617
13618 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
13619
13620         * cfold.cs (DoNumericPromotions): During constant folding of
13621         additions on UIntConstant, special case intconstants with
13622         IntConstants like we do on the expression binary operator. 
13623
13624 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
13625
13626         * convert.cs (ImplicitReferenceConversion): We were missing a case
13627         (System.Enum are not value types or class types, so we need to
13628         classify them separatedly).
13629
13630         * driver.cs: We do not support error 2007.
13631
13632 2003-11-12 Jackson Harper <jackson@ximian.com>
13633
13634         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
13635         system directory. Also use the full file name so users can
13636         libraries names mscorlib-o-tron.dll in a non system dir.
13637         
13638 2004-01-04  David Sheldon <dave-mono@earth.li>
13639
13640         * expression.cs: Added matching ")" to error message for CS0077.
13641
13642 2003-12-19  Martin Baulig  <martin@ximian.com>
13643
13644         * typemanager.cs (TypeManager.IsEqualGenericType): New public
13645         static method; see documentation in the method.
13646         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
13647
13648         * convert.cs (Convert.ImplicitReferenceConversion,
13649         Convert.ImplicitReferenceConversionExists): Add support for
13650         generic type declarations; see gen-36.cs.
13651
13652 2003-12-19  Martin Baulig  <martin@ximian.com>
13653
13654         * pending.cs (Pending.InterfaceMethod): Use
13655         `Type.IsAssignableFrom()' instead of `=='.
13656
13657 2003-12-18  Martin Baulig  <martin@ximian.com>
13658
13659         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
13660         byref types first.
13661
13662         * convert.cs (Convert.ImplicitStandardConversionExists): Use
13663         `expr_type.Equals (target_type)' instead of `=='.
13664
13665 2003-12-08  Martin Baulig  <martin@ximian.com>
13666
13667         * generics.cs (Constraints.Types): Removed.
13668         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
13669         to Type's.
13670         (Constraints.ResolveTypes): New public method; resolves the
13671         TypeExpr's to Type's.
13672         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
13673         longer takes the constraints.
13674         (TypeParameter.DefineMethod): Likewise.
13675         (TypeParameter.DefineType): New public method.  Calls
13676         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
13677         the constraints.
13678
13679 2003-12-08  Martin Baulig  <martin@ximian.com>
13680
13681         * convert.cs (Convert.ImplicitConversionStandard): Use
13682         `expr_type.Equals (target_type)' instead of `=='.
13683
13684 2003-12-08  Martin Baulig  <martin@ximian.com>
13685
13686         * typemanager.cs (TypeManager.GetReferenceType): Call
13687         `Type.MakeByRefType ()'.
13688
13689 2003-12-08  Martin Baulig  <martin@ximian.com>
13690
13691         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
13692         just has some special meaning in some situations.  For instance,
13693         it is allowed to use `where' as the name of a variable etc.
13694
13695 2003-12-04  Martin Baulig  <martin@ximian.com>
13696
13697         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13698         `Type.MakeArrayType()' for array types.
13699
13700 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
13701
13702         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
13703         debugging message.
13704
13705         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
13706         corlib to compile.
13707
13708 2003-11-16  Martin Baulig  <martin@ximian.com>
13709
13710         * codegen.cs (EmitContext.IsGeneric): Removed.
13711
13712         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
13713         ResolveGeneric() on the DeclSpace.
13714
13715 2003-11-16  Martin Baulig  <martin@ximian.com>
13716
13717         * generic.cs (TypeArguments.Resolve):
13718         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
13719         `ResolveType()' on it to get the Type.
13720
13721 2003-11-15  Martin Baulig  <martin@ximian.com>
13722
13723         * generic.cs (ConstructedType.GetInterfaces): Override this.
13724
13725 2003-11-14  Martin Baulig  <martin@ximian.com>
13726
13727         * interface.cs (Interface.DefineType): Define all type parameters
13728         before adding the interfaces we inherit.
13729
13730 2003-11-11  Martin Baulig  <martin@ximian.com>
13731
13732         * generic.cs (ConstructedType.ResolveType): Always call
13733         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
13734
13735 2003-11-10  Martin Baulig  <martin@ximian.com>
13736
13737         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
13738         (TypeManager.InitCoreTypes): Initialize them here, but instead of
13739         calling `ResolveType()' on them, directly assign their `Type'.
13740
13741 2003-11-08  Martin Baulig  <martin@ximian.com>
13742
13743         * generic.cs (ConstructedType): Override `IsClass' etc.
13744
13745 2003-11-08  Martin Baulig  <martin@ximian.com>
13746
13747         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
13748         return value and the `out parent' parameter.
13749         (TypeContainer.DefineType): Moved the CS0644 check into
13750         GetClassBases().  Don't pass the interface types to the
13751         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
13752         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
13753
13754         * ecore.cs (TypeExpr.IsAttribute): New property.
13755         (TypeExpr.GetInterfaces): New method.
13756
13757         * interface.cs (Interface.GetInterfaceTypeByName): Return a
13758         TypeExpr instead of a Type.
13759         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
13760         (Interface.DefineType): Don't pass the interface types to the
13761         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
13762         them later and then call `TypeBulider.AddInterfaceImplementation()'.
13763
13764         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
13765         instead of a `Type[]'.
13766         (TypeManager.RegisterBuilder): Likewise.
13767         (TypeManager.AddUserInterface): Likewise.
13768         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
13769         `Type[]' and also return a `TypeExpr[]'.
13770         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
13771
13772 2003-11-08  Martin Baulig  <martin@ximian.com>
13773
13774         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
13775         Expression.     
13776
13777 2003-11-08  Martin Baulig  <martin@ximian.com>
13778
13779         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
13780         TypeManager.ResolveExpressionTypes().
13781
13782         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
13783         instead of an Expression.
13784         (TypeExpr): This is now an abstract base class for `TypeExpression'.
13785         (TypeExpression): New public class; formerly known as `TypeExpr'.
13786
13787         * expression.cs (ComposedCast): Derive from TypeExpr.
13788
13789         * typemanager.cs (TypeManager.system_*_expr): These are now
13790         TypExpr's instead of Expression's.
13791         (TypeManager.ResolveExpressionTypes): New public static function;
13792         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
13793         of them.        
13794
13795 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
13796
13797         * expression.cs (New.DoResolve): Do not dereference value that
13798         might be a null return.
13799
13800         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
13801         sure that the constant value has the right type.  Fixes an
13802         unreported bug, similar to 50425.
13803
13804         * const.cs (Const.LookupConstantValue): Call
13805         ImplicitStandardConversionExists before doing a conversion to
13806         avoid havng the TypeManager.ChangeType do conversions.
13807
13808         Reduced the number of casts used
13809
13810         (Const.ChangeType): New routine to enable reuse of the constant
13811         type changing code from statement.
13812
13813         * typemanager.cs (ChangeType): Move common initialization to
13814         static global variables.
13815
13816         Fixes #50425.
13817
13818         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
13819         every value type to go through, even if it was void.  Fix that. 
13820
13821         * cs-tokenizer.cs: Use is_identifier_start_character on the start
13822         character of the define, and the is_identifier_part_character for
13823         the rest of the string.
13824
13825 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
13826
13827         * expression.cs (UnaryMutator.EmitCode): When I updated
13828         LocalVariableReference.DoResolve, I overdid it, and dropped an
13829         optimization done on local variable references.
13830
13831 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
13832
13833         * ecore.cs: Convert the return from Ldlen into an int.
13834
13835 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
13836
13837         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
13838         the accessibility, this is a special case for toplevel non-public
13839         classes (internal for instance).
13840
13841 2003-10-20  Nick Drochak <ndrochak@gol.com>
13842
13843         * ecore.cs: Fix typo and build.  Needed another right paren.
13844
13845 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
13846
13847         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
13848         `internal' case regular and protected, but not allowing protected
13849         to be evaluated later.  Bug 49840
13850
13851 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
13852
13853         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
13854         to kb.Nlast, and not the kb.nFirst to isolate the switch
13855         statement.
13856
13857         Extract the underlying type, so enumerations of long/ulong are
13858         treated like long/ulong.
13859
13860 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
13861
13862         * expression.cs (New): Overload the meaning of RequestedType to
13863         track the possible creation of the NewDelegate type, since
13864         DoResolve is invoked more than once for new constructors on field
13865         initialization.
13866
13867         See bugs: #48800 and #37014
13868
13869         * cs-parser.jay (declare_local_constants): Take an arraylist
13870         instead of a single constant.
13871
13872         (local_constant_declaration): It should take a
13873         constant_declarators, not a constant_declarator.  Fixes 49487
13874
13875         * convert.cs: Fix error report.
13876
13877 2003-10-13 Jackson Harper <jackson@ximian.com>
13878
13879         * typemanager.cs (TypeToCoreType): Add float and double this fixes
13880         bug #49611
13881         
13882 2003-11-03  Martin Baulig  <martin@ximian.com>
13883
13884         * expression.cs (ArrayAccess.GetStoreOpcode): Added
13885         `out bool has_type_arg'; if set, we need to pass the type to
13886         ig.Emit().
13887         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
13888         Stelem_Any/Ldelem_Any for generic parameters.   
13889
13890 2003-11-02  Martin Baulig  <martin@ximian.com>
13891
13892         * expression.cs (Invocation.EmitCall): Use
13893         `TypeManager.IsValueType()' to check whether it's a value type.
13894         Don't set `struct_call' when calling a method on a type parameter.
13895
13896 2003-11-02  Martin Baulig  <martin@ximian.com>
13897
13898         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
13899         and removed the TypeBuilder argument.
13900
13901         * typemanager.cs (TypeManager.IsValueType): Return
13902         `t.IsGenericParameter || t.IsValueType'.
13903
13904 2003-10-25  Martin Baulig  <martin@ximian.com>
13905
13906         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
13907         call ConstructedType.Resolve() on it.
13908
13909         * generic.cs (ConstructedType.Resolve): Set `type' on success.
13910
13911 2003-10-25  Martin Baulig  <martin@ximian.com>
13912
13913         * class.cs (TypeContainer.GetClassBases): Changed
13914         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
13915         CS8214 reporting here.
13916         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
13917         instead of a `Type' for our parent.  In case of a recursive
13918         declaration (see tests/gen-23.cs for an example), our parent is a
13919         ConstructedType and it doesn't have its type set.  So, first
13920         create our own TypeBuilder, then call constructed.Resolve() to get
13921         the parent's type and finally TypeBuilder.SetParent() it.
13922
13923         * ecore.cs (TypeExpr.Name): New public virtual property.
13924
13925         * generic.cs
13926         (ConstructedType): We're now a TypeExpr and not just an Expression.
13927         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
13928         arguments here; this is done later.
13929         (ConstructedType.Resolve): New public method to resolve the type
13930         arguments and bind them.
13931
13932 2003-10-21  Martin Baulig  <martin@ximian.com>
13933
13934         * convert.cs: Use `TypeManager.IsValueType' instead of
13935         'type.IsValueType' everywhere.
13936
13937         * typemanager.cs (TypeManager.IsValueType): Return true for type
13938         parameters.  The reason for this is that we need to box a type
13939         parameter when converting it to a reference type.
13940
13941         * cs-parser.jay: Added support for default value expressions.
13942
13943         * generics.cs (DefaultValueExpression): New public class.       
13944
13945 2003-10-17  Martin Baulig  <martin@ximian.com>
13946
13947         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
13948         TypeContainer so we can also use this for Interfaces.
13949         (TypeParameter.Resolve): Likewise.
13950
13951         * interface.cs (Interface.DefineType): Added support for generic
13952         interfaces.
13953
13954         * cs-parser.jay: Added support for generic structs and interfaces.
13955
13956 2003-10-17  Martin Baulig  <martin@ximian.com>
13957
13958         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
13959         call generic methods :-)
13960
13961 2003-10-16  Martin Baulig  <martin@ximian.com>
13962
13963         * cs-parser.jay (namespace_or_type_name): Only create a
13964         GenericMemberAccess if we actually have type arguments.
13965
13966 2003-10-13  Martin Baulig  <martin@ximian.com>
13967
13968         * class.cs (Method.Define): If we're a generic method, call
13969         TypeBuilder.DefineGenericMethod () before resolving
13970         the parameters.
13971         (MethodData): Added .ctor which takes an additional MethodBuilder
13972         argument; this is used for generic methods.
13973         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
13974         we already have a MethodBuilder.
13975
13976 2003-10-10  Martin Baulig  <martin@ximian.com>
13977
13978         * class.cs (Method): Added .ctor which takes a `GenericMethod'
13979         instead of a `DeclSpace'.  This is used for generic methods.
13980
13981         * cs-parser.jay (method_header): Added support for generic
13982         methods; create a `GenericMethod' instance and pass it to the
13983         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
13984         parameters and locals.
13985
13986         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
13987         since we already have the location.  Check whether we're a generic
13988         type declaration or a generic method and create the correct type
13989         parameter.
13990
13991         * generic.cs (TypeParameter.DefineMethod): New public method.
13992         (GenericMethod): New public class; derives from DeclSpace and is
13993         used for generic methods.       
13994
13995 2003-10-09  Martin Baulig  <martin@ximian.com>
13996
13997         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
13998         to the .ctor.
13999         (MethodCore.DoDefineParameters): Removed the TypeContainer
14000         argument; use the DeclSpace which was passed to the .ctor instead.
14001         (MethodCore.CheckParameter): Take a DeclSpace instead of a
14002         TypeContainer; we only need a DeclSpace here.
14003
14004 2003-10-09  Martin Baulig  <martin@ximian.com>
14005
14006         * class.cs (MethodData): Added additional `DeclSpace ds' argument
14007         to the .ctor.
14008         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
14009         EmitContext's .ctor.    
14010
14011 2003-10-09  Martin Baulig  <martin@ximian.com>
14012
14013         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
14014         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
14015         AsAccessible(), moved them as well.
14016
14017         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
14018
14019 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
14020
14021         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
14022         generation for >=, as spotted by Paolo, bug 48679.  
14023         Patch from David Waite.
14024
14025         * cs-tokenizer.cs: Add handling for #pragma.
14026
14027         * cs-parser.jay: Allow for both yield and yield return in the
14028         syntax.  The anti-cobolization of C# fight will go on!
14029
14030         * class.cs (TypeBuilder.DefineType): Catch error condition here
14031         (Parent.DefineType erroring out and returning null).
14032
14033         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
14034         coping with enumerations variables, we were mistakenly processing
14035         them as a regular value type instead of built-in types.  Fixes the
14036         bug #48063
14037
14038         * typemanager.cs (IsBuiltinOrEnum): New method.
14039
14040 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
14041
14042         * cs-parser.jay: Upgrade: yield now needs the return clause.
14043
14044 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
14045
14046         * cs-parser.jay : Renamed yyName to yyNames related to jay.
14047
14048 2003-09-29  Martin Baulig  <martin@ximian.com>
14049
14050         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
14051         inflated generic methods.
14052
14053         * generics.cs (ConstructedType): Distinguish between open and
14054         closed constructed types; correctly resolve the arguments.
14055
14056 2003-09-22  Martin Baulig  <martin@ximian.com>
14057
14058         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
14059         all type arguments meet their constraints.
14060
14061 2003-09-19  Martin Baulig  <martin@ximian.com>
14062
14063         * decl.cs (MemberCache.SetupCacheForInterface): Take a
14064         `MemberCache parent' argument.  Normally, an interface doesn't
14065         have a parent type except System.Object, but we use this in gmcs
14066         for generic type parameters.
14067
14068 2003-09-18  Martin Baulig  <martin@ximian.com>
14069
14070         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
14071         on `type.IsInterface'; don't check whether the type has a parent
14072         to determine whether it's an interface.
14073
14074 2003-09-17  Martin Baulig  <martin@ximian.com>
14075
14076         * generic.cs (ConstructedType.ToString): Always use `name' as the
14077         type name.
14078
14079 2003-09-15  Martin Baulig  <martin@ximian.com>
14080
14081         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
14082
14083         * generic.cs (Constraints.Resolve): New public method; this is
14084         called to resolve the constraint types and to check whether all
14085         the constraints are correct.
14086         (Constraints.Types): New public property.
14087         (TypeParameter.Resolve): New public method; resolves all the
14088         type's constraints.
14089
14090         * class.cs (TypeContainer.DefineType): Call
14091         TypeParameter.Resolve() before actually defining the type.
14092
14093 2003-09-15  Martin Baulig  <martin@ximian.com>
14094
14095         * class.cs (TypeContainer.DefineType): Added an error flag to
14096         avoid reporting duplicate CS0146's ("class definition is
14097         circular.").
14098
14099         * driver.cs (Driver.MainDriver): Abort if
14100         RootContext.ResolveTree() reported any errors.
14101
14102 2003-09-07  Martin Baulig  <martin@ximian.com>
14103
14104         * report.cs (Error, Warning): Added overloaded versions which take
14105         a `params object[] args' and call String.Format().
14106
14107 2003-09-07  Martin Baulig  <martin@ximian.com>
14108
14109         * decl.cs (DeclSpace..ctor): Don't call
14110         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
14111         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
14112         (DeclSpace.RecordDecl): New method.
14113
14114         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
14115
14116 2003-09-02  Ravi Pratap  <ravi@ximian.com>
14117
14118         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
14119         value attributes to be applied to ParameterBuilders.
14120
14121         * class.cs (MethodCore.LabelParameters): Make static and more
14122         generic so that it can be used from other places - like interface
14123         methods, for instance.
14124
14125         * interface.cs (Interface.Emit): Call LabelParameters before
14126         emitting attributes on the InterfaceMethod.
14127
14128 2003-09-07  Martin Baulig  <martin@ximian.com>
14129
14130         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
14131         if the number of type parameters doesn't match.
14132
14133 2003-09-04  Martin Baulig  <martin@ximian.com>
14134
14135         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
14136         for arrays of generic type params (ie. `!0[]').
14137
14138 2003-09-04  Martin Baulig  <martin@ximian.com>
14139
14140         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
14141         for the moment.
14142
14143 2003-09-04  Martin Baulig  <martin@ximian.com>
14144
14145         * decl.cs (DeclSpace.LookupGeneric): New method.
14146         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
14147         moment.
14148
14149         * generic.cs (TypeParameterExpr): Take a TypeParameter as
14150         argument, not just a string.
14151         (TypeParameter.Define): New public method; this is called to
14152         actually define the generic parameter; after this, you can use the
14153         new `Type' property to get the type.
14154
14155 2003-09-04  Martin Baulig  <martin@ximian.com>
14156
14157         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
14158         is now an ArrayList; initialize the result of the `TypeParameters'
14159         property here.
14160         (DeclSpace.GetGenericData): Removed.
14161         (DeclSpace.LookupGeneric): Temporarily removed; we need to
14162         implement this in a different way.
14163         (DeclSpace.GetTypeParameters): Removed; there's now a
14164         `TypeParameters' property.
14165         (DeclSpace.TypeParameters): New public property.
14166
14167         * generic.cs (Constraints): Make this class public.
14168         (TypeParameter): New public class.
14169
14170 2003-09-04  Martin Baulig  <martin@ximian.com>
14171
14172         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
14173         generic parameters.
14174
14175         * class.cs (TypeContainer.DefineType): Call
14176         TypeBuilder.DefineGenericParameter () on all generic parameters if
14177         this is a generic type.
14178
14179 2003-08-28  Martin Baulig  <martin@ximian.com>
14180
14181         * sample-stack.il: Compile this with ilasm: "ilasm /dll
14182         sample-stack.il".
14183
14184         * sample-hello.cs: Compile this with gmcs: "gmcs
14185         /r:sample-stack.dll sample-hello.cs".
14186
14187 2003-08-28  Martin Baulig  <martin@ximian.com>
14188
14189         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
14190         the parameters to the generic type.
14191
14192 2003-08-28  Martin Baulig  <martin@ximian.com>
14193
14194         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
14195
14196 2003-08-28  Martin Baulig  <martin@ximian.com>
14197
14198         * cs-parser.jay (opt_type_argument_list): Use
14199         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
14200         (primary_expression): Replace `qualified_identifier' with `type_name'.
14201         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
14202
14203         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
14204         parser to check whether it is syntactically a type parameter list;
14205         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
14206         this case.
14207
14208 2003-08-26  Martin Baulig  <martin@ximian.com>
14209
14210         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
14211         resolving aliases; fixes #47927.
14212
14213 2003-08-26  Martin Baulig  <martin@ximian.com>
14214
14215         * statement.cs (Using.DoResolve): This is internally emitting a
14216         try/finally clause, so we need to set ec.NeedExplicitReturn if we
14217         do not always return.  Fixes #47681.
14218
14219 2003-08-26  Martin Baulig  <martin@ximian.com>
14220
14221         * decl.cs (MemberCore): Moved WarningNotHiding(),
14222         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
14223         into MemberBase.
14224         (AdditionResult): Make this nested in DeclSpace.
14225         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
14226         argument; call NamespaceEntry.Define() unless we're nested in a
14227         class or struct.
14228
14229         * namespace.cs (Namespace.DefineName): New public function.  This
14230         is called from DeclSpace's .ctor to add 
14231         (Namespace.Lookup): Include DeclSpaces in the lookup.
14232
14233         * class.cs (Operator): Derive from MemberBase, not MemberCore.
14234
14235         * const.cs (Const): Derive from MemberBase, not MemberCore.     
14236
14237 2003-08-25  Martin Baulig  <martin@ximian.com>
14238
14239         * convert.cs (Convert.ExplicitReferenceConversion): When
14240         converting from an interface type to a class, unbox if the target
14241         type is a struct type.  Fixes #47822.
14242
14243 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14244
14245         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
14246         #47854.
14247
14248 2003-08-22  Martin Baulig  <martin@ximian.com>
14249
14250         * class.cs (TypeManager.DefineType): When defining a nested type,
14251         call DefineType() on our parent; fixes #47801.
14252
14253 2003-08-22  Martin Baulig  <martin@ximian.com>
14254
14255         * class.cs (MethodData.Define): While checking if a method is an
14256         interface implementation, improve the test a bit more to fix #47654.
14257
14258 2003-08-22  Martin Baulig  <martin@ximian.com>
14259
14260         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
14261         correctly; fixes #47722.
14262
14263 2003-08-22  Martin Baulig  <martin@ximian.com>
14264
14265         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
14266         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
14267
14268         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
14269
14270 2003-08-22  Martin Baulig  <martin@ximian.com>
14271
14272         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
14273         can only be assigned in static constructors.  Fixes #47161.
14274
14275 2003-08-22  Martin Baulig  <martin@ximian.com>
14276
14277         Rewrote and improved the flow analysis code.
14278
14279         * flowbranching.cs (FlowBranching): Make this class abstract.
14280         (FlowBranching.CreateBranching): New static function to create a
14281         new flow branching.
14282         (FlowBranchingBlock, FlowBranchingException): New classes.
14283         (FlowBranching.UsageVector.Type): New public readonly field.
14284         (FlowBranching.UsageVector.Breaks): Removed the setter.
14285         (FlowBranching.UsageVector.Returns): Removed the setter.
14286         (FlowBranching.UsageVector): Added Break(), Return(),
14287         NeverReachable() and Throw() methods to modify the reachability.
14288         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
14289         done by FlowBranching.Merge().
14290         (FlowBranching.UsageVector.MergeChild): New method; merges the
14291         merge result into the current vector.
14292         (FlowBranching.Merge): New abstract method to merge a branching.
14293
14294 2003-08-12  Martin Baulig  <martin@ximian.com>
14295
14296         * expression.cs (Indirection.CacheTemporaries): Create the
14297         LocalTemporary with the pointer type, not its element type.
14298
14299 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
14300
14301         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
14302         token was a keyword or not.
14303
14304         Add `error' options where an IDENTIFIER was expected;  Provide
14305         CheckToken and CheckIdentifierToken convenience error reporting
14306         functions. 
14307
14308         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
14309
14310         * decl.cs: Rename `NamespaceEntry Namespace' public field into
14311         NameSpaceEntry NameSpaceEntry.
14312
14313         (LookupInterfaceOrClass): Avoid creating a full qualified name
14314         from namespace and name: avoid doing lookups when we know the
14315         namespace is non-existant.   Use new Tree.LookupByNamespace which
14316         looks up DeclSpaces based on their namespace, name pair.
14317
14318         * driver.cs: Provide a new `parser verbose' to display the
14319         exception thrown during parsing.  This is turned off by default
14320         now, so the output of a failure from mcs is more graceful.
14321
14322         * namespace.cs: Track all the namespaces defined in a hashtable
14323         for quick lookup.
14324
14325         (IsNamespace): New method
14326
14327 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
14328
14329         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
14330         we know that we need to concatenate (full typename can never be
14331         null). 
14332
14333         * class.cs: ditto.
14334
14335         * statement.cs: Use a bitfield;  Do not initialize to null things
14336         which are done by the constructor by default.
14337
14338         * cs-parser.jay: bug fix, parameter was 4, not 3.
14339
14340         * expression.cs: Just use the property;
14341
14342         * statement.cs: No need for GetVariableInfo method.
14343
14344 2003-08-08  Martin Baulig  <martin@ximian.com>
14345
14346         * flowanalysis.cs (FlowReturns): This is now nested in the
14347         `FlowBranching' class.
14348         (MyBitVector): Moved this here from statement.cs.
14349         (FlowBranching.SiblingType): New enum type.
14350         (FlowBranching.CreateSibling): Added `SiblingType' argument.
14351
14352 2003-08-07  Martin Baulig  <martin@ximian.com>
14353
14354         * flowanalysis.cs (FlowBranchingType): This is now nested in the
14355         `FlowBranching' class and called `BranchingType'.
14356
14357 2003-08-07  Martin Baulig  <martin@ximian.com>
14358
14359         * flowanalysis.cs: Moved all the control flow analysis code into
14360         its own file.
14361
14362 2003-08-07  Martin Baulig  <martin@ximian.com>
14363
14364         * assign.cs (Assign.DoResolve): `target' must either be an
14365         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
14366         #37319.
14367
14368 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
14369
14370         * expression.cs (BinaryMethod): This kind of expression is created by the
14371         Binary class if it determines that the operator has to be handled
14372         by a method.
14373
14374         (BinaryDelegate): This kind of expression is created if we are
14375         dealing with a + or - operator on delegates.
14376
14377         (Binary): remove method, argumetns, and DelegateOperator: when
14378         dealing with methods, 
14379
14380         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
14381
14382         * statement.cs (Block): use bitfields for the three extra booleans
14383         we had in use.   Remove unused topblock parameter.
14384
14385         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
14386
14387         * assign.cs: Drop extra unneeded tests.
14388
14389 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
14390
14391         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
14392
14393         * statement.cs (Foreach): Use VariableStorage instead of
14394         LocalBuilders.   
14395
14396         * codegen.cs (VariableStorage): New class used by clients that
14397         require a variable stored: locals or fields for variables that
14398         need to live across yield.
14399
14400         Maybe provide a convenience api for EmitThis+EmitLoad?
14401
14402         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
14403         these bad boys.
14404
14405 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
14406
14407         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
14408         RemapParameterLValue): New methods that are used to turn a
14409         precomputed FieldInfo into an expression like this:
14410
14411                 instance.FieldInfo
14412
14413         The idea is to use this instead of making LocalVariableReference
14414         have more than one meaning.
14415
14416         * cs-parser.jay: Add error production to BASE.
14417
14418         * ecore.cs: Deal with TypeManager.GetField returning null, which
14419         is now a valid return value.
14420
14421         (FieldExprNoAddress): New expression for Fields whose address can
14422         not be taken.
14423
14424         * expression.cs (LocalVariableReference): During the resolve
14425         phases, create new expressions if we are in a remapping context.
14426         Remove code that dealt with remapping here.
14427
14428         (ParameterReference): same.
14429
14430         (ProxyInstance): New expression, like the `This' expression, but
14431         it is born fully resolved.  We know what we are doing, so remove
14432         the errors that are targeted to user-provided uses of `this'.
14433
14434         * statement.cs (Foreach): our variable is now stored as an
14435         Expression;  During resolution, follow the protocol, dont just
14436         assume it will return this.
14437
14438 2003-08-06  Martin Baulig  <martin@ximian.com>
14439
14440         * support.cs (SeekableStreamReader.cs): New public class.
14441
14442         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14443         SeekableStreamReader instead of the normal StreamReader.
14444
14445 2003-08-04  Martin Baulig  <martin@ximian.com>
14446
14447         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14448         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14449         deambiguate casts and delegate invocations.
14450         (parenthesized_expression): Use the new tokens to ensure this is
14451         not a cast of method invocation.
14452
14453         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14454         when reading a `)' and Deambiguate_CloseParens () was previously
14455         called.
14456
14457         * expression.cs (ParenthesizedExpression): New class.  This is
14458         just used for the CS0075 test.
14459         (Binary.DoResolve): Check for CS0075.   
14460
14461 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14462
14463         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14464         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14465         reference comparison.
14466
14467         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14468         examine the ReturnType for equality - this is necessary in the
14469         cases of implicit and explicit operators whose signature also
14470         includes the return type.
14471
14472 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14473
14474         * namespace.cs: Cache the result of the namespace computation,
14475         instead of computing it every time.
14476
14477 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14478
14479         * decl.cs: Use a global arraylist that we reuse over invocations
14480         to avoid excesive memory consumption.  Reduces memory usage on an
14481         mcs compile by one meg (45 average).
14482
14483         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14484         private, work around that.
14485
14486 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14487
14488         * literal.cs (IntLiteral): Define Zero and One static literals. 
14489
14490         * cs-parser.jay (integer_literal): use static literals to reduce
14491         memory usage for the most used literals (0, 1 and -1).  211kb
14492         reduced in memory usage.
14493
14494         Replace all calls to `new ArrayList' with `new
14495         ArrayList(4)' which is a good average number for most allocations,
14496         and also requires only 16 bytes of memory for its buffer by
14497         default. 
14498
14499         This reduced MCS memory usage in seven megabytes for the RSS after
14500         bootstrapping.
14501
14502 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14503
14504         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14505         handle params methods the correct way by forming only one
14506         applicable set with params and normal methods in them. Earlier we
14507         were looking at params methods only if we found no normal methods
14508         which was not the correct thing to do.
14509
14510         (Invocation.BetterFunction): Take separate arguments indicating
14511         when candidate and the best method are params methods in their
14512         expanded form.
14513
14514         This fixes bugs #43367 and #46199.
14515
14516         * attribute.cs: Documentation updates.
14517
14518         (CheckAttribute): Rename to CheckAttributeTarget.
14519         (GetValidPlaces): Rename to GetValidTargets.
14520
14521         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14522         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14523
14524         Fixes bug #44468.
14525
14526 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14527
14528         * codegen.cs: Compute IsGeneric correctly.
14529
14530         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14531         resolution. 
14532
14533         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14534         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14535         regressions, and I was chasing more bugs than I required.
14536
14537         * interface.cs: Use expressions for base type names (like classes
14538         and structs have been doing for a while now), and resolve that.
14539         This patch should probably go into head as well.
14540
14541         This makes it one less user of FindType.
14542
14543 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14544
14545         This compiler can not self host currently.  Need to fix that.
14546         
14547         * Makefile: compile to `gmcs.exe'
14548
14549         * driver.cs: Turn on v2 by default on gmcs.
14550
14551         * generic.cs (ConstructedType): Does no longer take a container
14552         type argument;  That will be taken care of later.
14553
14554         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14555         Use SimpleName to resolve for now, so we can continue the work on
14556         the parser, until we get Type.GetType that understands generics.
14557
14558         (ConstructedType.ToString): Implement
14559
14560         (TypeArguments.Resolve): Resolve the child expressions as types. 
14561         
14562         * cs-parser.jay: Rename interface_constraints to
14563         type_parameter_constraints
14564
14565         (namespace_or_type_name): Only use constructed types for the basic
14566         construction, we will deal with identifier<...> later.
14567
14568         (type/type_name): No longer call DecomposeQI, as
14569         namespace_or_type_name is always decoded now.
14570         
14571 2003-07-22  Ravi Pratap  <ravi@ximian.com>
14572
14573         * expression.cs (Invocation.OverloadResolve): Follow the spec more
14574         closely: we eliminate methods in base types when we have an
14575         applicable method in a top-level type.
14576
14577         Please see section 14.5.5.1 for an exact description of what goes
14578         on. 
14579
14580         This fixes bug #45127 and a host of other related to corlib compilation.
14581
14582         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
14583         array is the method corresponding to the top-level type (this is
14584         because of the changes made to icall.c) so we change this
14585         accordingly.
14586
14587         (MethodGroupExpr.Name): This too.
14588
14589         * typemanager.cs (GetElementType): New method which does the right
14590         thing when compiling corlib. 
14591
14592         * everywhere: Make use of the above in the relevant places.
14593
14594 2003-07-22  Martin Baulig  <martin@ximian.com>
14595
14596         * cs-parser.jay (invocation_expression): Moved
14597         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
14598         `cast_expression', but create a InvocationOrCast which later
14599         resolves to either an Invocation or a Cast.
14600
14601         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
14602         method; call this before EmitStatement() to make sure that this
14603         expression can be used as a statement.
14604
14605         * expression.cs (InvocationOrCast): New class; resolves to either
14606         an Invocation or a Cast.
14607
14608         * statement.cs (StatementExpression): Call ResolveStatement() on
14609         the ExpressionStatement before emitting it.
14610
14611 2003-07-21  Martin Baulig  <martin@ximian.com>
14612
14613         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
14614         `ref' and `out' attributes match; fixes #46220.
14615         (MemberAccess.ResolveMemberAccess): You can't reference a type
14616         through an expression; fixes #33180.
14617         (Indexers.GetIndexersForType): Don't return the indexers from
14618         interfaces the class implements; fixes #46502.
14619
14620 2003-07-21  Martin Baulig  <martin@ximian.com>
14621
14622         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
14623         CS0661 checks; fixes bug #30442.
14624
14625 2003-07-21  Martin Baulig  <martin@ximian.com>
14626
14627         * decl.cs (AdditionResult): Added `Error'.
14628
14629         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
14630
14631         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
14632         cs0031.cs actually work.
14633
14634  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14635  
14636         * cs-parser.jay (namespace_name): do not use
14637         namespace_or_type_name, use qualified_identifier, because
14638         namespace_or_type_name will soon return a composed expression
14639         instead of a string.
14640  
14641         (namespace_or_type_name): Instead of returning a string, now this
14642         production returns an expression.
14643  
14644         * codegen.cs (EmitContext): Setup IsGeneric property based on
14645         whether our DeclSpace is generic, our the method is generic.
14646  
14647         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
14648         the method is generic.
14649  
14650         * cs-parser.jay (type_arguments, opt_type_argument_list,
14651         type_parameters, type_parameter_list, opt_type_parameter_list,
14652         type_parameter,, opt_type_parameter_constraints_clauses,
14653         type_parameter_constraints_clauses,
14654         type_parameter_constraint_clause, type_parameter_constraint,
14655         interface_constraints): Add new production
14656  
14657         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
14658         DeclSpace is generic or not.
14659  
14660         (DeclSpace.SetParameterInfo): New routine, used to set the
14661         parameter info for a type.
14662  
14663         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
14664         returns a GenericTypeExpr
14665  
14666         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
14667         generic, lookup the generic argument.
14668  
14669         * attribute.cs: Do not allow TypeParameterExpressions in
14670         Attributes.
14671  
14672         * class.cs: Do not allow the Main method to be defined in a
14673         Generic container.
14674  
14675         * expression.cs (SizeOf): Do not allow generic types to be used as
14676         arguments to sizeof.
14677  
14678         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
14679         it: whether a type is generic or not.  Only works for types we are
14680         currently building for now.
14681         
14682 2003-07-20  Martin Baulig  <martin@ximian.com>
14683
14684         * namespace.cs: Fixed that bug which caused a crash when compiling
14685         the debugger's GUI.
14686
14687 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14688
14689         * typemanager.cs (LookupTypeReflection): Never expose types which
14690         are NotPublic, NestedPrivate, NestedAssembly, or
14691         NestedFamANDAssem.  We used to return these, and later do a check
14692         that would report a meaningful error, but the problem is that we
14693         would not get the real match, if there was a name override.
14694
14695 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
14696
14697         * namespace.cs (Namespace, Name): Do not compute the namespace
14698         name dynamically, compute it in the constructor.  This reduced
14699         memory usage by 1697 KB.
14700
14701         * driver.cs: Use --pause to pause at the end.
14702
14703 2003-07-17  Peter Williams  <peter@newton.cx>
14704
14705         * Makefile: Change the name of the test target so that it doesn't
14706         conflict with the recursive test target.
14707
14708 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
14709
14710         * expression.cs (LocalVariableReference.Emit, EmitAssign,
14711         AddressOf): Do not use EmitThis, that was wrong, use the actual
14712         this pointer.
14713
14714 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
14715
14716         * class.cs (MethodData.Define): While checking if a method is an
14717         interface implementation, improve the test: If we are not public
14718         (use new test here: use the computed MethodAttributes directly,
14719         instead of the parsed modifier flags) check if the `implementing'
14720         method comes from an interface or not.
14721
14722         * pending.cs (VerifyPendingMethods): Slightly better error
14723         message.
14724
14725         * makefile: add test target that does the mcs bootstrap.
14726
14727 2003-07-16  Ravi Pratap  <ravi@ximian.com>
14728
14729         * interface.cs (Define): Do nothing here since there are no
14730         members to populate etc. Move the attribute emission out of here
14731         since this was just totally the wrong place to put it. Attribute
14732         application happens during the 'Emit' phase, not in the 'Define'
14733         phase.
14734
14735         (Emit): Add this method and move the attribute emission here
14736
14737         * rootcontext.cs (EmitCode): Call the Emit method on interface
14738         types too.
14739
14740 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14741
14742         * expression.cs (OverloadResolve): Report error only if Location
14743         is not 'Null' which means that there was a probe going on.
14744
14745 2003-07-14  Martin Baulig  <martin@ximian.com>
14746
14747         * expression.cs (ConditionalLogicalOperator): New public class to
14748         implement user defined conditional logical operators.
14749         This is section 14.11.2 in the spec and bug #40505.
14750
14751 2003-07-14  Martin Baulig  <martin@ximian.com>
14752
14753         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
14754
14755 2003-07-14  Martin Baulig  <martin@ximian.com>
14756
14757         * codegen.cs (EmitContext.InFixedInitializer): New public field.
14758
14759         * ecore.cs (IVariable.VerifyFixed): New interface method.
14760
14761         * expression.cs (Unary.ResolveOperator): When resolving the `&'
14762         operator, check whether the variable is actually fixed.  Fixes bug
14763         #36055.  Set a variable definitely assigned when taking its
14764         address as required by the spec.
14765
14766         * statement.cs (LocalInfo.IsFixed): New field.
14767         (LocalInfo.MakePinned): Set `IsFixed' to true.
14768
14769 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14770
14771         * attribute.cs (Attribute.Resolve): While doing a Member lookup
14772         for .ctors, ensure that we only ask for members declared in the
14773         attribute type (BindingFlags.DeclaredOnly).
14774
14775         Fixes bug #43632.
14776
14777         * expression.cs (Error_WrongNumArguments): Report error 1501
14778         correctly the way CSC does.
14779
14780 2003-07-13  Martin Baulig  <martin@ximian.com>
14781
14782         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
14783         lookup on the fully qualified name, to make things like "X.X" work
14784         where "X.X" is a fully qualified type name, but we also have a
14785         namespace "X" in the using list.  Fixes #41975.
14786
14787 2003-07-13  Martin Baulig  <martin@ximian.com>
14788
14789         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
14790         function. If we're a CompoundAssign, we need to create an embedded
14791         CompoundAssign, not an embedded Assign.
14792         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
14793         Fixes #45854.
14794
14795 2003-07-13  Martin Baulig  <martin@ximian.com>
14796
14797         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
14798         work to fix bug #46088.
14799
14800 2003-07-13  Ravi Pratap <ravi@ximian.com>
14801
14802         * class.cs (Operator.Emit): Do not emit attributes here - it is
14803         taken care of by the Method class that we delegate too. This takes
14804         care of bug #45876.
14805
14806 2003-07-10  Martin Baulig  <martin@ximian.com>
14807
14808         * expression.cs (TypeOfVoid): New class.
14809         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
14810
14811 2003-07-10  Martin Baulig  <martin@ximian.com>
14812
14813         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
14814         bug #35957.
14815
14816 2003-07-10  Martin Baulig  <martin@ximian.com>
14817
14818         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
14819         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
14820
14821         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
14822
14823         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
14824
14825 2003-07-10  Martin Baulig  <martin@ximian.com>
14826
14827         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
14828         of decimal.  Fixes #42850.
14829
14830         NOTE: I also fixed the created byte blob, but this doesn't work on
14831         the MS runtime and csc never produces any byte blobs for decimal
14832         arrays.
14833
14834 2003-07-10  Martin Baulig  <martin@ximian.com>
14835
14836         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
14837         structs; fixes #32068.
14838         (Block.AddChildVariableNames): Fixed #44302.
14839
14840 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14841
14842         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
14843
14844 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14845
14846         * attribute.cs: And this test is onger needed.
14847
14848 2003-07-08  Martin Baulig  <martin@ximian.com>
14849
14850         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
14851         inaccessible types.  Fixes #36313.
14852
14853         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
14854
14855         * namespace.cs (NamespaceEntry): Create implicit entries for all
14856         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
14857         implicit entries for N1.N2 and N1.
14858
14859 2003-07-08  Martin Baulig  <martin@ximian.com>
14860
14861         Rewrote the handling of namespaces to fix a lot of the issues
14862         wrt. `using' aliases etc.
14863
14864         * namespace.cs (Namespace): Splitted this class into a
14865         per-assembly `Namespace' and a per-file `NamespaceEntry'.
14866
14867         * typemanager.cs (TypeManager.IsNamespace): Removed.
14868         (TypeManager.ComputeNamespaces): Only compute namespaces from
14869         loaded assemblies here, not the namespaces from the assembly we're
14870         currently compiling.
14871
14872 2003-07-08  Martin Baulig  <martin@ximian.com>
14873
14874         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
14875
14876 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14877
14878         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
14879         already fixed it.  
14880
14881         I thought about the memory savings here, but LookupTypeReflection
14882         is used under already very constrained scenarios.  Compiling
14883         corlib or mcs only exposes one hit, so it would not really reduce
14884         any memory consumption.
14885
14886 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14887
14888         * typemanager.cs: fixes bug #45889 by only adding public types from
14889         other assemblies to the list of known types.
14890
14891 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14892
14893         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
14894         on the type we resolved.
14895
14896 2003-07-05  Martin Baulig  <martin@ximian.com>
14897
14898         * pending.cs (PendingImplementation.ParentImplements): Don't
14899         create the proxy if the parent is abstract.
14900
14901         * class.cs (TypeContainer.DefineIndexers): Process explicit
14902         interface implementations first.  Fixes #37714.
14903
14904 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
14905
14906         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
14907         defined recursively;  but since we modify the input parameters
14908         (left is set to `this' temporarily), we reset this value if the
14909         left_is_explicit is false, which gives the original semantics to
14910         the code.  
14911
14912         * literal.cs (NullPointer): new class used to represent a null
14913         literal in a pointer context.
14914
14915         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
14916         type is a pointer, use a NullPointer object instead of a
14917         NullLiteral.   Closes 43687
14918
14919         (ExplicitConversion): Convert pointer values using
14920         the conv opcode to the proper type.
14921
14922         * ecore.cs (New): change ValueTypeVariable property into a method,
14923         that returns whether the valuetype is suitable for being used.
14924
14925         * expression.cs (Binary.DoNumericPromotions): Only return if we
14926         the int constant was a valid uint, and we can return both left and
14927         right as uints.  If not, we continue processing, to trigger the
14928         type conversion.  This fixes 39018.
14929
14930         * statement.cs (Block.EmitMeta): During constant resolution, set
14931         the CurrentBlock property on the emitcontext, so that we resolve
14932         constants propertly.
14933
14934 2003-07-02  Martin Baulig  <martin@ximian.com>
14935
14936         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
14937         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
14938
14939         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
14940         than emitting it here.
14941
14942         * statement.cs: Fixed some more flow analysis bugs.
14943
14944 2003-07-02  Martin Baulig  <martin@ximian.com>
14945
14946         * class.cs (MethodData.Define): When implementing interface
14947         methods, set Final unless we're Virtual.
14948
14949         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
14950         check work for interface methods.
14951
14952 2003-07-01  Martin Baulig  <martin@ximian.com>
14953
14954         * ecore.cs (EmitContext.This): Replaced this property with a
14955         GetThis() method which takes a Location argument.  This ensures
14956         that we get the correct error location for a CS0188.
14957
14958 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
14959
14960         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
14961         ImplicitStandardConversion.
14962
14963         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
14964
14965 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
14966
14967         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
14968         optimization.
14969
14970 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
14971
14972         * class.cs (Constructor.Define): Turn off initlocals for unsafe
14973         constructors.
14974
14975         (MethodData.Define): Turn off initlocals for unsafe methods.
14976
14977 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
14978
14979         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
14980         complete;  Fixes #37521.
14981
14982         * delegate.cs: Use Modifiers.TypeAttr to compute the
14983         TypeAttributes, instead of rolling our own.  This makes the flags
14984         correct for the delegates.
14985
14986 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
14987
14988         * class.cs (Constructor.Define): Set the private flag for static
14989         constructors as well.
14990
14991         * cs-parser.jay (statement_expression): Set the return value to
14992         null, to avoid a crash when we catch an error.
14993
14994 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
14995
14996         * cs-parser.jay: Applied patch from Jackson that adds support for
14997         extern and unsafe modifiers to destructor declarations.
14998
14999         * expression.cs: Report error 21 if the user is trying to index a
15000         System.Array.
15001
15002         * driver.cs: Add an error message, suggested by the bug report.
15003
15004         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
15005         if we do not have a ": this ()" constructor initializer.  Fixes 45149
15006
15007 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
15008
15009         * namespace.cs: Add some information to reduce FAQs.
15010
15011 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
15012
15013         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
15014         underlying enumeration types.  Fixes #43915.
15015
15016         * expression.cs: Treat ushort/short as legal values to be used in
15017         bitwise operations.
15018
15019 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
15020
15021         * delegate.cs: transfer custom attributes for paramenters from
15022         the delegate declaration to Invoke and BeginInvoke.
15023
15024 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
15025
15026         * attribute.cs: handle custom marshalers and emit marshal info
15027         for fields, too.
15028
15029 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
15030
15031         * makefile.gnu: Added anonymous.cs to the compiler sources.
15032
15033 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
15034
15035         * iterators.cs: Change the name of the proxy class to include two
15036         underscores.
15037
15038         * cs-parser.jay: Update grammar to include anonymous methods.
15039
15040         * anonymous.cs: new file.
15041
15042 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
15043
15044         * class.cs (Field.Define): Add missing test for pointers and
15045         safety. 
15046
15047 2003-05-27  Ravi Pratap  <ravi@ximian.com>
15048
15049         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
15050         we use the stobj opcode.
15051
15052         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
15053         since it wasn't the correct fix. 
15054
15055         It still is puzzling that we are required to use stobj for IntPtr
15056         which seems to be a ValueType.
15057
15058 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
15059
15060         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
15061         during regular simple name resolution.   Now, the trick is that
15062         instead of returning for processing the simplename, we do a
15063         TypeManager.LookupType (ie, a rooted lookup as opposed to a
15064         contextual lookup type).   If a match is found, return that, if
15065         not, return for further composition.
15066
15067         This fixes long-standing 30485.
15068
15069         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15070         using the address to initialize an object, do an Stobj instead of
15071         using the regular Stelem.
15072
15073         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
15074         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
15075         Because if we are a BaseIndexerAccess that value will be true.
15076         Fixes 43643.
15077
15078         * statement.cs (GotoCase.Resolve): Return after reporting an
15079         error, do not attempt to continue. 
15080
15081         * expression.cs (PointerArithmetic.Emit): If our operand is a
15082         long, convert our constants to match the operand before
15083         multiplying.  Convert to I type before adding.   Fixes 43670.
15084
15085 2003-05-14  Ravi Pratap  <ravi@ximian.com>
15086
15087         * enum.cs (ImplicitConversionExists) : Rename to
15088         ImplicitEnumConversionExists to remove ambiguity. 
15089
15090         * ecore.cs (NullCast): New type of cast expression class which
15091         basically is very similar to EmptyCast with the difference being
15092         it still is a constant since it is used only to cast a null to
15093         something else
15094         (eg. (string) null)
15095
15096         * convert.cs (ImplicitReferenceConversion): When casting a null
15097         literal, we return a NullCast.
15098
15099         * literal.cs (NullLiteralTyped): Remove - I don't see why this
15100         should be around anymore.
15101
15102         The renaming (reported was slightly wrong). Corrections:
15103
15104         ConvertImplicitStandard -> ImplicitConversionStandard
15105         ConvertExplicitStandard -> ExplicitConversionStandard
15106
15107         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
15108         before passing them in !
15109
15110         * convert.cs (ImplicitConversionStandard): When comparing for
15111         equal expr and target types, ensure that expr is not a
15112         NullLiteral.
15113
15114         In general, we must not be checking (expr_type ==
15115         target_type) in the top level conversion methods
15116         (ImplicitConversion, ExplicitConversion etc). This checking is
15117         done in the methods that they delegate to.
15118
15119 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
15120
15121         * convert.cs: Move Error_CannotConvertType,
15122         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
15123         ImplicitNumericConversion, ImplicitConversionExists,
15124         ImplicitUserConversionExists, StandardConversionExists,
15125         FindMostEncompassedType, FindMostSpecificSource,
15126         FindMostSpecificTarget, ImplicitUserConversion,
15127         ExplicitUserConversion, GetConversionOperators,
15128         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
15129         TryImplicitIntConversion, Error_CannotConvertImplicit,
15130         ConvertImplicitRequired, ConvertNumericExplicit,
15131         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
15132         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
15133         its own file.
15134
15135         Perform the following renames:
15136
15137         StandardConversionExists -> ImplicitStandardConversionExists
15138         ConvertImplicit -> ImplicitConversion
15139         ConvertImplicitStandard -> ImplicitStandardConversion
15140         TryImplicitIntConversion -> ImplicitIntConversion
15141         ConvertImplicitRequired -> ImplicitConversionRequired
15142         ConvertNumericExplicit -> ExplicitNumericConversion
15143         ConvertReferenceExplicit -> ExplicitReferenceConversion
15144         ConvertExplicit -> ExplicitConversion
15145         ConvertExplicitStandard -> ExplicitStandardConversion
15146
15147 2003-05-19  Martin Baulig  <martin@ximian.com>
15148
15149         * statement.cs (TypeInfo.StructInfo): Made this type protected.
15150         (TypeInfo): Added support for structs having structs as fields.
15151
15152         * ecore.cs (FieldExpr): Implement IVariable.
15153         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
15154         VariableInfo for the field.
15155
15156 2003-05-18  Martin Baulig  <martin@ximian.com>
15157
15158         * expression.cs (This.DoResolve): Report a CS0027 if we're
15159         emitting a field initializer.
15160
15161 2003-05-18  Martin Baulig  <martin@ximian.com>
15162
15163         * expression.cs (This.ResolveBase): New public function.
15164         (This.DoResolve): Check for CS0188.
15165
15166         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
15167         This.Resolve().
15168
15169         * ecore.cs (MethodGroupExpr.DoResolve): Set the
15170         `instance_expression' to null if we don't have any non-static
15171         methods.
15172
15173 2003-05-18  Martin Baulig  <martin@ximian.com>
15174
15175         Reworked the way how local variables and parameters are handled by
15176         the flow analysis code.
15177
15178         * statement.cs (TypeInfo, VariableMap): New public classes.
15179         (VariableInfo): New public class.  This is now responsible for
15180         checking whether a variable has been assigned.  It is used for
15181         parameters and local variables.
15182         (Block.EmitMeta): Take the InternalParameters as argument; compute
15183         the layout of the flow vectors here.
15184         (Block.LocalMap, Block.ParameterMap): New public properties.
15185         (FlowBranching): The .ctor doesn't get the InternalParameters
15186         anymore since Block.EmitMeta() now computes the layout of the flow
15187         vector.
15188         (MyStructInfo): This class is now known as `StructInfo' and nested
15189         in `TypeInfo'; we don't access this directly anymore.
15190
15191         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
15192         property and removed IsAssigned(), IsFieldAssigned(),
15193         SetAssigned() and SetFieldAssigned(); we now call them on the
15194         VariableInfo so we don't need to duplicate this code everywhere.
15195
15196         * expression.cs (ParameterReference): Added `Block block' argument
15197         to the .ctor.
15198         (LocalVariableReference, ParameterReference, This): The new
15199         VariableInfo class is now responsible for all the definite
15200         assignment stuff.
15201
15202         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
15203         IsParameterAssigned, SetParameterAssigned): Removed.
15204
15205 2003-05-18  Martin Baulig  <martin@ximian.com>
15206
15207         * typemanager.cs (InitCoreTypes): Try calling
15208         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
15209         the 3-args-version.  Corlib now also needs our `void_type'.
15210         (GetMethod): Added overloaded version which takes an optional
15211         `bool report_errors' to allow lookups of optional methods.
15212
15213 2003-05-12  Martin Baulig  <martin@ximian.com>
15214
15215         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
15216         only used for locals and not for parameters.
15217
15218 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
15219
15220         * support.cs (InternalParameters.ParameterType): Return the
15221         ExternalType of the parameter.
15222
15223         * parameter.cs (Parameter.ExternalType): drop the two arguments,
15224         they were unused.
15225
15226 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
15227
15228         * class.cs (MethodData.Define): Do not set the `newslot' on
15229         interface members, if they are also flagged as "override".
15230
15231         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
15232         better code for ++i and i++.  This only works for static fields
15233         and local variables.
15234
15235         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
15236         want to pull the DeclSpace out of the builder_to_declspace instead
15237         of the TypeBuilder (like in TypeContainer.FindMembers).
15238
15239         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
15240         instead of LookupTypeContainer.  Fixes the crash on .NET for
15241         looking up interface members.
15242
15243         * const.cs: Create our own emit context during the Definition
15244         stage, so that constants are evaluated in the proper context, when
15245         a recursive definition happens.
15246
15247 2003-05-11  Martin Baulig  <martin@ximian.com>
15248
15249         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
15250         new block for a switch section.
15251         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
15252         the adding/lookup in the switch block.  Fixes #39828.
15253
15254 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
15255
15256         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
15257         functionality: I needed to convert the data after I had performed
15258         the add/sub operation into the operands type size.
15259
15260         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
15261         pass the type for the box operation, otherwise the resulting
15262         object would have been of type object.
15263
15264         (BoxedCast): Add constructor to specify the type to box as.
15265
15266 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
15267
15268         * iterators.cs: I was reusing the `count' variable inadvertently,
15269         take steps to not allow this to happen.
15270
15271 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
15272
15273         * attribute.cs (Attribute.Resolve): Params attributes are encoded
15274         by creating an array at the point where the params starts and
15275         putting all those arguments there, then adjusting the size of the
15276         array.
15277
15278 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
15279
15280         * expression.cs (New.AddressOf): Implement interface
15281         IMemoryLocation.  This is used when the `new' operator is used in
15282         the context of an invocation to a method on a value type.
15283
15284         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
15285         example. 
15286
15287         * namespace.cs: Also check the using aliases here.
15288
15289         * driver.cs: Move the test for using validity after the types have
15290         been entered, so we do a single pass that also includes the using
15291         aliases. 
15292
15293         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
15294         in the regular case.   CreateSiblingForFinally is doing extra
15295         error checking.
15296
15297         * attribute.cs (GetAttributeArgumentExpression): Store the result
15298         on an out value, and use the return value to indicate failure
15299         instead of using null (which is a valid return for Constant.GetValue).
15300
15301         * statement.cs: Perform the analysis flow for the increment
15302         portion after the statement, because this will be the real flow of
15303         execution.  Fixes #42385
15304
15305         * codegen.cs (EmitContext.EmitArgument,
15306         EmitContext.EmitStoreArgument): New helper functions when the
15307         RemapToProxy flag is set.
15308
15309         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
15310         function.
15311
15312         Add support for remapping parameters. 
15313
15314         * iterators.cs: Propagate parameter values;  Store parameter
15315         values in the proxy classes.
15316
15317 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
15318
15319         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
15320         need a proxy reference;  I do not know what I was thinking
15321
15322         * cs-parser.jay (constructor_initializer): catch another error,
15323         and display nice message.
15324
15325         (field_declaration): catch void field declaration
15326         to flag a better error. 
15327
15328         * class.cs (MemberBase.CheckBase): Report an error instead of a
15329         warning if a new protected member is declared in a struct. 
15330         (Field.Define): catch the error of readonly/volatile.
15331
15332         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
15333
15334         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
15335         volatile variable is taken
15336
15337 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
15338
15339         * statement.cs (Fixed.Resolve): Report an error if we are not in
15340         an unsafe context.
15341
15342 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
15343
15344         * typemanager.cs: reuse the code that handles type clashes for
15345         delegates and enumerations.
15346
15347         * class.cs (Report28): Always report.
15348
15349         * expression.cs (EncodeAsAttribute): Allow nulls here.
15350
15351 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
15352
15353         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
15354         the functionality for testing whether an expression is valid for
15355         an attribute here.  Also handle the case of arrays of elements
15356         being stored. 
15357
15358         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
15359         encoding a linear array into an array of objects that are suitable
15360         to be passed to an CustomAttributeBuilder.
15361
15362         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
15363
15364         * ecore.cs: (FieldExpr): Handle field remapping here.
15365
15366         * iteratators.cs: Pass the instance variable (if the method is an
15367         instance method) to the constructors, so we can access the field
15368         variables on the class.
15369
15370         TODO: Test this with structs.  I think the THIS variable on
15371         structs might have to be a pointer, and not a refenrece
15372
15373 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
15374
15375         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
15376         local variables to fields in a proxy class.
15377
15378         * iterators.cs (PopulateProxy): Rename our internal fields to
15379         <XXX>.  
15380         Create a <THIS> field if we are an instance method, so we can
15381         reference our parent container variables.
15382         (MapVariable): Called back from the EmitContext code to enter a
15383         new variable to field mapping into the proxy class (we just create
15384         a FieldBuilder).
15385
15386         * expression.cs
15387         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
15388         for using the remapped locals to fields.
15389
15390         I placed the code here, because that gives the same semantics to
15391         local variables, and only changes the Emit code.
15392
15393         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
15394         statements inside iterators.
15395         (VariableInfo): Add a FieldBuilder for the cases when we are
15396         remapping local variables to fields in a proxy class
15397
15398         * ecore.cs (SimpleNameResolve): Avoid testing two times for
15399         current_block != null.
15400
15401         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
15402         not cope with strings, as it has been moved to the
15403         TableSwitchEmit.  Fixed bug in switch generation.
15404
15405         * expression.cs (New.DoResolve): Provide more context for the user
15406         when reporting an error.
15407
15408         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
15409         pointers. 
15410
15411         * expression.cs (MemberAccess.DoResolve): When we get a type back,
15412         check the permissions for it.  Note than in a type-resolution
15413         context the check was already present in DeclSpace.ResolveType,
15414         but was missing from the MemberAccess.
15415
15416         (ArrayCreation.CheckIndices): warn if the user has
15417         more nested levels of expressions, but there are no more
15418         dimensions specified.  Avoids crash on bug 41906.
15419
15420 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
15421
15422         * statement.cs (Block): replace Implicit bool, for a generic
15423         flags.   
15424         New flag: `Unchecked'.  This is used during the EmitMeta phase
15425         (which is out-of-line with the regular Resolve/Emit process for a
15426         statement, as this is done ahead of time, but still gets a chance
15427         to call constant resolve).
15428
15429         (Block.Flags): new enum for adding a new flag.
15430
15431         (Block.EmitMeta): track the state of unchecked.
15432
15433         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
15434         to enable constant resolution to work there as well.
15435
15436 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
15437
15438         * typemanager.cs (ienumerable_type): Also look up
15439         System.Collections.IEnumerable. 
15440
15441 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
15442
15443         TODO: Test more than one conditional per method.
15444
15445         * class.cs (Indexer.Define): Report the location where the user is
15446         referencing the unsupported feature.
15447
15448         (MethodData): Overload the use of `conditionals' to
15449         minimize the creation of needless ArrayLists.   This saves roughly
15450         212kb on my machine.
15451
15452         (Method): Implement the new IIteratorContainer interface.
15453         (Method.SetYields): Implement the method by setting the ModFlags
15454         to contain METHOD_YIELDS.
15455
15456         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15457         which just got set to null.
15458
15459         * iterators.cs: New file.
15460
15461         (Yield, YieldBreak): New statements.
15462
15463         * statement.cs (Return.Resolve): Flag an error if we are used in
15464         an iterator method.
15465
15466         * codegen.cs (InIterator): New flag set if the code is being
15467         compiled in an iterator method.
15468
15469         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15470         internal modifier, and we just use it to avoid adding extra
15471         fields, as this is seldom used.  
15472
15473         * cs-parser.jay: Add yield_statement (yield and yield break).
15474
15475         * driver.cs: New flag -v2 to turn on version 2 features. 
15476
15477         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15478         hashtable when v2 is enabled.
15479
15480 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15481
15482         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15483         there is already a namespace defined with this name.
15484
15485         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15486         people upgraded their corlibs.
15487
15488         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15489         always use fully qualified types, no need to use the compiler
15490         front end.
15491
15492         (TypeManager.IsNamespace): Use binarysearch.
15493
15494         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15495         AddDelegate): I did not quite use the new IsValid API properly: I
15496         have to pass the short-name and the fullname.  I was passing only
15497         the basename instead of the fullname sometimes. 
15498
15499         (TypeContainer.DefineType): call NamespaceClash.
15500
15501         * interface.cs (Interface.DefineType): use NamespaceClash before
15502         defining the type.
15503
15504         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15505         defining the type.
15506
15507         * enum.cs: (Enum.DefineType): use NamespaceClash before
15508         defining the type.
15509
15510         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15511         speed increase.  First, use the negative_hits cache when we get a
15512         negative.  Second, add the type with its full original name
15513         instead of the new . and + encoded name (reflection uses + to
15514         separate type from a nested type).  Use LookupTypeReflection
15515         directly which bypasses the type->name hashtable (that we already
15516         know does not contain the type.
15517
15518         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15519         location/container type. 
15520
15521         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15522
15523 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15524
15525         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15526
15527         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15528         method is being referenced in the method group from a static
15529         context, and report error 120 if so.
15530
15531         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15532         Error118. 
15533
15534         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15535         is created, we create the A namespace).
15536
15537         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15538         Fixes #41591
15539
15540 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15541
15542         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15543         invocation to ModuleBuilder.GetType with the same values will
15544         return a new type instance, so we need to cache its return
15545         values. 
15546
15547         * expression.cs (Binary.ResolveOperator): Only allow the compare
15548         operators on enums if they are of the same type.
15549
15550         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15551         types of ValueType on their own case.  Before we were giving them
15552         the same treatment as objects.
15553
15554         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15555         fullname.  Short name is used to compare against container name.
15556         Fullname is used to check against defined namespace names.
15557
15558         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15559         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15560
15561         (Method.CheckBase): Call parent.
15562         (MemberBase.CheckBase): Check for protected members on sealed
15563         classes.
15564         (PropertyBase.CheckBase): Call parent.
15565         (Field.Define): Call parent.
15566
15567         * report.cs: Negative error codes are now mapped to 8000 - code,
15568         so that the display is render more nicely.
15569
15570         * typemanager.cs: Do not use try/catch, instead report a regular
15571         error. 
15572
15573         (GetPointerType, GetReferenceType): These methods provide
15574         mechanisms to obtain the T* and T& from a T.  We had the code
15575         previously scattered around the code base, and it also used
15576         TypeManager.LookupType that would go through plenty of caches.
15577         This one goes directly to the type source.
15578
15579         In some places we did the Type.GetType followed by
15580         ModuleBuilder.GetType, but not in others, so this unifies the
15581         processing as well.
15582
15583         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
15584         statements now that we have namespace information.
15585
15586         * typemanager.cs (IsNamespace): New method, returns whether the
15587         string presented is a namespace or not.
15588
15589         (ComputeNamespaces): New public entry point, computes the list of
15590         available namespaces, using the GetNamespaces API call in Mono, or
15591         the slower version in MS.NET.   
15592
15593         Now before we start the semantic analysis phase, we have a
15594         complete list of namespaces including everything that the user has
15595         provided.
15596
15597         Deleted old code to cache namespaces in .nsc files.
15598
15599 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
15600
15601         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
15602         class/struct location definition Location for the implicit
15603         constructor location.
15604
15605         (Operator.Define): Use the location of the operator for the
15606         implicit Method definition.
15607
15608         (Constructor.Emit): use the constructor location for the implicit
15609         base initializer constructor.
15610
15611         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
15612         and the Expression class now contains two new methods:
15613
15614         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
15615         isolate type lookup from the rest of the resolution process.
15616
15617         Since we use Expressions to hold type definitions due to the way
15618         we parse the input we have historically overloaded Resolve to
15619         perform the Type lookups if a special flag is passed.  Now this is
15620         eliminated and two methods take their place. 
15621
15622         The differences in the two methods between xStep and xTerminal is
15623         that xStep is involved in our current lookup system that uses
15624         SimpleNames to compose a name, while xTerminal is used just to
15625         catch the case where the simplename lookup failed.
15626
15627 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
15628
15629         * expression.cs (ResolveMemberAccess): Remove redundant code.
15630         TypeExpr expressions are always born fully resolved.
15631
15632         * interface.cs (PopulateMethod): Do not lookup the types twice.
15633         We were doing it once during SemanticAnalysis and once during
15634         PopulateMethod.
15635
15636         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
15637         in local variable type definitions, were being returned as a
15638         SimpleName (we decomposed everything into a string), that is
15639         because primary_expression was being used instead of a type in the
15640         grammar (reduce/reduce conflicts).
15641
15642         The part that was wrong is that we converted the expression into a
15643         string (an oversimplification in one hand, compounded with primary
15644         expressions doing string concatenation).
15645
15646         So things like:
15647
15648         A.B.C [] x;
15649
15650         Would return "A.B.C[]" as a SimpleName.  This stopped things like
15651         using clauses from working on this particular context.  And a type
15652         was being matched directly against "A.B.C[]".
15653
15654         We now use the correct approach, and allow for ComposedCast to be
15655         part of the unary expression.  So the "A.B.C []" become a composed
15656         cast of "A.B.C" (as a nested group of MemberAccess with a
15657         SimpleName at the end) plus the rank composition "[]". 
15658
15659         Also fixes 35567
15660
15661 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
15662
15663         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
15664         for the access level checking.
15665
15666         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
15667         `TypeContainer container', because I kept getting confused when I
15668         was debugging this code.
15669
15670         * expression.cs (Indexers): Instead of tracking getters/setters,
15671         we now track them in parallel.  We create one arraylist less, but
15672         most importantly it is possible now for the LValue code to find a
15673         matching get for a set.
15674
15675         (IndexerAccess.DoResolveLValue): Update the code.
15676         GetIndexersForType has been modified already to extract all the
15677         indexers from a type.  The code assumed it did not.
15678
15679         Also make the code set the correct return type for the indexer.
15680         This was fixed a long time ago for properties, but was missing for
15681         indexers.  It used to be void_type.
15682
15683         (Binary.Emit): Test first for doubles instead of
15684         floats, as they are more common.
15685
15686         (Binary.EmitBranchable): Use the .un version of the branch opcodes
15687         when dealing with floats and the <=, >= operators.  This fixes bug
15688         #39314 
15689
15690         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
15691         to load the array value by emitting a load on the foreach variable
15692         type.  This was incorrect.  
15693
15694         We now emit the code to load an element using the the array
15695         variable type, and then we emit the conversion operator.
15696
15697         Fixed #40176
15698
15699 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
15700
15701         * attribute.cs: Avoid allocation of ArrayLists in the common case.
15702
15703 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
15704
15705         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
15706         test for protection before we test for signatures. 
15707
15708         (MethodSignature.ToString): implement.
15709
15710         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
15711         to the case where we reduced into a LongConstant.
15712
15713         * decl.cs (CheckAccessLevel): If the type is an array, we can not
15714         depend on whether the information is acurrate, because the
15715         Microsoft runtime will always claim that the array type is public,
15716         regardless of the real state.
15717
15718         If the type is a pointer, another problem happens: the type is
15719         reported as non-public in Microsoft.  
15720
15721         In both cases we have to call CheckAccessLevel recursively with
15722         the underlying type as the argument to be tested.
15723
15724 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
15725
15726         * assign.cs (Assign.Emit): If we are dealing with a compound
15727         assignment expression, we should use the code path that stores the
15728         intermediate result in a temporary value.  This fixes #40903.
15729
15730         *expression.cs (Indirection.ToString): Provide ToString method for
15731         debugging. 
15732
15733 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
15734
15735         * class.cs: Null out fields holding references to Block objects so
15736         they can be garbage collected.
15737
15738         * expression.cs (OverloadResolve): Remove unused local.
15739
15740 2003-04-07  Martin Baulig  <martin@ximian.com>
15741
15742         * codegen.cs (EmitContext.CurrentFile): New public field.
15743         (EmitContext.Mark): Use the CurrentFile to check whether the
15744         location is in the correct file.
15745         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
15746
15747 2003-04-07  Martin Baulig  <martin@ximian.com>
15748
15749         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
15750
15751         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
15752         location.  [FIXME: The location argument which gets passed to this
15753         method is sometimes wrong!]
15754
15755 2003-04-07  Nick Drochak <ndrochak@gol.com>
15756
15757         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
15758
15759 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
15760
15761         * expression.cs (Indirection.EmitAssign): We were using the
15762         temporary, but returning immediately instead of continuing the
15763         EmitAssing flow.
15764
15765 2003-04-06  Martin Baulig  <martin@ximian.com>
15766
15767         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
15768         if it's a nested child, but also deriving from the outer class.
15769         See test 190.cs.
15770
15771         * typemanager.cs (IsNestedChildOf): Make this work if it's a
15772         nested child, but also deriving from the outer class.  See
15773         test-190.cs.
15774         (FilterWithClosure): We may access private members of the outer
15775         class if we're a nested child and deriving from the outer class.
15776         (RealMemberLookup): Only set `closure_private_ok' if the
15777         `original_bf' contained BindingFlags.NonPublic.
15778
15779 2003-04-05  Martin Baulig  <martin@ximian.com>
15780
15781         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
15782         probe if its a type parameter, and if so, flag an error.
15783
15784         * decl.cs: Move here the SetParameterInfo code from class.cs.
15785         Handle IsGeneric here.
15786
15787         Handle a variety of errors in the parameter info definition.
15788
15789         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
15790         type parameters here.
15791
15792         * cs-parser.jay (class_declaration): report errors for parameters
15793         here as well.
15794
15795 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
15796
15797         * generic.cs: New file, contains support code for generics.
15798
15799         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
15800         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
15801
15802         Update parser for the above removals.
15803
15804         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
15805         now taken care of in the parser.
15806
15807 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
15808
15809         * class.cs (Event.Define): Do not allow abstract events to have
15810         initializers. 
15811
15812 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
15813
15814         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
15815         block in event declarations.
15816
15817         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
15818         value type, get its address.
15819
15820         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
15821         leaving a class on the stack instead of a boolean value (int
15822         0/1).  Change the code so we compare against null, and then the
15823         result against zero.
15824
15825         * class.cs (TypeContainer.GetClassBases): We were checking for the
15826         parent class being sealed too late.
15827
15828         * expression.cs (Binary.Emit): For <= and >= when dealing with
15829         floating point values, use cgt.un and clt.un instead of cgt and
15830         clt alone.
15831
15832 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
15833
15834         * statement.cs: Apply the same optimization as MS: skip the 
15835         GetEnumerator returning an IEnumerator, and use the one returning a 
15836         CharEnumerator instead. This allows us to avoid the try-finally block 
15837         and the boxing.
15838
15839 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
15840
15841         * cs-parser.jay: Attributes cannot be applied to
15842                          namespaces. Fixes #40473
15843
15844 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15845
15846         * class.cs:
15847         (Add*): check if the name is valid using the full name for constants,
15848         fields, properties and events.
15849
15850 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
15851
15852         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
15853         char constants to be part of the enumeration.
15854
15855         * expression.cs (Conditional.DoResolve): Add support for operator
15856         true. Implements the missing functionality from 14.12
15857
15858         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
15859         operator true/false as required by the spec.
15860
15861         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
15862         implicit conversion to boolean.
15863
15864         * statement.cs (Statement.ResolveBoolean): A boolean expression is
15865         also one where the type implements `operator true'. 
15866
15867         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
15868         get an expression that will invoke operator true based on an
15869         expression.  
15870
15871         (GetConversionOperators): Removed the hack that called op_True
15872         here.  
15873
15874         (Expression.ResolveBoolean): Move this from Statement.
15875
15876 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
15877
15878         * ecore.cs (FieldExpr): do not allow initialization of initonly
15879         fields on derived classes
15880
15881 2003-03-13  Martin Baulig  <martin@ximian.com>
15882
15883         * statement.cs (Block.Emit): Call ig.BeginScope() and
15884         ig.EndScope() when compiling with debugging info; call
15885         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
15886
15887 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
15888
15889         * expression.cs (Indexers): Do not construct immediately, allow
15890         for new members to be appended as we go.  Fixes 38143
15891
15892 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15893
15894         * expression.cs: save/restore context when resolving an unchecked
15895         expression.
15896
15897 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
15898
15899         * cfold.cs: Catch division by zero in modulus operator during
15900         constant folding.
15901
15902 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
15903
15904         * interface.cs (Interface.DefineMembers): Avoid defining members
15905         twice. 
15906
15907 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
15908
15909         * driver.cs: handle the +/- options for -noconfig
15910
15911         * statement.cs (Unckeched.Resolve): Also track the state of
15912         unchecked in the Resolve phase.
15913
15914 2003-02-27  Martin Baulig  <martin@ximian.com>
15915
15916         * ecore.cs (Expression.MemberLookup): Don't create a
15917         MethodGroupExpr for something which is not a method.  Fixes #38291.
15918
15919 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
15920
15921         * class.cs (MemberBase.CheckParameters): Also check that the type
15922         is unmanaged if it is a pointer.
15923
15924         * expression.cs (SizeOf.Resolve): Add location information.
15925
15926         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
15927         a managed type is declared.
15928
15929         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
15930         parameter modifiers as well.  Fixes bug 38606
15931
15932         * class.cs: Very sad.  Am backing out the speed up changes
15933         introduced by the ArrayList -> Array in the TypeContainer, as they
15934         were not actually that much faster, and introduced a bug (no error
15935         reports on duplicated methods).
15936
15937         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
15938         source first, this will guarantee that we have a valid expression
15939         before calling in lower levels functions that will require a
15940         resolved object.  Then use this original_source in the
15941         target.ResolveLValue instead of the original source that was
15942         passed to us.
15943
15944         Another change.  Use target.Resolve instead of LValueResolve.
15945         Although we are resolving for LValues, we will let the Assign code
15946         take care of that (it will be called again from Resolve).  This
15947         basically allows code like this:
15948
15949         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
15950         class Y { void A (X x) { x [0] += o; }
15951
15952         The problem was that the indexer was trying to resolve for
15953         set_Item (idx, object o) and never finding one.  The real set_Item
15954         was set_Item (idx, X).  By delaying the process we get the right
15955         semantics. 
15956
15957         Fixes bug 36505
15958
15959 2003-02-23  Martin Baulig  <martin@ximian.com>
15960
15961         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
15962         while calling DoEmit ().
15963
15964         * codegen.cs (EmitContext.Mark): Don't mark locations in other
15965         source files; if you use the #line directive inside a method, the
15966         compiler stops emitting line numbers for the debugger until it
15967         reaches the end of the method or another #line directive which
15968         restores the original file.
15969
15970 2003-02-23  Martin Baulig  <martin@ximian.com>
15971
15972         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
15973
15974 2003-02-23  Martin Baulig  <martin@ximian.com>
15975
15976         * statement.cs (Block.AddChildVariableNames): We need to call this
15977         recursively, not just for our immediate children.
15978
15979 2003-02-23  Martin Baulig  <martin@ximian.com>
15980
15981         * class.cs (Event.Define): Always make the field private, like csc does.
15982
15983         * typemanager.cs (TypeManager.RealMemberLookup): Make events
15984         actually work, fixes bug #37521.
15985
15986 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
15987
15988         * delegate.cs: When creating the various temporary "Parameters"
15989         classes, make sure that we call the ComputeAndDefineParameterTypes
15990         on those new parameters (just like we do with the formal ones), to
15991         allow them to be resolved in the context of the DeclSpace.
15992
15993         This fixes the bug that Dick observed in Bugzilla #38530.
15994
15995 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
15996
15997         * expression.cs (ResolveMemberAccess): When resolving a constant,
15998         do not attempt to pull a constant if the value was not able to
15999         generate a valid constant.
16000
16001         * const.cs (LookupConstantValue): Do not report more errors than required.
16002
16003 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16004
16005         * expression.cs: fixes bug #38328.
16006
16007 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16008
16009         * class.cs: Changed all the various members that can be part of a
16010         class from being an ArrayList to be an Array of the right type.
16011         During the DefineType type_list, interface_list, delegate_list and
16012         enum_list are turned into types, interfaces, delegates and enums
16013         arrays.  
16014
16015         And during the member population, indexer_list, event_list,
16016         constant_list, field_list, instance_constructor_list, method_list,
16017         operator_list and property_list are turned into their real arrays.
16018
16019         Although we could probably perform this operation earlier, for
16020         good error reporting we need to keep the lists and remove the
16021         lists for longer than required.
16022
16023         This optimization was triggered by Paolo profiling the compiler
16024         speed on the output of `gen-sample-program.pl' perl script. 
16025
16026         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
16027         not crash in methods like MemberLookupFailed that use this field.  
16028
16029         This problem arises when the compiler fails to resolve a type
16030         during interface type definition for example.
16031
16032 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16033
16034         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
16035         inherit from System.Object, so we have to stop at null, not only
16036         when reaching System.Object.
16037
16038 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
16039
16040         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
16041         DeclaredOnly because the parent indexer might have had a different
16042         name, but did not loop until the top of the hierarchy was reached.
16043
16044         The problem this one fixes is 35492: when a class implemented an
16045         indexer from an interface, we were getting the interface method
16046         (which was abstract) and we were flagging an error (can not invoke
16047         abstract method).
16048
16049         This also keeps bug 33089 functioning, and test-148 functioning.
16050
16051         * typemanager.cs (IsSpecialMethod): The correct way of figuring
16052         out if a method is special is to see if it is declared in a
16053         property or event, or whether it is one of the predefined operator
16054         names.   This should fix correctly #36804.
16055
16056 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
16057
16058         The goal here is to remove the dependency on EmptyCast.Peel ().
16059         Killing it completely.
16060
16061         The problem is that currently in a number of places where
16062         constants are expected, we have to "probe" for an EmptyCast, and
16063         Peel, which is not the correct thing to do, as this will be
16064         repetitive and will likely lead to errors. 
16065
16066         The idea is to remove any EmptyCasts that are used in casts that
16067         can be reduced to constants, so we only have to cope with
16068         constants. 
16069
16070         This bug hunt was triggered by Bug 37363 and the desire to remove
16071         the duplicate pattern where we were "peeling" emptycasts to check
16072         whether they were constants.  Now constants will always be
16073         constants.
16074
16075         * ecore.cs: Use an enumconstant here instead of wrapping with
16076         EmptyCast.  
16077
16078         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
16079         throwing me off.  By handling this we can get rid of a few hacks.
16080
16081         * statement.cs (Switch): Removed Peel() code.
16082
16083 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
16084
16085         * class.cs: Location information for error 508
16086
16087         * expression.cs (New.DoResolve): Add a guard against double
16088         resolution of an expression.  
16089
16090         The New DoResolve might be called twice when initializing field
16091         expressions (see EmitFieldInitializers, the call to
16092         GetInitializerExpression will perform a resolve on the expression,
16093         and later the assign will trigger another resolution
16094
16095         This leads to bugs (#37014)
16096
16097         * delegate.cs: The signature for EndInvoke should contain any ref
16098         or out parameters as well.  We were not doing this in the past. 
16099
16100         * class.cs (Field.Define): Do not overwrite the type definition
16101         inside the `volatile' group.  Turns out that volatile enumerations
16102         were changing the type here to perform a validity test, which
16103         broke conversions. 
16104
16105 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
16106
16107         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
16108         and structs, we do not want to load the instance variable
16109
16110         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
16111         enum_type has to be handled like an object reference (implicit
16112         conversions exists from this to object), but the regular IsClass
16113         and IsValueType tests will never return true for this one.
16114
16115         Also we use TypeManager.IsValueType instead of type.IsValueType,
16116         just for consistency with the rest of the code (this is only
16117         needed if we ever use the construct exposed by test-180.cs inside
16118         corlib, which we dont today).
16119
16120 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
16121
16122         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
16123         just InternalCall.
16124
16125 2003-02-09  Martin Baulig  <martin@ximian.com>
16126
16127         * namespace.cs (Namespace..ctor): Added SourceFile argument.
16128         (Namespace.DefineNamespaces): New static public method; this is
16129         called when we're compiling with debugging to add all namespaces
16130         to the symbol file.
16131
16132         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
16133         pass it to the Namespace's .ctor.
16134
16135         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
16136         and MethodBase arguments; pass the namespace ID to the symwriter;
16137         pass the MethodBase instead of the token to the symwriter.
16138         (SymbolWriter.DefineNamespace): New method to add a namespace to
16139         the symbol file.
16140
16141 2003-02-09  Martin Baulig  <martin@ximian.com>
16142
16143         * symbolwriter.cs: New file.  This is a wrapper around
16144         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
16145         methods here in near future.
16146
16147 2003-02-09  Martin Baulig  <martin@ximian.com>
16148
16149         * codegen.cs (EmitContext.Mark): Just pass the arguments to
16150         ILGenerator.MarkSequencePoint() which are actually used by the
16151         symbol writer.
16152
16153 2003-02-09  Martin Baulig  <martin@ximian.com>
16154
16155         * location.cs (SourceFile): New public sealed class.  This
16156         contains the name and an index which is used in the location's token.
16157         (Location): Reserve an appropriate number of bits in the token for
16158         the source file instead of walking over that list, this gives us a
16159         really huge performance improvement when compiling with debugging.
16160
16161         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
16162         `SourceFile' argument instead of a string.
16163         (Driver.ProcessFile): Add all the files via Location.AddFile(),
16164         but don't parse/tokenize here, we need to generate the list of all
16165         source files before we do that.
16166         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
16167         the files.
16168
16169         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
16170         instead of a string.
16171
16172         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
16173         of a string.
16174
16175 2003-02-09  Martin Baulig  <martin@ximian.com>
16176
16177         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
16178         filename on `#line default'.
16179
16180 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
16181
16182         * statement.cs: don't clear the pinned var when the fixed statement
16183         returns from the method (fixes bug#37752).
16184
16185 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
16186
16187         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
16188         to IsValueType.
16189
16190 2003-02-07  Martin Baulig  <martin@ximian.com>
16191
16192         * driver.cs: Removed the `--debug-args' command line argument.
16193
16194         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
16195         automatically by the AsssemblyBuilder.
16196         (CodeGen.InitializeSymbolWriter): We don't need to call any
16197         initialization function on the symbol writer anymore.  This method
16198         doesn't take any arguments.
16199
16200 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
16201
16202         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
16203         from referenced assemblies as well.
16204
16205 2003-02-02  Martin Baulig  <martin@ximian.com>
16206
16207         * class.cs (MethodData.Emit): Generate debugging info for external methods.
16208
16209 2003-02-02  Martin Baulig  <martin@ximian.com>
16210
16211         * class.cs (Constructor.Emit): Open the symbol writer before
16212         emitting the constructor initializer.
16213         (ConstructorInitializer.Emit): Call ec.Mark() to allow
16214         single-stepping through constructor initializers.
16215
16216 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
16217
16218         * class.cs: Handle error 549: do not allow virtual methods in
16219         sealed classes. 
16220
16221 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
16222
16223         * decl.cs: Check access levels when resolving types
16224
16225 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
16226
16227         * statement.cs: Add parameters and locals set in catch blocks that might 
16228         return to set vector
16229
16230 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
16231
16232         * class.cs (Operator): Set the SpecialName flags for operators.
16233
16234         * expression.cs (Invocation.DoResolve): Only block calls to
16235         accessors and operators on SpecialName methods.
16236
16237         (Cast.TryReduce): Handle conversions from char constants.
16238
16239
16240 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
16241
16242         * statement.cs: small memory and time optimization in FlowBranching.
16243
16244 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
16245
16246         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
16247         problem that the last fix but in the other sid (Set).
16248
16249         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
16250         access when there is no indexer in the hierarchy.
16251
16252 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
16253
16254         * class.cs: Combine some if statements.
16255
16256 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16257
16258         * driver.cs: fixed bug #37187.
16259
16260 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
16261
16262         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
16263         any indexer, it's needed to build a list with all the indexers in the
16264         hierarchy (AllGetters), else we have problems. Fixes #35653.
16265
16266 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
16267
16268         * class.cs (MethodData.Define): It is wrong for an interface
16269         implementation to be static in both cases: explicit and implicit.
16270         We were only handling this in one case.
16271
16272         Improve the if situation there to not have negations.
16273
16274         * class.cs (Field.Define): Turns out that we do not need to check
16275         the unsafe bit on field definition, only on usage.  Remove the test.
16276
16277 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16278
16279         * driver.cs: use assembly.Location instead of Codebase (the latest
16280         patch made mcs fail when using MS assemblies).
16281
16282 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
16283
16284         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
16285         get the path to *corlib.dll.
16286
16287 2003-01-21  Nick Drochak <ndrochak@gol.com>
16288
16289         * cs-tokenizer.cs:
16290         * pending.cs:
16291         * typemanager.cs: Remove compiler warnings
16292
16293 2003-01-20  Duncan Mak  <duncan@ximian.com>
16294
16295         * AssemblyInfo.cs: Bump the version number to 0.19.
16296
16297 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16298
16299         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
16300
16301 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
16302
16303         * class.cs (Constructor::Emit): Emit debugging info for constructors.
16304
16305 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
16306
16307         * cs-parser.jay: Small fix: we were not comparing the constructor
16308         name correctly.   Thanks to Zoltan for the initial pointer.
16309
16310 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
16311
16312         * cs-tokenizer.cs: Set file name when specified with #line
16313
16314 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
16315
16316         * cs-parser.jay: Only perform the constructor checks here if we
16317         are named like the class;  This will help provider a better
16318         error.  The constructor path is taken when a type definition is
16319         not found, but most likely the user forgot to add the type, so
16320         report that rather than the constructor error.
16321
16322 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
16323
16324         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
16325         allocations.
16326
16327 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16328
16329         * cs-parser.jay: Add cleanup call.
16330
16331 2003-01-13  Duncan Mak  <duncan@ximian.com>
16332
16333         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
16334         consistent with other methods.
16335
16336 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16337
16338         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
16339
16340 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
16341
16342         * attribute.cs: only set GuidAttr to true when we have a
16343         GuidAttribute.
16344
16345 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16346
16347         * ecore.cs:
16348         * expression.cs:
16349         * typemanager.cs: fixes to allow mcs compile corlib with the new
16350         Type.IsSubclassOf fix.
16351
16352 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
16353
16354         * expression.cs (LocalVariableReference.DoResolve): Classify a
16355         constant as a value, not as a variable.   Also, set the type for
16356         the variable.
16357
16358         * cs-parser.jay (fixed_statement): take a type instead of a
16359         pointer_type, so we can produce a better error message later.
16360
16361         * statement.cs (Fixed.Resolve): Flag types that are not pointers
16362         as an error.  
16363
16364         (For.DoEmit): Make inifinite loops have a
16365         non-conditional branch back.
16366
16367         (Fixed.DoEmit): First populate the pinned variables, then emit the
16368         statement, then clear the variables.  Before I was emitting the
16369         code once for each fixed piece.
16370
16371
16372 2003-01-08  Martin Baulig  <martin@ximian.com>
16373
16374         * statement.cs (FlowBranching.MergeChild): A break in a
16375         SWITCH_SECTION does not leave a loop.  Fixes #36155.
16376
16377 2003-01-08  Martin Baulig  <martin@ximian.com>
16378
16379         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
16380         lives in the same number space than `param_map'.  Fixes #36154.
16381
16382 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
16383
16384         * cs-parser.jay (constructor_declaration): Set the
16385         Constructor.ModFlags before probing for it.  This makes the
16386         compiler report 514, 515 and 132 (the code was there, but got
16387         broken). 
16388
16389         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
16390         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
16391         (GotoCase.Resolve): Set `Returns' to ALWAYS.
16392
16393 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
16394
16395         * enum.cs: create the enum static fields using the enum type.
16396
16397 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
16398
16399         * class.cs: don't try to create the ParamBuilder for the return
16400         type if it's not needed (and handle it breaking for the ms runtime
16401         anyway).
16402
16403 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
16404
16405         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
16406
16407 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
16408
16409         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
16410         the command.   This showed up while compiling the JANET source
16411         code, which used \r as its only newline separator.
16412
16413 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
16414
16415         * class.cs (Method.Define): If we are an operator (because it
16416         reuses our code), then set the SpecialName and HideBySig.  #36128
16417
16418 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
16419
16420         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
16421         exception, report error 120 `object reference required'.
16422
16423         * driver.cs: Add --pause option, used during to measure the size
16424         of the process as it goes with --timestamp.
16425
16426         * expression.cs (Invocation.DoResolve): Do not allow methods with
16427         SpecialName to be invoked.
16428
16429 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
16430
16431         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
16432         number before adding it.
16433
16434 2002-12-21  Ravi Pratap  <ravi@ximian.com>
16435
16436         * ecore.cs (StandardImplicitConversion): When in an unsafe
16437         context, we allow conversion between void * to any other pointer
16438         type. This fixes bug #35973.
16439
16440 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
16441
16442         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16443         is not thrown when extensionless outputs are used 
16444
16445 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16446
16447         * rootcontext.cs: fixed compilation of corlib.
16448
16449 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16450
16451         * attribute.cs (Attributes.Contains): Add new method.
16452
16453         * class.cs (MethodCore.LabelParameters): if the parameter is an
16454         `out' parameter, check that no attribute `[In]' has been passed.
16455
16456         * enum.cs: Handle the `value__' name in an enumeration.
16457
16458 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16459
16460         * decl.cs: Added special case to allow overrides on "protected
16461         internal" methods
16462
16463 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16464
16465         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16466         since it makes much more sense.
16467
16468         (Attributes.ctor): Don't require a Location parameter.
16469
16470         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16471
16472         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16473         since we already have that information per attribute.
16474
16475         * everywhere : make appropriate changes.
16476
16477         * class.cs (LabelParameters): Write the code which actually
16478         applies attributes to the return type. We can't do this on the MS
16479         .NET runtime so we flag a warning in the case an exception is
16480         thrown.
16481
16482 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16483
16484         * const.cs: Handle implicit null conversions here too.
16485
16486 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16487
16488         * class.cs (MethodCore.LabelParameters): Remove the extra
16489         Type [] parameter since it is completely unnecessary. Instead
16490         pass in the method's attributes so that we can extract
16491         the "return" attribute.
16492
16493 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16494
16495         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16496         of ignoring it and letting the compile continue.
16497
16498         * typemanager.cs (ChangeType): use an extra argument to return an
16499         error condition instead of throwing an exception.
16500
16501 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16502
16503         * expression.cs (Unary.TryReduce): mimic the code for the regular
16504         code path.  Perform an implicit cast in the cases where we can
16505         implicitly convert to one of the integral types, and then reduce
16506         based on that constant.   This fixes bug #35483.
16507
16508 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16509
16510         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16511
16512 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16513
16514         * namespace.cs: fixed bug #35489.
16515
16516 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16517
16518         * class.cs: Remove some dead code.
16519
16520         * cs-parser.jay: Estimate the number of methods needed
16521         (RootContext.MethodCount);
16522
16523         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16524         numbers instead of StringBuilders.
16525
16526         * support.cs (PtrHashtable): Add constructor with initial size;
16527         We can now reduce reallocations of the method table.
16528
16529 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16530
16531         * attribute.cs (ApplyAttributes): Keep track of the emitted
16532         attributes on a per-target basis. This fixes bug #35413.
16533
16534 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16535
16536         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16537         default to the Windows 1252 encoding.
16538
16539         (UnixParseOption): Support version, thanks to Alp for the missing
16540         pointer. 
16541
16542         * AssemblyInfo.cs: Add nice assembly information.
16543
16544         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16545         (bug 35169).
16546
16547         * cs-parser.jay: Allow a trailing comma before the close bracked
16548         in the attribute_section production.
16549
16550         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16551         address of the instance was being taken, I will take this out,
16552         because we take the address of the object immediately here.
16553
16554 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16555
16556         * typemanager.cs (AreMultipleAllowed): Take care of the most
16557         obvious case where attribute type is not in the current assembly -
16558         stupid me ;-)
16559
16560 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16561
16562         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16563         definitions, instead of doing that afterwards.  
16564
16565         Also we use a nice little hack, depending on the constructor, we
16566         know if we are a "composed" name or a simple name.  Hence, we
16567         avoid the IndexOf test, and we avoid 
16568
16569         * codegen.cs: Add code to assist in a bug reporter to track down
16570         the source of a compiler crash. 
16571
16572 2002-12-07  Ravi Pratap  <ravi@ximian.com>
16573
16574         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
16575         types have been emitted for a given element and flag an error
16576         if something which does not have AllowMultiple set is used more
16577         than once.
16578
16579         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
16580         attribute types and their corresponding AllowMultiple properties
16581
16582         (AreMultipleAllowed): Check the property for a given type.
16583
16584         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
16585         property in the case we have a TypeContainer.
16586
16587         (Attributes.AddAttribute): Detect duplicates and just skip on
16588         adding them. This trivial fix catches a pretty gross error in our
16589         attribute emission - global attributes were being emitted twice!
16590
16591         Bugzilla bug #33187 is now fixed.
16592
16593 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
16594
16595         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
16596         instead of pp_and).
16597
16598         * expression.cs (Binary.ResolveOperator): I can only use the
16599         Concat (string, string, string) and Concat (string, string,
16600         string, string) if the child is actually a concatenation of
16601         strings. 
16602
16603 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
16604
16605         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
16606         context where we need a 2-character lookahead.
16607
16608         * pending.cs (PendingImplementation): Rework so we can keep track
16609         of interface types all the time, and flag those which were
16610         implemented by parents as optional.
16611
16612 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
16613
16614         * expression.cs (Binary.ResolveOperator): Use
16615         String.Concat(string,string,string) or
16616         String.Concat(string,string,string,string) when possible. 
16617
16618         * typemanager: More helper methods.
16619
16620
16621 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
16622
16623         * pending.cs: remove the bogus return from GetMissingInterfaces()
16624         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
16625
16626 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16627
16628         * namespace.cs: avoid duplicated 'using xxx' being added to
16629         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
16630         when we get more than one 'using' statement for the same namespace.
16631         Report a CS0105 warning for it.
16632
16633 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
16634
16635         * cs-tokenizer.cs (consume_identifier): use read directly, instead
16636         of calling getChar/putback, uses internal knowledge of it.    
16637
16638         (xtoken): Reorder tokenizer so most common patterns are checked
16639         first.  This reduces the compilation time in another 5% (from 8.11s
16640         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
16641
16642         The parsing time is 22% of the compilation in mcs, and from that
16643         64% is spent on the tokenization process.  
16644
16645         I tried using a binary search for keywords, but this is slower
16646         than the hashtable.  Another option would be to do a couple of
16647         things:
16648
16649                 * Not use a StringBuilder, instead use an array of chars,
16650                   with a set value.  Notice that this way we could catch
16651                   the 645 error without having to do it *afterwards*.
16652
16653                 * We could write a hand-parser to avoid the hashtable
16654                   compares altogether.
16655
16656         The identifier consumption process takes 37% of the tokenization
16657         time.  Another 15% is spent on is_number.  56% of the time spent
16658         on is_number is spent on Int64.Parse:
16659
16660                 * We could probably choose based on the string length to
16661                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
16662                   computations. 
16663
16664         Another 3% is spend on wrapping `xtoken' in the `token' function.
16665
16666         Handle 0xa0 as whitespace (#34752)
16667
16668 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
16669
16670         * typemanager.cs (IsCLRType): New routine to tell whether a type
16671         is one of the builtin types.  
16672
16673         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
16674         typecode in more places instead of doing pointer comparissions.
16675         We could leverage some knowledge about the way the typecodes are
16676         laid out.
16677
16678         New code to cache namespaces in assemblies, it is currently not
16679         invoked, to be used soon.
16680
16681         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
16682
16683         * expression.cs (Binary.ResolveOperator): specially handle
16684         strings, and do not perform user-defined operator overloading for
16685         built-in types.
16686
16687 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
16688
16689         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
16690         internalcall as it is a pretty simple operation;  Avoid whenever
16691         possible to call Char.IsLetter.
16692
16693         (consume_identifier): Cut by half the number of
16694         hashtable calls by merging the is_keyword and GetKeyword behavior.
16695
16696         Do not short-circuit, because if we do, we
16697         report errors (ie, #if false && true would produce an invalid
16698         directive error);
16699
16700
16701 2002-11-24  Martin Baulig  <martin@ximian.com>
16702
16703         * expression.cs (Cast.TryReduce): If we're in checked syntax,
16704         check constant ranges and report a CS0221.  Fixes #33186.
16705
16706 2002-11-24  Martin Baulig  <martin@ximian.com>
16707
16708         * cs-parser.jay: Make this work for uninitialized variable
16709         declarations in the `for' initializer.  Fixes #32416.
16710
16711 2002-11-24  Martin Baulig  <martin@ximian.com>
16712
16713         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
16714         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
16715
16716 2002-11-24  Martin Baulig  <martin@ximian.com>
16717
16718         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
16719         argument; if true, we also check for user-defined conversions.
16720         This is only needed if both arguments are of a user-defined type.
16721         Fixes #30443, added test-175.cs.
16722         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
16723
16724         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
16725
16726 2002-11-24  Martin Baulig  <martin@ximian.com>
16727
16728         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
16729         function to get the store opcode.
16730         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
16731         only emit the Ldelema if the store opcode is Stobj.  You must run
16732         both test-34 and test-167 to test this.  Fixes #34529.
16733
16734 2002-11-23  Martin Baulig  <martin@ximian.com>
16735
16736         * ecore.cs (Expression.MemberLookup): Added additional
16737         `qualifier_type' argument which is used when we're being called
16738         from MemberAccess.DoResolve() and null if we're called from a
16739         SimpleName lookup.
16740         (Expression.MemberLookupFailed): New method to report errors; this
16741         does the CS1540 check and reports the correct error message.
16742
16743         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
16744         argument for the CS1540 check and redone the way how we're dealing
16745         with private members.  See the comment in the source code for details.
16746         (FilterWithClosure): Reverted this back to revision 1.197; renamed
16747         `closure_start_type' to `closure_qualifier_type' and check whether
16748         it's not null.  It was not this filter being broken, it was just
16749         being called with the wrong arguments.
16750
16751         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
16752         and pass it the correct `qualifier_type'; this also does the error
16753         handling for us.
16754
16755 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
16756
16757         * expression.cs (Invocation.EmitParams): If the we are dealing
16758         with a non-built-in value type, load its address as well.
16759
16760         (ArrayCreation): Use a a pretty constant instead
16761         of the hardcoded value 2.   Use 6 instead of 2 for the number of
16762         static initializers.  
16763
16764         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
16765         because they are not really value types, just glorified integers. 
16766
16767         * driver.cs: Do not append .exe, the CSC compiler does not do it.
16768
16769         * ecore.cs: Remove redundant code for enumerations, make them use
16770         the same code path as everything else, fixes the casting issue
16771         with enumerations in Windows.Forms.
16772
16773         * attribute.cs: Do only cast to string if it is a string, the
16774         validation happens later.
16775
16776         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
16777         people upgrade their corlibs.
16778
16779         * ecore.cs: Oops, enumerations were not following the entire code path
16780
16781 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
16782
16783         * typemanager.cs (FilterWithClosure): Commented out the test for
16784         1540 in typemanager.cs, as it has problems when accessing
16785         protected methods from a parent class (see test-174.cs). 
16786
16787         * attribute.cs (Attribute.ValidateGuid): new method.
16788         (Attribute.Resolve): Use above.
16789
16790 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
16791
16792         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
16793
16794         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
16795         handling for enumerations, as we only needed the TypeContainer
16796         functionality to begin with (this is required for the fix below to
16797         work for enums that reference constants in a container class for
16798         example). 
16799
16800         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
16801
16802         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
16803         a valid TypeBuilder to perform lookups on.o
16804
16805         * class.cs (InheritableMemberSignatureCompare): Use true in the
16806         call to GetGetMethod and GetSetMethod, because we are comparing
16807         the signature, and we need to get the methods *even* if they are
16808         private. 
16809
16810         (PropertyBase.CheckBase): ditto.
16811
16812         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
16813         GotoCase.Resolve): Use Peel on EmpytCasts.
16814
16815         * ecore.cs (EmptyCast): drop child, add Peel method.
16816
16817 2002-11-17  Martin Baulig  <martin@ximian.com>
16818
16819         * ecore.cs (EmptyCast.Child): New public property.
16820
16821         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
16822         label resolved to an EmptyCast.  Fixes #34162.
16823         (GotoCase.Resolve): Likewise.
16824         (Block.EmitMeta): Likewise.
16825
16826 2002-11-17  Martin Baulig  <martin@ximian.com>
16827
16828         * expression.cs (Invocation.BetterConversion): Prefer int over
16829         uint; short over ushort; long over ulong for integer literals.
16830         Use ImplicitConversionExists instead of StandardConversionExists
16831         since we also need to check for user-defined implicit conversions.
16832         Fixes #34165.  Added test-173.cs.
16833
16834 2002-11-16  Martin Baulig  <martin@ximian.com>
16835
16836         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
16837         with the `true' and `false' literals.  Fixes #33151.
16838
16839 2002-11-16  Martin Baulig  <martin@ximian.com>
16840
16841         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
16842         October 22nd; don't do the cs1540 check for static members.
16843
16844         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
16845         now using our own filter here and doing the cs1540 check again.
16846
16847 2002-11-16  Martin Baulig  <martin@ximian.com>
16848
16849         * support.cs (InternalParameters): Don't crash if we don't have
16850         any fixed parameters.  Fixes #33532.
16851
16852 2002-11-16  Martin Baulig  <martin@ximian.com>
16853
16854         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
16855         when looking up static methods to make this work on Windows.
16856         Fixes #33773.
16857
16858 2002-11-16  Martin Baulig  <martin@ximian.com>
16859
16860         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
16861         a setter rather than using PropertyInfo.CanWrite.
16862
16863 2002-11-15  Nick Drochak  <ndrochak@gol.com>
16864
16865         * class.cs: Allow acces to block member by subclasses. Fixes build
16866         breaker.
16867
16868 2002-11-14  Martin Baulig  <martin@ximian.com>
16869
16870         * class.cs (Constructor.Emit): Added the extern/block check.
16871         Fixes bug #33678.
16872
16873 2002-11-14  Martin Baulig  <martin@ximian.com>
16874
16875         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
16876         iteration while looking for indexers, this is needed because the
16877         indexer may have a different name in our base classes.  Fixed the
16878         error reporting (no indexers at all, not get accessor, no
16879         overloaded match).  Fixes bug #33089.
16880         (IndexerAccess.DoResolveLValue): Likewise.
16881
16882 2002-11-14  Martin Baulig  <martin@ximian.com>
16883
16884         * class.cs (PropertyBase.CheckBase): Make this work for multiple
16885         indexers.  Fixes the first part of bug #33089.
16886         (MethodSignature.InheritableMemberSignatureCompare): Added support
16887         for properties.
16888
16889 2002-11-13  Ravi Pratap  <ravi@ximian.com>
16890
16891         * attribute.cs (Attribute.Resolve): Catch the
16892         NullReferenceException and report it since it isn't supposed to
16893         happen. 
16894
16895 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
16896
16897         * expression.cs (Binary.EmitBranchable): Also handle the cases for
16898         LogicalOr and LogicalAnd that can benefit from recursively
16899         handling EmitBranchable.  The code now should be nice for Paolo.
16900
16901 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
16902
16903         * typemanager.cs (LookupType): Added a negative-hit hashtable for
16904         the Type lookups, as we perform quite a number of lookups on
16905         non-Types.  This can be removed once we can deterministically tell
16906         whether we have a type or a namespace in advance.
16907
16908         But this might require special hacks from our corlib.
16909
16910         * TODO: updated.
16911
16912         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
16913         and double which avoids a conversion from an integer to a double.
16914
16915         * expression.cs: tiny optimization, avoid calling IsConstant,
16916         because it effectively performs the lookup twice.
16917
16918 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
16919
16920         But a bogus return here to keep the semantics of the old code
16921         until the Mono runtime is fixed.
16922
16923         * pending.cs (GetMissingInterfaces): New method used to remove all
16924         the interfaces that are already implemented by our parent
16925         classes from the list of pending methods. 
16926
16927         * interface.cs: Add checks for calls after ResolveTypeExpr.
16928
16929 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
16930
16931         * class.cs (Class.Emit): Report warning 67: event not used if the
16932         warning level is beyond 3.
16933
16934         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
16935         being a NullLiteral.
16936
16937         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
16938         specifiers. 
16939
16940         * class.cs (TypeContainer.GetClassBases): Cover a missing code
16941         path that might fail if a type can not be resolved.
16942
16943         * expression.cs (Binary.Emit): Emit unsigned versions of the
16944         operators. 
16945
16946         * driver.cs: use error 5.
16947
16948 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
16949
16950         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
16951
16952 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
16953
16954         * cs-parser.jay (switch_section): A beautiful patch from Martin
16955         Baulig that fixed 33094.
16956
16957 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
16958
16959         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
16960         Check whether the base is abstract and report an error if so.
16961
16962         * expression.cs (IndexerAccess.DoResolveLValue,
16963         IndexerAccess.DoResolve): ditto. 
16964
16965         (Invocation.DoResolve): ditto.
16966
16967         (Invocation.FullMethodDesc): Improve the report string.
16968
16969         * statement.cs (Block): Eliminate IsVariableDefined as it is
16970         basically just a wrapper for GetVariableInfo.
16971
16972         * ecore.cs (SimpleName): Use new 
16973
16974         * support.cs (ReflectionParamter.ParameterType): We unwrap the
16975         type, as we return the actual parameter ref/unref state on a
16976         different call.
16977
16978 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
16979
16980         * support.cs: Return proper flags REF/OUT fixing the previous
16981         commit.  
16982
16983         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
16984         not used to mean `ref' but `ref or out' in ParameterReference
16985
16986         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
16987         full type signature instead of calling TypeManger.CSharpName
16988         ourselves. 
16989
16990         * support.cs (InternalParameters.ParameterDesc): Do not compare
16991         directly to the modflags, because REF/OUT will actually be bitsets
16992         if set. 
16993
16994         * delegate.cs (VerifyMethod): Check also the modifiers.
16995
16996         * cs-tokenizer.cs: Fix bug where floating point values with an
16997         exponent where a sign was missing was ignored.
16998
16999         * driver.cs: Allow multiple assemblies to be specified in a single
17000         /r: argument
17001
17002 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
17003
17004         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
17005         because identifiers after a parenthesis would end up in this kind
17006         of production, and we needed to desamiguate it for having casts
17007         like:
17008
17009                 (UserDefinedType *) xxx
17010
17011 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
17012
17013         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
17014         we should set on the Bindingflags.NonPublic, but not turn on
17015         private_ok.  private_ok controls whether a Private member is
17016         returned (this is chekced on the filter routine), while the
17017         BindingFlags.NonPublic just controls whether private/protected
17018         will be allowed.   This fixes the problem part of the problem of
17019         private properties being allowed to be used in derived classes.
17020
17021         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
17022         so we can call the children DoResolveLValue method (this will
17023         properly signal errors on lvalue assignments to base properties)
17024
17025         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
17026         getter are null, and we have a property info, we know that this
17027         happened because the lookup failed, so we report an error 122 for
17028         protection level violation.
17029
17030         We also silently return if setter and getter are null in the
17031         resolve functions, this condition only happens if we have flagged
17032         the error before.  This is the other half of the problem. 
17033
17034         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
17035         not have accessibility information, that is why we were returning
17036         true in the filter function in typemanager.cs.
17037
17038         To properly report 122 (property is inaccessible because of its
17039         protection level) correctly, we report this error in ResolveAccess
17040         by failing if both the setter and the getter are lacking (ie, the
17041         lookup failed). 
17042
17043         DoResolve and DoLResolve have been modified to check for both
17044         setter/getter being null and returning silently, the reason being
17045         that I did not want to put the knowledge about this error in upper
17046         layers, like:
17047
17048         int old = Report.Errors;
17049         x = new PropertyExpr (...);
17050         if (old != Report.Errors)
17051                 return null;
17052         else
17053                 return x;
17054
17055         So the property expr is returned, but it is invalid, so the error
17056         will be flagged during the resolve process. 
17057
17058         * class.cs: Remove InheritablePropertySignatureCompare from the
17059         class, as we no longer depend on the property signature to compute
17060         whether it is possible to implement a method or not.
17061
17062         The reason is that calling PropertyInfo.GetGetMethod will return
17063         null (in .NET, in Mono it works, and we should change this), in
17064         cases where the Get Method does not exist in that particular
17065         class.
17066
17067         So this code:
17068
17069         class X { public virtual int A { get { return 1; } } }
17070         class Y : X { }
17071         class Z : Y { public override int A { get { return 2; } } }
17072
17073         Would fail in Z because the parent (Y) would not have the property
17074         defined.  So we avoid this completely now (because the alternative
17075         fix was ugly and slow), and we now depend exclusively on the
17076         method names.
17077
17078         (PropertyBase.CheckBase): Use a method-base mechanism to find our
17079         reference method, instead of using the property.
17080
17081         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
17082         routines are gone now.
17083
17084         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
17085         names, they were incorrectly named.
17086
17087         * cs-tokenizer.cs: Return are more gentle token on failure. 
17088
17089         * pending.cs (PendingImplementation.InterfaceMethod): This routine
17090         had an out-of-sync index variable, which caused it to remove from
17091         the list of pending methods the wrong method sometimes.
17092
17093 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
17094
17095         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
17096         CanWrite, because those refer to this particular instance of the
17097         property, and do not take into account the fact that we can
17098         override single members of a property.
17099
17100         Constructor requires an EmitContext.  The resolution process does
17101         not happen here, but we need to compute the accessors before,
17102         because the resolution does not always happen for properties.
17103
17104         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
17105         subclass, before we did not update this flag, but we did update
17106         bindingflags. 
17107
17108         (GetAccessors): Drop this routine, as it did not work in the
17109         presence of partially overwritten set/get methods. 
17110
17111         Notice that this broke the cs1540 detection, but that will require
17112         more thinking. 
17113
17114 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17115
17116         * class.cs:
17117         * codegen.cs:
17118         * driver.cs: issue a warning instead of an error if we don't support
17119         debugging for the platform. Also ignore a couple of errors that may
17120         arise when trying to write the symbols. Undo my previous patch.
17121
17122 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17123
17124         * driver.cs: ignore /debug switch except for Unix platforms.
17125
17126 2002-10-23  Nick Drochak  <ndrochak@gol.com>
17127
17128         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
17129
17130 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
17131
17132         * driver.cs: Do not make mcs-debug conditional, so we do not break
17133         builds that use it.
17134
17135         * statement.cs (UsageVector.MergeChildren): I would like Martin to
17136         review this patch.  But basically after all the children variables
17137         have been merged, the value of "Breaks" was not being set to
17138         new_breaks for Switch blocks.  I think that it should be set after
17139         it has executed.  Currently I set this to the value of new_breaks,
17140         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
17141         conservative, but I do not understand this code very well.
17142
17143         I did not break anything in the build, so that is good ;-)
17144
17145         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
17146
17147 2002-10-20  Mark Crichton  <crichton@gimp.org>
17148
17149         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
17150
17151 2002-10-20  Nick Drochak  <ndrochak@gol.com>
17152
17153         * cfold.cs: Fixed compile blocker.
17154
17155 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
17156
17157         * driver.cs: I was chekcing the key, not the file.
17158
17159 2002-10-19  Ravi Pratap  <ravi@ximian.com>
17160
17161         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
17162         message that we were generating - we just need to silently return
17163         a null.
17164
17165 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
17166
17167         * class.cs (Event.Define): Change my previous commit, as this
17168         breaks the debugger.  This is a temporary hack, as it seems like
17169         the compiler is generating events incorrectly to begin with.
17170
17171         * expression.cs (Binary.ResolveOperator): Added support for 
17172         "U operator - (E x, E y)"
17173
17174         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
17175         y)".
17176
17177         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
17178         init-only variables, but this path did not take into account that
17179         there might be also instance readonly variables.  Correct this
17180         problem. 
17181
17182         This fixes bug 32253
17183
17184         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
17185         delegates as well.
17186
17187         * driver.cs: Change the extension for modules to `netmodule'
17188
17189         * cs-parser.jay: Improved slightly the location tracking for
17190         the debugger symbols.
17191
17192         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
17193         modifiers that were specified instead of the hardcoded value
17194         (FamAndAssem).  This was basically ignoring the static modifier,
17195         and others.  Fixes 32429.
17196
17197         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
17198         fixed a bug in the process (32476)
17199
17200         * expression.cs (ArrayAccess.EmitAssign): Patch from
17201         hwang_rob@yahoo.ca that fixes bug 31834.3
17202
17203 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
17204
17205         * driver.cs: Make the module extension .netmodule.
17206
17207 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
17208
17209         * driver.cs: Report an error if the resource file is not found
17210         instead of crashing.
17211
17212         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
17213         false, like Emit does.
17214
17215 2002-10-16  Nick Drochak  <ndrochak@gol.com>
17216
17217         * typemanager.cs: Remove unused private member.  Also reported mcs
17218         bug to report this as a warning like csc.
17219
17220 2002-10-15  Martin Baulig  <martin@gnome.org>
17221
17222         * statement.cs (Statement.Emit): Made this a virtual method; emits
17223         the line number info and calls DoEmit().
17224         (Statement.DoEmit): New protected abstract method, formerly knows
17225         as Statement.Emit().
17226
17227         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
17228
17229 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
17230
17231         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
17232         have fixed a remaining problem: not every AddXXXX was adding a
17233         fully qualified name.  
17234
17235         Now everyone registers a fully qualified name in the DeclSpace as
17236         being defined instead of the partial name.  
17237
17238         Downsides: we are slower than we need to be due to the excess
17239         copies and the names being registered this way.  
17240
17241         The reason for this is that we currently depend (on the corlib
17242         bootstrap for instance) that types are fully qualified, because
17243         we dump all the types in the namespace, and we should really have
17244         types inserted into the proper namespace, so we can only store the
17245         basenames in the defined_names array.
17246
17247 2002-10-10  Martin Baulig  <martin@gnome.org>
17248
17249         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
17250         from bug #31834, see the bug report for a testcase which is
17251         miscompiled.
17252
17253 2002-10-10  Martin Baulig  <martin@gnome.org>
17254
17255         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
17256         flow analysis code for this.
17257
17258         * statement.cs (Do, While, For): Tell the flow analysis code about
17259         infinite loops.
17260         (FlowBranching.UsageVector): Added support for infinite loops.
17261         (Block.Resolve): Moved the dead code elimination here and use flow
17262         analysis to do it.
17263
17264 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
17265
17266         * class.cs (Field.Define): Catch cycles on struct type
17267         definitions. 
17268
17269         * typemanager.cs (IsUnmanagedtype): Do not recursively check
17270         fields if the fields are static.  We only need to check instance
17271         fields. 
17272
17273         * expression.cs (As.DoResolve): Test for reference type.
17274
17275         * statement.cs (Using.ResolveExpression): Use
17276         ConvertImplicitRequired, not ConvertImplicit which reports an
17277         error on failture
17278         (Using.ResolveLocalVariableDecls): ditto.
17279
17280         * expression.cs (Binary.ResolveOperator): Report errors in a few
17281         places where we had to.
17282
17283         * typemanager.cs (IsUnmanagedtype): Finish implementation.
17284
17285 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
17286
17287         * expression.cs: Use StoreFromPtr instead of extracting the type
17288         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
17289
17290         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
17291         an enumeration value to a System.Enum, but System.Enum is not a
17292         value type, but an class type, so we need to box.
17293
17294         (Expression.ConvertExplicit): One codepath could return
17295         errors but not flag them.  Fix this.  Fixes #31853
17296
17297         * parameter.cs (Resolve): Do not allow void as a parameter type.
17298
17299 2002-10-06  Martin Baulig  <martin@gnome.org>
17300
17301         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
17302         if it's a class type and not a struct.  Fixes #31815.
17303
17304 2002-10-06  Martin Baulig  <martin@gnome.org>
17305
17306         * statement.cs: Reworked the flow analysis code a bit to make it
17307         usable for dead code elimination.
17308
17309 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17310
17311         * cs-parser.jay: allow empty source files. Fixes bug #31781.
17312
17313 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17314
17315         * expression.cs (ComposedCast.DoResolveType): A quick workaround
17316         to fix the test 165, will investigate deeper.
17317
17318 2002-10-04  Martin Baulig  <martin@gnome.org>
17319
17320         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
17321         finally blocks actually work.
17322         (Try.Resolve): We don't need to create a sibling for `finally' if
17323         there is no finally block.
17324
17325 2002-10-04  Martin Baulig  <martin@gnome.org>
17326
17327         * class.cs (Constructor.Define): The default accessibility for a
17328         non-default constructor is private, not public.
17329
17330 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17331
17332         * class.cs (Constructor): Make AllowedModifiers public, add
17333         EXTERN.
17334
17335         * cs-parser.jay: Perform the modifiers test here, as the
17336         constructor for the Constructor class usually receives a zero
17337         because of the way we create it (first we create, later we
17338         customize, and we were never checking the modifiers).
17339
17340         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
17341         is a version of LookupTypeReflection that includes the type-name
17342         cache.  This can be used as a fast path for functions that know
17343         the fully qualified name and are only calling into *.GetType() to
17344         obtain a composed type.
17345
17346         This is also used by TypeManager.LookupType during its type
17347         composition.
17348
17349         (LookupType): We now also track the real type name, as sometimes
17350         we can get a quey for the real type name from things like
17351         ComposedCast.  This fixes bug 31422.
17352
17353         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
17354         complete type fullname, it does not have to go through the type
17355         resolution system to obtain the composed version of the type (for
17356         obtaining arrays or pointers).
17357
17358         (Conditional.Emit): Use the EmitBoolExpression to
17359         generate nicer code, as requested by Paolo.
17360
17361         (ArrayCreation.CheckIndices): Use the patch from
17362         hwang_rob@yahoo.ca to validate the array initializers. 
17363
17364 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
17365
17366         * class.cs (ConstructorInitializer.Emit): simplify code by using
17367         Invocation.EmitCall, and at the same time, fix the bugs in calling
17368         parent constructors that took variable arguments. 
17369
17370         * ecore.cs (Expression.ConvertNumericExplicit,
17371         Expression.ImplicitNumericConversion): Remove the code that
17372         manually wrapped decimal (InternalTypeConstructor call is now gone
17373         as well).
17374
17375         * expression.cs (Cast.TryReduce): Also handle decimal types when
17376         trying to perform a constant fold on the type.
17377
17378         * typemanager.cs (IsUnmanagedtype): Partially implemented.
17379
17380         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
17381         that only turned off an error report, and did nothing else. 
17382
17383 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
17384
17385         * driver.cs: Handle and ignore /fullpaths
17386
17387 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
17388
17389         * expression.cs (Binary.ResolveOperator): Catch the case where
17390         DoNumericPromotions returns true, 
17391
17392         (Binary.DoNumericPromotions): Simplify the code, and the tests.
17393
17394 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
17395
17396         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
17397         report error 70.
17398
17399 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
17400
17401         * ecore.cs (ConvertNumericExplicit): It is not enough that the
17402         conversion exists, but it is also required that the conversion be
17403         performed.  This manifested in "(Type64Enum) 2".  
17404
17405         * class.cs (TypeManager.AddMethod): The fix is not to change
17406         AddEnum, because that one was using a fully qualified name (every
17407         DeclSpace derivative does), but to change the AddMethod routine
17408         that was using an un-namespaced name.  This now correctly reports
17409         the duplicated name.
17410
17411         Revert patch until I can properly fix it.  The issue
17412         is that we have a shared Type space across all namespaces
17413         currently, which is wrong.
17414
17415         Options include making the Namespace a DeclSpace, and merge
17416         current_namespace/current_container in the parser.
17417
17418 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
17419
17420         * cs-parser.jay: Improve error reporting when we get a different
17421         kind of expression in local_variable_type and
17422         local_variable_pointer_type. 
17423
17424         Propagate this to avoid missleading errors being reported.
17425
17426         * ecore.cs (ImplicitReferenceConversion): treat
17427         TypeManager.value_type as a target just like object_type.   As
17428         code like this:
17429
17430         ValueType v = 1;
17431
17432         Is valid, and needs to result in the int 1 being boxed before it
17433         is assigned to the value type v.
17434
17435         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
17436         to validate the enumeration name.
17437
17438         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
17439         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
17440         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
17441
17442         * ecore.cs (TryImplicitIntConversion): When doing an
17443         implicit-enumeration-conversion, check if the type is 64-bits and
17444         perform a conversion before passing to EnumConstant.
17445
17446 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17447
17448         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17449         report ambiguous type references.  Unlike the MS version, we
17450         report what the ambiguity is.   Innovation at work ;-)
17451
17452         (DeclSpace.FindType): Require a location argument to
17453         display when we display an ambiguous error.
17454
17455         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17456
17457         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17458
17459         * expression.cs (EmitDynamicInitializers): Apply patch from
17460         hwang_rob@yahoo.ca that fixes the order in which we emit our
17461         initializers. 
17462
17463 2002-09-21  Martin Baulig  <martin@gnome.org>
17464
17465         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17466         delegate takes no arguments.
17467
17468 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17469
17470         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17471         from integers.
17472
17473         * expression.cs: Extract the underlying type.
17474
17475         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17476
17477         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17478
17479 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17480
17481         * class.cs (TypeContainer.DefineType): We can not use the nice
17482         PackingSize with the size set to 1 DefineType method, because it
17483         will not allow us to define the interfaces that the struct
17484         implements.
17485
17486         This completes the fixing of bug 27287
17487
17488         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17489         means also structs.  This fixes part of the problem. 
17490         (Expresion.ImplicitReferenceConversionExists): ditto.
17491
17492         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17493         error if there were no errors reported during the type lookup
17494         process, to avoid duplicates or redundant errors.  Without this
17495         you would get an ambiguous errors plus a type not found.  We have
17496         beaten the user enough with the first error.  
17497
17498         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17499         reference. 
17500
17501         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17502         during the resolution process, stop the lookup, this avoids
17503         repeated error reports (same error twice).
17504
17505         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17506
17507         * typemanager.cs (LookupType): Redo the type lookup code to match
17508         the needs of System.Reflection.  
17509
17510         The issue is that System.Reflection requires references to nested
17511         types to begin with a "+" sign instead of a dot.  So toplevel
17512         types look like: "NameSpace.TopLevelClass", and nested ones look
17513         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17514         levels. 
17515
17516 2002-09-19  Martin Baulig  <martin@gnome.org>
17517
17518         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17519         says that a method always returns or always throws an exception,
17520         don't report the CS0161.
17521
17522         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17523         set `Returns = new_returns'.
17524
17525 2002-09-19  Martin Baulig  <martin@gnome.org>
17526
17527         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17528         to an enum constant, check for a CS0176.
17529
17530 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17531
17532         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17533         for operators that must be in pairs and report errors.
17534
17535         * ecore.cs (SimpleName.DoResolveType): During the initial type
17536         resolution process, when we define types recursively, we must
17537         check first for types in our current scope before we perform
17538         lookups in the enclosing scopes.
17539
17540         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17541
17542         (Invocation.VerifyArgumentsCompat): Call
17543         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17544         I thought we were supposed to always call this, but there are a
17545         few places in the code where we dont do it.
17546
17547 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17548
17549         * driver.cs: Add support in -linkres and -resource to specify the
17550         name of the identifier.
17551
17552 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17553
17554         * ecore.cs (StandardConversionExists): Sync with the conversion
17555         code: allow anything-* to void* conversions.
17556
17557         (FindMostSpecificSource): Use an Expression argument
17558         instead of a Type, because we might be handed over a Literal which
17559         gets a few more implicit conversions that plain types do not.  So
17560         this information was being lost.
17561
17562         Also, we drop the temporary type-holder expression when not
17563         required.
17564
17565 2002-09-17  Martin Baulig  <martin@gnome.org>
17566
17567         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17568         this is an explicit interface implementation.
17569
17570 2002-09-17  Martin Baulig  <martin@gnome.org>
17571
17572         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
17573         different `IndexerName' attributes.
17574
17575         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
17576         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
17577         virtual CommonResolve().
17578
17579 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17580
17581         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
17582         and convert that to the UnderlyingType.
17583
17584         * statement.cs (Foreach.Resolve): Indexers are just like variables
17585         or PropertyAccesses.
17586
17587         * cs-tokenizer.cs (consume_string): Track line numbers and columns
17588         inside quoted strings, we were not doing this before.
17589
17590 2002-09-16  Martin Baulig  <martin@gnome.org>
17591
17592         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
17593         resolve it.  This is needed for the definite assignment check of the
17594         instance expression, fixes bug #29846.
17595         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
17596
17597 2002-09-16  Nick Drochak  <ndrochak@gol.com>
17598
17599         * parameter.cs: Fix compile error.  Cannot reference static member
17600         from an instance object.  Is this an mcs bug?
17601
17602 2002-09-14  Martin Baulig  <martin@gnome.org>
17603
17604         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
17605         multiple times.  Fixes bug #30295, added test-166.cs.
17606
17607 2002-09-14  Martin Baulig  <martin@gnome.org>
17608
17609         * statement.cs (Block.Emit): Don't emit unreachable code.
17610         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
17611         `break' statements.
17612         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
17613
17614 2002-09-14  Martin Baulig  <martin@gnome.org>
17615
17616         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
17617         is set.
17618
17619 2002-09-14  Martin Baulig  <martin@gnome.org>
17620
17621         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
17622         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
17623         be false on the ms runtime.
17624
17625 2002-09-13  Martin Baulig  <martin@gnome.org>
17626
17627         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
17628         the CS0038 error message.
17629
17630 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
17631
17632         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
17633         constant inside, return it.
17634
17635 2002-09-12  Martin Baulig  <martin@gnome.org>
17636
17637         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
17638         implicit conversion can be done between enum types.
17639
17640         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
17641         check whether an implicit conversion to the current enum's UnderlyingType
17642         exists and report an error if not.
17643
17644         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
17645         without debugging support.
17646
17647         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
17648         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
17649
17650 2002-09-12  Martin Baulig  <martin@gnome.org>
17651
17652         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
17653
17654         * ecore.cs (IMemberExpr.DeclaringType): New property.
17655         (SimpleName.SimpleNameResolve): Check whether we're accessing a
17656         nonstatic member of an outer type (CS0038).
17657
17658 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
17659
17660         * driver.cs: Activate the using-error detector at warning level
17661         4 (at least for MS-compatible APIs).
17662
17663         * namespace.cs (VerifyUsing): Small buglett fix.
17664
17665         * pending.cs (PendingImplementation): pass the container pointer. 
17666
17667         * interface.cs (GetMethods): Allow for recursive definition.  Long
17668         term, I would like to move every type to support recursive
17669         definitions, not the current ordering mechanism that we have right
17670         now.
17671
17672         The situation is this: Attributes are handled before interfaces,
17673         so we can apply attributes to interfaces.  But some attributes
17674         implement interfaces, we will now handle the simple cases
17675         (recursive definitions will just get an error).  
17676
17677         * parameter.cs: Only invalidate types at the end if we fail to
17678         lookup all types.  
17679
17680 2002-09-09  Martin Baulig  <martin@gnome.org>
17681
17682         * ecore.cs (PropertyExpr.Emit): Also check for
17683         TypeManager.system_int_array_get_length so this'll also work when
17684         compiling corlib.  Fixes #30003.
17685
17686 2002-09-09  Martin Baulig  <martin@gnome.org>
17687
17688         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
17689         and throw an exception if we can't get the type's size.  Fixed #30040,
17690         added test-165.cs.
17691
17692 2002-09-09  Martin Baulig  <martin@gnome.org>
17693
17694         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
17695
17696         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
17697         context.  Fixes bug #30027.
17698
17699         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
17700         virtual functions.  Fixes bug #30043, added test-164.cs.
17701
17702 2002-09-08  Ravi Pratap  <ravi@ximian.com>
17703
17704         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
17705
17706 2002-09-08  Nick Drochak  <ndrochak@gol.com>
17707
17708         * driver.cs: Use an object to get the windows codepage since it's not a
17709         static property.
17710
17711 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
17712
17713         * statement.cs (For.Emit): for infinite loops (test == null)
17714         return whether there is a break inside, not always "true".
17715
17716         * namespace.cs (UsingEntry): New struct to hold the name of the
17717         using definition, the location where it is defined, and whether it
17718         has been used in a successful type lookup.
17719
17720         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
17721         strings.
17722
17723         * decl.cs: ditto.
17724
17725 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17726
17727         * attribute.cs : Fix incorrect code which relied on catching
17728         a NullReferenceException to detect a null being passed in
17729         where an object was expected.
17730
17731 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
17732
17733         * statement.cs (Try): flag the catch variable as assigned
17734
17735         * expression.cs (Cast): Simplified by using ResolveType instead of
17736         manually resolving.
17737
17738         * statement.cs (Catch): Fix bug by using ResolveType.
17739
17740 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17741
17742         * expression.cs (BetterConversion): Special case for when we have
17743         a NullLiteral as the argument and we have to choose between string
17744         and object types - we choose string the way csc does.
17745
17746         * attribute.cs (Attribute.Resolve): Catch the
17747         NullReferenceException and report error #182 since the Mono
17748         runtime no more has the bug and having this exception raised means
17749         we tried to select a constructor which takes an object and is
17750         passed a null.
17751
17752 2002-09-05  Ravi Pratap  <ravi@ximian.com>
17753
17754         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
17755         message (1502, 1503) when we can't locate a method after overload
17756         resolution. This is much more informative and closes the bug
17757         Miguel reported.
17758
17759         * interface.cs (PopulateMethod): Return if there are no argument
17760         types. Fixes a NullReferenceException bug.
17761
17762         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
17763         expressions too. Previously we were checking only in one place for
17764         positional arguments leaving out named arguments.
17765
17766         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
17767         type to the enum type is not allowed. Remove code corresponding to
17768         that.
17769
17770         (ConvertNumericExplicit): Allow explicit conversions from
17771         the underlying type to enum type. This precisely follows the spec
17772         and closes a bug filed by Gonzalo.
17773
17774 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17775
17776         * compiler.csproj:
17777         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
17778
17779 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
17780
17781         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
17782         it was important that we stored the right value after the
17783         reduction in `converted'.
17784
17785 2002-09-04  Martin Baulig  <martin@gnome.org>
17786
17787         * location.cs (Location.SymbolDocument): Use full pathnames for the
17788         source files.
17789
17790 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
17791
17792         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
17793         of the expression resolve mechanism, because that will catch the
17794         SimpleName error failures.
17795
17796         (Conditional): If we can not resolve the
17797         expression, return, do not crash.
17798
17799 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17800
17801         * cs-tokenizer.cs:
17802         (location): display token name instead of its number.
17803
17804 2002-08-28  Martin Baulig  <martin@gnome.org>
17805
17806         * expression.cs (Binary.ResolveOperator): Don't silently return
17807         but return an error if an operator cannot be applied between two
17808         enum types.
17809
17810 2002-08-28  Martin Baulig  <martin@gnome.org>
17811
17812         * class.cs (Constructor.Define): Set the permission attributes
17813         correctly instead of making all constructors public.
17814
17815 2002-08-28  Martin Baulig  <martin@gnome.org>
17816
17817         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
17818         for private members before reporting a CS0103; if we find anything,
17819         it's a CS0122.
17820
17821 2002-08-28  Martin Baulig  <martin@gnome.org>
17822
17823         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
17824         to check whether `closure_start_type == closure_invocation_type',
17825         we also need to check whether `m.DeclaringType == closure_invocation_type'
17826         before bypassing the permission checks.  We might be accessing
17827         protected/private members from the base class.
17828         (TypeManager.RealMemberLookup): Only set private_ok if private
17829         members were requested via BindingFlags.NonPublic.
17830
17831         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
17832
17833         * expression.cs (MemberAccess.ResolveMemberAccess): Set
17834         MethodGroupExpr.IsExplicitImpl if appropriate.
17835         (Invocation.DoResolve): Don't report the CS0120 for explicit
17836         interface implementations.
17837
17838 2002-08-27  Martin Baulig  <martin@gnome.org>
17839
17840         * expression.cs (Invocation.DoResolve): If this is a static
17841         method and we don't have an InstanceExpression, we must report
17842         a CS0120.
17843
17844 2002-08-25  Martin Baulig  <martin@gnome.org>
17845
17846         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
17847         `==' between a valuetype and an object.
17848
17849 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
17850
17851         * ecore.cs (TypeExpr): Provide a ToString method.
17852
17853 2002-08-24  Martin Baulig  <martin@gnome.org>
17854
17855         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
17856         now called proggie.dbg and it's a binary file.
17857
17858 2002-08-23  Martin Baulig  <martin@gnome.org>
17859
17860         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
17861
17862 2002-08-23  Martin Baulig  <martin@gnome.org>
17863
17864         * struct.cs (MyStructInfo.ctor): Make this work with empty
17865         structs; it's not allowed to use foreach() on null.
17866
17867 2002-08-23  Martin Baulig  <martin@gnome.org>
17868
17869         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
17870         writer the full pathname of the generated assembly.
17871
17872 2002-08-23  Martin Baulig  <martin@gnome.org>
17873
17874         * statements.cs (FlowBranching.UsageVector.MergeChildren):
17875         A `finally' block never returns or breaks; improved handling of
17876         unreachable code.
17877
17878 2002-08-23  Martin Baulig  <martin@gnome.org>
17879
17880         * statement.cs (Throw.Resolve): Allow `throw null'.
17881
17882 2002-08-23  Martin Baulig  <martin@gnome.org>
17883
17884         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
17885         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
17886         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
17887         MemberLookup would return a wrong event if this is an explicit
17888         interface implementation and the class has an event with the same
17889         name.
17890
17891 2002-08-23  Martin Baulig  <martin@gnome.org>
17892
17893         * statement.cs (Block.AddChildVariableNames): New public method.
17894         (Block.AddChildVariableName): Likewise.
17895         (Block.IsVariableNameUsedInChildBlock): Likewise.
17896         (Block.AddVariable): Check whether a variable name has already
17897         been used in a child block.
17898
17899         * cs-parser.jay (declare_local_variables): Mark all variable names
17900         from the current block as being used in a child block in the
17901         implicit block.
17902
17903 2002-08-23  Martin Baulig  <martin@gnome.org>
17904
17905         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
17906         find the symbol writer.
17907
17908         * driver.cs: csc also allows the arguments to /define being
17909         separated by commas, not only by semicolons.
17910
17911 2002-08-23  Martin Baulig  <martin@gnome.org>
17912
17913         * interface.cs (Interface.GetMembers): Added static check for events.
17914
17915 2002-08-15  Martin Baulig  <martin@gnome.org>
17916
17917         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
17918         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
17919
17920         * ecore.cs (Expression.MemberLookup): Added documentation and explained
17921         why the MethodData.EmitDestructor() change was necessary.
17922
17923 2002-08-20  Martin Baulig  <martin@gnome.org>
17924
17925         * class.cs (TypeContainer.FindMembers): Added static check for events.
17926
17927         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
17928
17929         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
17930         use Type.GetEvents(), not Type.FindMembers().
17931
17932 2002-08-20  Martin Baulig  <martin@gnome.org>
17933
17934         * decl.cs (MemberCache): Added a special method cache which will
17935         be used for method-only searched.  This ensures that a method
17936         search will return a MethodInfo with the correct ReflectedType for
17937         inherited methods.      
17938
17939 2002-08-20  Martin Baulig  <martin@gnome.org>
17940
17941         * decl.cs (DeclSpace.FindMembers): Made this public.
17942
17943 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17944
17945         * delegate.cs: fixed build on windows.
17946         [FIXME:  Filed as bug #29150: MCS must report these errors.]
17947
17948 2002-08-19  Ravi Pratap  <ravi@ximian.com>
17949
17950         * ecore.cs (StandardConversionExists): Return a false
17951         if we are trying to convert the void type to anything else
17952         since that is not allowed.
17953
17954         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
17955         we flag error 70 in the event an event is trying to be accessed
17956         directly from outside the declaring type.
17957
17958 2002-08-20  Martin Baulig  <martin@gnome.org>
17959
17960         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
17961         MemberCache from typemanager.cs to decl.cs.
17962
17963 2002-08-19  Martin Baulig  <martin@gnome.org>
17964
17965         * class.cs (TypeContainer): Implement IMemberContainer.
17966         (TypeContainer.DefineMembers): Create the MemberCache.
17967         (TypeContainer.FindMembers): Do better BindingFlags checking; only
17968         return public members if BindingFlags.Public was given, check
17969         whether members are static.
17970
17971 2002-08-16  Martin Baulig  <martin@gnome.org>
17972
17973         * decl.cs (DeclSpace.Define): Splitted this in Define and
17974         DefineMembers.  DefineMembers is called first and initializes the
17975         MemberCache.
17976
17977         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
17978         DefineMembers() on all our DeclSpaces.
17979
17980         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
17981         but call DefineMembers() on all nested interfaces.  We call their
17982         Define() in our new Define() function.
17983
17984         * interface.cs (Interface): Implement IMemberContainer.
17985         (Interface.Define): Moved all code except the attribute stuf to
17986         DefineMembers().
17987         (Interface.DefineMembers): Initialize the member cache.
17988
17989         * typemanager.cs (IMemberFinder): Removed this interface, we don't
17990         need this anymore since we can use MemberCache.FindMembers directly.
17991
17992 2002-08-19  Martin Baulig  <martin@gnome.org>
17993
17994         * typemanager.cs (MemberCache): When creating the cache for an
17995         interface type, add all inherited members.
17996         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
17997         to `out bool used_cache' and documented it.
17998         (TypeManager.MemberLookup): If we already used the cache in the first
17999         iteration, we don't need to do the interfaces check.
18000
18001 2002-08-19  Martin Baulig  <martin@gnome.org>
18002
18003         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
18004         here from IMemberFinder and don't implement this interface anymore.
18005         (DeclSpace.MemberCache): Moved here from IMemberFinder.
18006
18007         * typemanager.cs (IMemberFinder): This interface is now only used by
18008         classes which actually support the member cache.
18009         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
18010         since we only put DeclSpaces into this Hashtable.
18011         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
18012         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
18013
18014 2002-08-16  Martin Baulig  <martin@gnome.org>
18015
18016         * typemanager.cs (ICachingMemberFinder): Removed.
18017         (IMemberFinder.MemberCache): New property.
18018         (TypeManager.FindMembers): Merged this with RealFindMembers().
18019         This function will never be called from TypeManager.MemberLookup()
18020         so we can't use the cache here, just the IMemberFinder.
18021         (TypeManager.MemberLookup_FindMembers): Check whether the
18022         IMemberFinder has a MemberCache and call the cache's FindMembers
18023         function.
18024         (MemberCache): Rewrote larger parts of this yet another time and
18025         cleaned it up a bit.
18026
18027 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
18028
18029         * driver.cs (LoadArgs): Support quoting.
18030
18031         (Usage): Show the CSC-like command line arguments.
18032
18033         Improved a few error messages.
18034
18035 2002-08-15  Martin Baulig  <martin@gnome.org>
18036
18037         * typemanager.cs (IMemberContainer.Type): New property.
18038         (IMemberContainer.IsInterface): New property.
18039
18040         The following changes are conditional to BROKEN_RUNTIME, which is
18041         defined at the top of the file.
18042
18043         * typemanager.cs (MemberCache.MemberCache): Don't add the base
18044         class'es members, but add all members from TypeHandle.ObjectType
18045         if we're an interface.
18046         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
18047         is the current type.
18048         (MemberCache.CacheEntry.Container): Removed this field.
18049         (TypeHandle.GetMembers): Include inherited members.
18050
18051 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18052
18053         * typemanager.cs: fixed compilation and added a comment on a field that
18054         is never used.
18055
18056 2002-08-15  Martin Baulig  <martin@gnome.org>
18057
18058         * class.cs (ConstructorInitializer.Resolve): In the
18059         Expression.MemberLookup call, use the queried_type as
18060         invocation_type.
18061
18062         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
18063         declared' attribute, it's always true.
18064         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
18065         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
18066         temporary wrapper for FindMembers which tells MemberLookup whether
18067         members from the base classes are included in the return value.
18068         This will go away soon.
18069         (TypeManager.MemberLookup): Use this temporary hack here; once the
18070         new MemberCache is completed, we don't need to do the DeclaredOnly
18071         looping here anymore since the MemberCache will take care of this.
18072         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
18073         (MemberCache): When creating the MemberCache for a class, get
18074         members from the current class and all its base classes.
18075         (MemberCache.CacheEntry.Container): New field.  This is a
18076         temporary hack until the Mono runtime is fixed to distinguish
18077         between ReflectedType and DeclaringType.  It allows us to use MCS
18078         with both the MS runtime and the unfixed Mono runtime without
18079         problems and without accecting performance.
18080         (MemberCache.SearchMembers): The DeclaredOnly looping from
18081         TypeManager.MemberLookup is now done here.      
18082
18083 2002-08-14  Martin Baulig  <martin@gnome.org>
18084
18085         * statement.cs (MyStructInfo.MyStructInfo): Don't call
18086         Type.GetFields on dynamic types but get the fields from the
18087         corresponding TypeContainer.
18088         (MyStructInfo.GetStructInfo): Added check for enum types.
18089
18090         * typemanager.cs (MemberList.IsSynchronized): Implemented.
18091         (MemberList.SyncRoot): Implemented.
18092         (TypeManager.FilterWithClosure): No need to check permissions if
18093         closure_start_type == closure_invocation_type, don't crash if
18094         closure_invocation_type is null.
18095
18096 2002-08-13  Martin Baulig  <martin@gnome.org>
18097
18098         Rewrote TypeContainer.FindMembers to use a member cache.  This
18099         gives us a speed increase of about 35% for the self-hosting MCS
18100         build and of about 15-20% for the class libs (both on GNU/Linux).
18101
18102         * report.cs (Timer): New class to get enhanced profiling.  This
18103         whole class is "TIMER" conditional since it remarkably slows down
18104         compilation speed.
18105
18106         * class.cs (MemberList): New class.  This is an IList wrapper
18107         which we're now using instead of passing MemberInfo[]'s around to
18108         avoid copying this array unnecessarily.
18109         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
18110         (ICachingMemberFinder, IMemberContainer): New interface.
18111         (TypeManager.FilterWithClosure): If `criteria' is null, the name
18112         has already been checked, otherwise use it for the name comparision.
18113         (TypeManager.FindMembers): Renamed to RealMemberFinder and
18114         provided wrapper which tries to use ICachingMemberFinder.FindMembers
18115         if possible.  Returns a MemberList, not a MemberInfo [].
18116         (TypeHandle): New class, implements IMemberContainer.  We create
18117         one instance of this class per type, it contains a MemberCache
18118         which is used to do the member lookups.
18119         (MemberCache): New class.  Each instance of this class contains
18120         all members of a type and a name-based hash table.
18121         (MemberCache.FindMembers): This is our new member lookup
18122         function.  First, it looks up all members of the requested name in
18123         the hash table.  Then, it walks this list and sorts out all
18124         applicable members and returns them.
18125
18126 2002-08-13  Martin Baulig  <martin@gnome.org>
18127
18128         In addition to a nice code cleanup, this gives us a performance
18129         increase of about 1.4% on GNU/Linux - not much, but it's already
18130         half a second for the self-hosting MCS compilation.
18131
18132         * typemanager.cs (IMemberFinder): New interface.  It is used by
18133         TypeManager.FindMembers to call FindMembers on a TypeContainer,
18134         Enum, Delegate or Interface.
18135         (TypeManager.finder_to_member_finder): New PtrHashtable.
18136         (TypeManager.finder_to_container): Removed.
18137         (TypeManager.finder_to_delegate): Removed.
18138         (TypeManager.finder_to_interface): Removed.
18139         (TypeManager.finder_to_enum): Removed.
18140
18141         * interface.cs (Interface): Implement IMemberFinder.
18142
18143         * delegate.cs (Delegate): Implement IMemberFinder.
18144
18145         * enum.cs (Enum): Implement IMemberFinder.
18146
18147         * class.cs (TypeContainer): Implement IMemberFinder.
18148
18149 2002-08-12  Martin Baulig  <martin@gnome.org>
18150
18151         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
18152
18153 2002-08-12  Martin Baulig  <martin@gnome.org>
18154
18155         * ecore.cs (ITypeExpression): New interface for expressions which
18156         resolve to a type.
18157         (TypeExpression): Renamed to TypeLookupExpression.
18158         (Expression.DoResolve): If we're doing a types-only lookup, the
18159         expression must implement the ITypeExpression interface and we
18160         call DoResolveType() on it.
18161         (SimpleName): Implement the new ITypeExpression interface.
18162         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
18163         hack, the situation that we're only looking up types can't happen
18164         anymore when this method is called.  Moved the type lookup code to
18165         DoResolveType() and call it.
18166         (SimpleName.DoResolveType): This ITypeExpression interface method
18167         is now doing the types-only lookup.
18168         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
18169         (ResolveFlags): Added MaskExprClass.
18170
18171         * expression.cs (MemberAccess): Implement the ITypeExpression
18172         interface.
18173         (MemberAccess.DoResolve): Added support for a types-only lookup
18174         when we're called via ITypeExpression.DoResolveType().
18175         (ComposedCast): Implement the ITypeExpression interface.
18176
18177         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
18178         Expression.Resolve() with ResolveFlags.Type instead.
18179
18180 2002-08-12  Martin Baulig  <martin@gnome.org>
18181
18182         * interface.cs (Interface.Define): Apply attributes.
18183
18184         * attribute.cs (Attribute.ApplyAttributes): Added support for
18185         interface attributes.
18186
18187 2002-08-11  Martin Baulig  <martin@gnome.org>
18188
18189         * statement.cs (Block.Emit): Only check the "this" variable if we
18190         do not always throw an exception.
18191
18192         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
18193         whether the property has a set accessor.
18194
18195 2002-08-11  Martin Baulig  <martin@gnome.org>
18196
18197         Added control flow analysis support for structs.
18198
18199         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
18200         with control flow analysis turned off.
18201         (IVariable): New interface.
18202         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
18203         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
18204         (FieldExpr.DoResolve): Resolve the instance expression with flow
18205         analysis turned off and do the definite assignment check after the
18206         resolving when we know what the expression will resolve to.
18207
18208         * expression.cs (LocalVariableReference, ParameterReference):
18209         Implement the new IVariable interface, only call the flow analysis
18210         code if ec.DoFlowAnalysis is true.
18211         (This): Added constructor which takes a Block argument.  Implement
18212         the new IVariable interface.
18213         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
18214         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
18215         This does the definite assignment checks for struct members.
18216
18217         * class.cs (Constructor.Emit): If this is a non-static `struct'
18218         constructor which doesn't have any initializer, call
18219         Block.AddThisVariable() to tell the flow analysis code that all
18220         struct elements must be initialized before control returns from
18221         the constructor.
18222
18223         * statement.cs (MyStructInfo): New public class.
18224         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
18225         argument to this indexer.  If non-zero, check an individual struct
18226         member, not the whole struct.
18227         (FlowBranching.CheckOutParameters): Check struct members.
18228         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
18229         overloaded versions of these methods which take an additional
18230         `int field_idx' argument to check struct members.
18231         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
18232         overloaded versions of these methods which take an additional
18233         `string field_name' argument to check struct member.s
18234         (VariableInfo): Implement the IVariable interface.
18235         (VariableInfo.StructInfo): New public property.  Returns the
18236         MyStructInfo instance of the variable if it's a struct or null.
18237         (Block.AddThisVariable): New public method.  This is called from
18238         Constructor.Emit() for non-static `struct' constructor which do
18239         not have any initializer.  It creates a special variable for the
18240         "this" instance variable which will be checked by the flow
18241         analysis code to ensure that all of the struct's fields are
18242         initialized before control returns from the constructor.
18243         (UsageVector): Added support for struct members.  If a
18244         variable/parameter is a struct with N members, we reserve a slot
18245         in the usage vector for each member.  A struct is considered fully
18246         initialized if either the struct itself (slot 0) or all its
18247         members are initialized.
18248
18249 2002-08-08  Martin Baulig  <martin@gnome.org>
18250
18251         * driver.cs (Driver.MainDriver): Only report an error CS5001
18252         if there were no compilation errors.
18253
18254         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
18255         `UnsafeContext' property to determine whether the parent is in
18256         unsafe context rather than checking the parent's ModFlags:
18257         classes nested in an unsafe class are unsafe as well.
18258
18259 2002-08-08  Martin Baulig  <martin@gnome.org>
18260
18261         * statement.cs (UsageVector.MergeChildren): Distinguish between
18262         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
18263         we return.  Added test17() and test18() to test-154.cs.
18264
18265 2002-08-08  Martin Baulig  <martin@gnome.org>
18266
18267         * typemanager.cs (TypeManager.FilterWithClosure): If we have
18268         Family access, make sure the invoking type isn't a subclass of the
18269         queried type (that'd be a CS1540).
18270
18271         * ecore.cs (Expression.MemberLookup): Added overloaded version of
18272         this method which takes an additional `Type invocation_type'.
18273
18274         * expression.cs (BaseAccess.DoResolve): Use the base type as
18275         invocation and query type.
18276         (MemberAccess.DoResolve): If the lookup failed and we're about to
18277         report a CS0122, try a lookup with the ec.ContainerType - if this
18278         succeeds, we must report a CS1540.
18279
18280 2002-08-08  Martin Baulig  <martin@gnome.org>
18281
18282         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
18283         (MethodGroupExpr): Implement the IMemberExpr interface.
18284
18285         * expression (MemberAccess.ResolveMemberAccess): No need to have
18286         any special code for MethodGroupExprs anymore, they're now
18287         IMemberExprs.   
18288
18289 2002-08-08  Martin Baulig  <martin@gnome.org>
18290
18291         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
18292         Family, FamANDAssem and FamORAssem permissions.
18293         (TypeManager.IsSubclassOrNestedChildOf): New public method.
18294
18295 2002-08-08  Martin Baulig  <martin@gnome.org>
18296
18297         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
18298         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
18299         or loop block.
18300
18301 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
18302
18303         * driver.cs: implemented /resource option to embed managed resources.
18304
18305 2002-08-07  Martin Baulig  <martin@gnome.org>
18306
18307         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
18308         (FieldBase.HasFieldInitializer): New public property.
18309         (FieldBase.GetInitializerExpression): New public method.  Resolves and
18310         returns the field initializer and makes sure it is only resolved once.
18311         (TypeContainer.EmitFieldInitializers): Call
18312         FieldBase.GetInitializerExpression to get the initializer, this ensures
18313         that it isn't resolved multiple times.
18314
18315         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
18316         the resolving process (SimpleName/MemberLookup) that we're currently
18317         emitting a field initializer (which must not access any instance members,
18318         this is an error CS0236).
18319
18320         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
18321         argument, if the `IsFieldInitializer' flag is set, we must report and
18322         error CS0236 and not an error CS0120.   
18323
18324 2002-08-07  Martin Baulig  <martin@gnome.org>
18325
18326         * ecore.cs (IMemberExpr): New public interface.
18327         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
18328         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
18329         if the expression is an IMemberExpr.
18330
18331         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
18332         to be null, implicitly default to `this' if we're non-static in
18333         this case.  Simplified the code a lot by using the new IMemberExpr
18334         interface.  Also fixed bug #28176 here.
18335
18336 2002-08-06  Martin Baulig  <martin@gnome.org>
18337
18338         * cs-parser.jay (SimpleLookup): Removed.  We need to create
18339         ParameterReferences during semantic analysis so that we can do a
18340         type-only search when resolving Cast, TypeOf and SizeOf.
18341         (block): Pass the `current_local_parameters' to the Block's
18342         constructor.
18343
18344         * class.cs (ConstructorInitializer): Added `Parameters parameters'
18345         argument to the constructor.
18346         (ConstructorInitializer.Resolve): Create a temporary implicit
18347         block with the parameters.
18348
18349         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
18350         references here if we aren't doing a type-only search.
18351
18352         * statement.cs (Block): Added constructor which takes a
18353         `Parameters parameters' argument.
18354         (Block.Parameters): New public property.
18355
18356         * support.cs (InternalParameters.Parameters): Renamed `parameters'
18357         to `Parameters' and made it public readonly.
18358
18359 2002-08-06  Martin Baulig  <martin@gnome.org>
18360
18361         * ecore.cs (Expression.Warning): Made this public as well.
18362
18363         * report.cs (Report.Debug): Print the contents of collections.
18364
18365 2002-08-06  Martin Baulig  <martin@gnome.org>
18366
18367         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
18368         used to tell Resolve() which kinds of expressions it may return.
18369         (Expression.Resolve): Added overloaded version of this method which
18370         takes a `ResolveFlags flags' argument.  This can be used to tell
18371         Resolve() which kinds of expressions it may return.  Reports a
18372         CS0118 on error.
18373         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
18374         ResolveFlags.SimpleName.
18375         (Expression.Error118): Added overloaded version of this method which
18376         takes a `ResolveFlags flags' argument.  It uses the flags to determine
18377         which kinds of expressions are allowed.
18378
18379         * expression.cs (Argument.ResolveMethodGroup): New public method.
18380         Resolves an argument, but allows a MethodGroup to be returned.
18381         This is used when invoking a delegate.
18382
18383         * TODO: Updated a bit.
18384
18385 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18386
18387         Fixed compilation with csc.
18388
18389         * ecore.cs: Expression.Error made public. Is this correct? Should
18390         Warning be made public too?
18391
18392         * expression.cs: use ea.Location instead of ea.loc.
18393         [FIXME:  Filed as bug #28607: MCS must report these errors.]
18394
18395 2002-08-06  Martin Baulig  <martin@gnome.org>
18396
18397         * ecore.cs (Expression.loc): Moved the location here instead of
18398         duplicating it in all derived classes.
18399         (Expression.Location): New public property.
18400         (Expression.Error, Expression.Warning): Made them non-static and
18401         removed the location argument.
18402         (Expression.Warning): Added overloaded version which takes an
18403         `int level' argument.
18404         (Expression.Error118): Make this non-static and removed the
18405         expression and location arguments.
18406         (TypeExpr): Added location argument to the constructor.
18407
18408         * expression.cs (StaticCallExpr): Added location argument to
18409         the constructor.
18410         (Indirection, PointerArithmetic): Likewise.
18411         (CheckedExpr, UnCheckedExpr): Likewise.
18412         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
18413         (StringPtr): Likewise.
18414
18415
18416 2002-08-05  Martin Baulig  <martin@gnome.org>
18417
18418         * expression.cs (BaseAccess.DoResolve): Actually report errors.
18419
18420         * assign.cs (Assign.DoResolve): Check whether the source
18421         expression is a value or variable.
18422
18423         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
18424         while resolving the corresponding blocks.
18425
18426         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
18427         an error, don't silently return null.
18428
18429         * statement.cs (Block.AddVariable): Do the error reporting here
18430         and distinguish between CS0128 and CS0136.
18431         (Block.DoResolve): Report all unused labels (warning CS0164).
18432         (LabeledStatement): Pass the location to the constructor.
18433         (LabeledStatement.HasBeenReferenced): New property.
18434         (LabeledStatement.Resolve): Set it to true here.
18435
18436         * statement.cs (Return.Emit): Return success even after reporting
18437         a type mismatch error (CS0126 or CS0127), this is what csc does and
18438         it avoids confusing the users with any consecutive errors.
18439
18440 2002-08-05  Martin Baulig  <martin@gnome.org>
18441
18442         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18443
18444         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18445
18446         * expression.cs (MemberAccess.DoResolve): Silently return if an
18447         error has already been reported.
18448
18449         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18450         error has already been reported.
18451
18452 2002-08-05  Martin Baulig  <martin@gnome.org>
18453
18454         * statement.cs (UsageVector): Only initialize the `parameters'
18455         vector if we actually have any "out" parameters.
18456
18457 2002-08-05  Martin Baulig  <martin@gnome.org>
18458
18459         * expression.cs (Binary.ResolveOperator): When combining delegates,
18460         they must have the same type.
18461
18462 2002-08-05  Martin Baulig  <martin@gnome.org>
18463
18464         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18465         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18466         work with the ms runtime and we also don't need it: if we're a
18467         PropertyBuilder and not in the `indexer_arguments' hash, then we
18468         are a property and not an indexer.
18469
18470         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18471         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18472         since the latter one doesn't work with the ms runtime.
18473
18474 2002-08-03  Martin Baulig  <martin@gnome.org>
18475
18476         Fixed bugs #27998 and #22735.
18477
18478         * class.cs (Method.IsOperator): New public field.
18479         (Method.CheckBase): Report CS0111 if there's already a method
18480         with the same parameters in the current class.  Report CS0508 when
18481         attempting to change the return type of an inherited method.
18482         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18483         and it's not marked abstract or extern.
18484         (PropertyBase): New abstract base class for Property and Indexer.
18485         (PropertyBase.CheckBase): Moved here from Property and made it work
18486         for indexers.
18487         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18488         the same so we can reuse it there.
18489         (Property, Indexer): Derive from PropertyBase.
18490         (MethodSignature.inheritable_property_signature_filter): New delegate
18491         to find properties and indexers.
18492
18493         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18494         argument and improved error reporting.
18495
18496         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18497         EmptyReadOnlyParameters and made it a property.
18498
18499         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18500         version of this method which takes a `PropertyInfo indexer'.
18501         (TypeManager.RegisterIndexer): New method.
18502
18503         * class.cs: Added myself as author of this file :-)
18504
18505 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18506
18507         * class.cs: fixed compilation on windoze.
18508
18509 2002-08-03  Martin Baulig  <martin@gnome.org>
18510
18511         * interface.cs (Interface.GetInterfaceBases): Check whether all
18512         base interfaces are at least as accessible than the current one.
18513
18514         * class.cs (TypeContainer.GetClassBases): Check whether base types
18515         are at least as accessible than the current type.
18516         (TypeContainer.AsAccessible): Implemented and made non-static.
18517         (MemberBase.CheckParameters): Report errors if the accessibility
18518         checks fail.
18519
18520         * delegate.cs (Delegate.Delegate): The default visibility is
18521         internal for top-level types and private for nested types.
18522         (Delegate.Define): Report errors if the accessibility checks fail.
18523
18524         * enum.cs (Enum.Enum): The default visibility is internal for
18525         top-level types and private for nested types.
18526         (Enum.DefineType): Compute the correct visibility.
18527
18528         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18529         function which takes a `bool is_toplevel' instead of a TypeContainer.
18530
18531         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18532         builtin type.
18533
18534 2002-08-02  Martin Baulig  <martin@gnome.org>
18535
18536         * expression.cs (LocalVariableReferenc): Added constructor which
18537         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18538         (LocalVariableReference.IsReadOnly): New property.
18539         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18540         variable is readonly, use our own readonly flag to do this; you can
18541         use the new constructor to get a writable reference to a read-only
18542         variable.
18543
18544         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18545         reference to the local variable.
18546
18547 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18548
18549         * rootcontext.cs (ResolveCore): Also include System.Exception
18550
18551         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18552         we reach an EmptyStatement.
18553
18554         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18555         is also fine.
18556
18557         * expression.cs (Binary.ResolveOperator): Check error result in
18558         two places.
18559
18560         use brtrue/brfalse directly and avoid compares to null.
18561
18562 2002-08-02  Martin Baulig  <martin@gnome.org>
18563
18564         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18565         Fixes bug #28407, added test-155.cs.
18566
18567 2002-08-01  Martin Baulig  <martin@gnome.org>
18568
18569         * class.cs (Event.EmitDefaultMethod): Make this work with static
18570         events.  Fixes #28311, added verify-3.cs.
18571
18572 2002-08-01  Martin Baulig  <martin@gnome.org>
18573
18574         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
18575         `is_disposable' fields.
18576         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
18577         `hm.is_disposable' if we're using the collection pattern.
18578         (Foreach.EmitCollectionForeach): Use the correct type for the
18579         enumerator's local variable, only emit the try/finally block if
18580         necessary (fixes #27713).
18581
18582 2002-08-01  Martin Baulig  <martin@gnome.org>
18583
18584         * ecore.cs (Expression.report118): Renamed to Error118 and made
18585         it public static.
18586
18587         * statement.cs (Throw.Resolve): Check whether the expression is of
18588         the correct type (CS0118) and whether the type derives from
18589         System.Exception (CS0155).
18590         (Catch.Resolve): New method.  Do the type lookup here and check
18591         whether it derives from System.Exception (CS0155).
18592         (Catch.CatchType, Catch.IsGeneral): New public properties.
18593
18594         * typemanager.cs (TypeManager.exception_type): Added.
18595
18596 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
18597
18598         * driver.cs: Updated About function.
18599
18600 2002-07-31  Martin Baulig  <martin@gnome.org>
18601
18602         Implemented Control Flow Analysis.
18603
18604         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
18605         (EmitContext.CurrentBranching): Added.
18606         (EmitContext.StartFlowBranching): Added.
18607         (EmitContext.EndFlowBranching): Added.
18608         (EmitContext.KillFlowBranching): Added.
18609         (EmitContext.IsVariableAssigned): Added.
18610         (EmitContext.SetVariableAssigned): Added.
18611         (EmitContext.IsParameterAssigned): Added.
18612         (EmitContext.SetParameterAssigned): Added.
18613         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
18614         Added control flow analysis stuff here.
18615
18616         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
18617         resolve the expression as lvalue.
18618         (LocalVariableReference.DoResolve): Check whether the variable has
18619         already been assigned.
18620         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
18621         the parameter as assigned here.
18622         (ParameterReference.DoResolve): Check whether the parameter has already
18623         been assigned.
18624         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
18625         expression as lvalue.
18626
18627         * statement.cs (FlowBranching): New class for the flow analysis code.
18628         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
18629         (LabeledStatement.IsDefined): New public property.
18630         (LabeledStatement.AddUsageVector): New public method to tell flow
18631         analyis that the label may be reached via a forward jump.
18632         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
18633         flow analysis.
18634         (VariableInfo.Number): New public field.  This is used by flow analysis
18635         to number all locals of a block.
18636         (Block.CountVariables): New public property.  This is the number of
18637         local variables in this block (including the locals from all parent
18638         blocks).
18639         (Block.EmitMeta): Number all the variables.
18640
18641         * statement.cs: Added flow analysis support to all classes.
18642
18643 2002-07-31  Martin Baulig  <martin@gnome.org>
18644
18645         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
18646         To get debugging messages, compile mcs with /define:MCS_DEBUG and
18647         then use this argument.
18648
18649         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
18650
18651         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
18652         use this to specify /define options.
18653
18654 2002-07-29  Martin Baulig  <martin@gnome.org>
18655
18656         * statement.cs (Fixed): Moved all code that does variable lookups
18657         and resolvings from Emit to Resolve.
18658
18659         * statement.cs (For): Moved all code that does variable lookups
18660         and resolvings from Emit to Resolve.
18661
18662         * statement.cs (Using): Moved all code that does variable lookups
18663         and resolvings from Emit to Resolve.
18664
18665 2002-07-29  Martin Baulig  <martin@gnome.org>
18666
18667         * attribute.cs (Attribute.Resolve): Explicitly catch a
18668         System.NullReferenceException when creating the
18669         CustromAttributeBuilder and report a different warning message.
18670
18671 2002-07-29  Martin Baulig  <martin@gnome.org>
18672
18673         * support.cs (ParameterData.ParameterName): Added method to
18674         get the name of a parameter.
18675
18676         * typemanager.cs (TypeManager.IsValueType): New public method.
18677
18678 2002-07-29  Martin Baulig  <martin@gnome.org>
18679
18680         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
18681         is a flag which specifies that it's either ref or out.
18682         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
18683         the out parameter to `out Parameter.Modifier mod', also set the
18684         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
18685
18686         * support.cs (InternalParameters.ParameterModifier): Distinguish
18687         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18688         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18689
18690         * expression.cs (Argument.GetParameterModifier): Distinguish
18691         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18692         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18693
18694 2002-07-29  Martin Baulig  <martin@gnome.org>
18695
18696         * expression.cs (ParameterReference.ParameterReference): Added
18697         `Location loc' argument to the constructor.
18698
18699         * cs-parser.jay: Pass location to ParameterReference.
18700
18701 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
18702
18703         * statement.cs (Try): Initialize the location.
18704
18705         * cs-parser.jay: pass location to Try.
18706
18707         * expression.cs (Unary.Reduce): Change the prototype to return
18708         whether a constant fold could be performed or not.  The result is
18709         returned in an out parameters.  In the case of Indirection and
18710         AddressOf, we want to perform the full tests.
18711
18712 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
18713
18714         * statement.cs (Statement.Emit): Flag dead code.
18715
18716 2002-07-27  Andrew Birkett  <andy@nobugs.org>
18717
18718         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
18719
18720 2002-07-27  Martin Baulig  <martin@gnome.org>
18721
18722         * class.cs (MethodData.Define): Put back call to
18723         TypeManager.AddMethod(), accidentally commented this out.
18724
18725         * report.cs (Debug): New public method to print debugging information,
18726         this is `[Conditional ("DEBUG")]'.
18727
18728 2002-07-26  Martin Baulig  <martin@gnome.org>
18729
18730         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
18731         (switch_statement): Push the current_block to the switch_stack and
18732         pop it again when we're done with the switch.
18733         (switch_section): The new block is a child of the current_block.
18734         Fixes bug #24007, added test-152.cs.
18735
18736 2002-07-27  Martin Baulig  <martin@gnome.org>
18737
18738         * expression.cs (Invocation.EmitArguments): When calling a varargs
18739         function with only its fixed arguments, we need to pass an empty
18740         array.
18741
18742 2002-07-27  Martin Baulig  <martin@gnome.org>
18743
18744         Mono 0.13 has been released.
18745
18746 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
18747
18748         * driver.cs: Rename --resource to --linkres, because that is what
18749         we do currently, we dont support --resource yet.
18750
18751         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
18752
18753 2002-07-25  Martin Baulig  <martin@gnome.org>
18754
18755         * class.cs (MethodData): New public class.  This is a `method builder'
18756         class for a method or one accessor of a Property/Indexer/Event.
18757         (MethodData.GetMethodFlags): Moved here from MemberBase.
18758         (MethodData.ApplyAttributes): Likewise.
18759         (MethodData.ApplyObsoleteAttribute): Likewise.
18760         (MethodData.ApplyConditionalAttribute): Likewise.
18761         (MethodData.ApplyDllImportAttribute): Likewise.
18762         (MethodData.CheckAbstractAndExternal): Likewise.
18763         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
18764         (MethodData.Emit): Formerly known as Method.Emit().
18765         (MemberBase): Moved everything which was specific to a single
18766         accessor/method to MethodData.
18767         (Method): Create a new MethodData and call Define() and Emit() on it.
18768         (Property, Indexer, Event): Create a new MethodData objects for each
18769         accessor and call Define() and Emit() on them.
18770
18771 2002-07-25  Martin Baulig  <martin@gnome.org>
18772
18773         Made MethodCore derive from MemberBase to reuse the code from there.
18774         MemberBase now also checks for attributes.
18775
18776         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
18777         (MemberBase.GetMethodFlags): Moved here from class Method and marked
18778         as virtual.
18779         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
18780         `CallingConventions cc' and `Attributes opt_attrs' arguments.
18781         (MemberBase.ApplyAttributes): New virtual method; applies the
18782         attributes to a method or accessor.
18783         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
18784         (MemberBase.ApplyConditionalAttribute): Likewise.
18785         (MemberBase.ApplyDllImportAttribute): Likewise.
18786         (MemberBase.CheckAbstractAndExternal): Likewise.
18787         (MethodCore.ParameterTypes): This is now a property instead of a
18788         method, it's initialized from DoDefineParameters().
18789         (MethodCore.ParameterInfo): Removed the set accessor.
18790         (MethodCore.DoDefineParameters): New protected virtual method to
18791         initialize ParameterTypes and ParameterInfo.
18792         (Method.GetReturnType): We can now simply return the MemberType.
18793         (Method.GetMethodFlags): Override the MemberBase version and add
18794         the conditional flags.
18795         (Method.CheckBase): Moved some code from Define() here, call
18796         DoDefineParameters() here.
18797         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
18798         here to avoid some larger code duplication.
18799         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
18800         ensure that abstract and external accessors don't declare a body.
18801
18802         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
18803         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
18804         lookup in the attribute's parent classes, so we need to abort as soon
18805         as we found the first match.
18806         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
18807         the attribute has no arguments.
18808
18809         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
18810         of a Method.
18811
18812 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18813
18814         * cs-parser.jay: reverted previous patch.
18815
18816 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18817
18818         * cs-parser.jay: fixed bug #22119.
18819
18820 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18821
18822         * attribute.cs: fixed compilation. The error was:
18823         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
18824         be assigned to before control leaves the current method."
18825         [FIXME:  Filed as bug #28186: MCS must report this error.]
18826
18827 2002-07-25  Martin Baulig  <martin@gnome.org>
18828
18829         * attribute.cs (Attribute.Conditional_GetConditionName): New static
18830         method to pull the condition name ouf of a Conditional attribute.
18831         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
18832         the obsolete message and error flag out of an Obsolete attribute.
18833
18834         * class.cs (Method.GetMethodFlags): New public method to get the
18835         TypeManager.MethodFlags for this method.
18836         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
18837         private methods.
18838         (Method.Define): Get and apply the Obsolete and Conditional attributes;
18839         if we're overriding a virtual function, set the new private variable
18840         `parent_method'; call the new TypeManager.AddMethod().
18841
18842         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
18843         the MethodBuilder and the Method in a PtrHashtable.
18844         (TypeManager.builder_to_method): Added for this purpose.
18845         (TypeManager.MethodFlags): Added IsObsoleteError.
18846         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
18847         Obsolete and Conditional arguments in MethodBuilders.  If we discover
18848         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
18849         the message from the attribute.
18850
18851 2002-07-24  Martin Baulig  <martin@gnome.org>
18852
18853         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
18854         preprocessor directives, ensure that the argument to #define/#undef is
18855         exactly one identifier and that it's actually an identifier.
18856
18857         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
18858         did not work ....
18859
18860 2002-07-24  Martin Baulig  <martin@gnome.org>
18861
18862         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
18863         initialize it to TypeManager.object_type in the constructor.
18864         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
18865         of the `hm.get_current' method if we're using the collection pattern.
18866         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
18867         for the explicit conversion to make it work when we're using the collection
18868         pattern and the `Current' property has a different return type than `object'.
18869         Fixes #27713.
18870
18871 2002-07-24  Martin Baulig  <martin@gnome.org>
18872
18873         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
18874         does not match, but don't report any errors.  This method is called in
18875         order for all methods in a MethodGroupExpr until a matching method is
18876         found, so we don't want to bail out if the first method doesn't match.
18877         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
18878         matches, report the 123.  Fixes #28070.
18879
18880 2002-07-24  Martin Baulig  <martin@gnome.org>
18881
18882         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
18883         TypeManager.TypeToCoreType() to the top of the method so the
18884         following equality checks will work.  Fixes #28107.
18885
18886 2002-07-24  Martin Baulig  <martin@gnome.org>
18887
18888         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
18889         operand is of type uint, and the other operand is of type sbyte,
18890         short or int, the operands are converted to type long." -
18891         Actually do what this comment already told us.  Fixes bug #28106,
18892         added test-150.cs.
18893
18894 2002-07-24  Martin Baulig  <martin@gnome.org>
18895
18896         * class.cs (MethodBase): New abstract class.  This is now a base
18897         class for Property, Indexer and Event to avoid some code duplication
18898         in their Define() and DefineMethods() methods.
18899         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
18900         generic methods for Define() and DefineMethods().
18901         (FieldBase): Derive from MemberBase, not MemberCore.
18902         (Property): Derive from MemberBase, not MemberCore.
18903         (Property.DefineMethod): Moved all the code from this method to the
18904         new MethodBase.DefineAccessor(), just call it with appropriate
18905         argumetnts.
18906         (Property.Define): Call the new Property.DoDefine(), this does some
18907         sanity checks and we don't need to duplicate the code everywhere.
18908         (Event): Derive from MemberBase, not MemberCore.
18909         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
18910         accessors, this will also make them work with interface events.
18911         (Indexer): Derive from MemberBase, not MemberCore.
18912         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
18913         (Indexer.Define): Use the new MethodBase functions.
18914
18915         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
18916         argument to the constructor.
18917         (Interface.FindMembers): Added support for interface events.
18918         (Interface.PopluateEvent): Implemented.
18919
18920         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
18921
18922 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
18923
18924         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
18925         but this is required to check for a method name being the same as
18926         the containing class.  
18927
18928         Handle this now.
18929
18930 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18931
18932         * interface.cs: initialize variable.
18933
18934 2002-07-23  Martin Baulig  <martin@gnome.org>
18935
18936         Implemented the IndexerName attribute in interfaces.
18937
18938         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
18939         name if this is an explicit interface implementation.
18940         (Indexer.InterfaceIndexerName): New public variable.  If we're
18941         implementing an interface indexer, this is the IndexerName in that
18942         interface.  Otherwise, it's the IndexerName.
18943         (Indexer.DefineMethod): If we're implementing interface indexer,
18944         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
18945         and Pending.ImplementIndexer methods.
18946         (Indexer.Define): Also define the PropertyBuilder if we're
18947         implementing an interface indexer and this is neither an explicit
18948         interface implementation nor do the IndexerName match the one in
18949         the interface.
18950
18951         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
18952         If a method is defined here, then we always need to create a proxy
18953         for it.  This is used when implementing interface indexers.
18954         (Pending.IsInterfaceIndexer): New public method.
18955         (Pending.ImplementIndexer): New public method.
18956         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
18957         This is used when implementing interface indexers to define a proxy
18958         if necessary.
18959         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
18960         define a proxy if necessary.
18961
18962         * interface.cs (Interface.IndexerName): New public variable.
18963         (Interface.PopulateIndexer): Set the IndexerName.
18964         (Interface.DefineIndexers): New private method.  Populate all the
18965         indexers and make sure their IndexerNames match.
18966
18967         * typemanager.cs (IndexerPropertyName): Added support for interface
18968         indexers.
18969
18970 2002-07-22  Martin Baulig  <martin@gnome.org>
18971
18972         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
18973         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
18974         ret if HasReturnLabel.
18975         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
18976         variables.
18977
18978         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
18979         and set the ec.LoopBeginTryCatchLevel.
18980         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
18981         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
18982         the current ec.TryCatchLevel, the branch goes out of an exception
18983         block.  In this case, we need to use Leave and not Br.
18984
18985 2002-07-22  Martin Baulig  <martin@gnome.org>
18986
18987         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
18988         block unless the block does not always return or it is contained in
18989         another try { ... } catch { ... } block.  Fixes bug #26506.
18990         Added verify-1.cs to the test suite.
18991
18992 2002-07-22  Martin Baulig  <martin@gnome.org>
18993
18994         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
18995         then we do not always return.  Fixes bug #24985.
18996
18997 2002-07-22  Martin Baulig  <martin@gnome.org>
18998
18999         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
19000         lookup on a per-class level; ie. walk up the class hierarchy until we
19001         found at least one applicable method, then choose the best among them.
19002         Fixes bug #24463 and test-29.cs.
19003
19004 2002-07-22  Martin Baulig  <martin@gnome.org>
19005
19006         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
19007         return types of the methods.  The return type is not part of the
19008         signature and we must not check it to make the `new' modifier work.
19009         Fixes bug #27999, also added test-147.cs.
19010         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
19011
19012         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
19013         on the method's return type.
19014
19015 2002-07-21  Martin Baulig  <martin@gnome.org>
19016
19017         * assign.cs: Make this work if the rightmost source is a constant and
19018         we need to do an implicit type conversion.  Also adding a few more tests
19019         to test-38.cs which should have caught this.
19020
19021         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
19022         target in the makefile for this.  The makefile.gnu is primarily intended
19023         for end-users who don't want to debug the compiler.
19024
19025 2002-07-21  Martin Baulig  <martin@gnome.org>
19026
19027         * assign.cs: Improved the Assign class so it can now handle embedded
19028         assignments (X = Y = Z = something).  As a side-effect this'll now also
19029         consume less local variables.  test-38.cs now passes with MCS, added
19030         a few new test cases to that test.
19031
19032 2002-07-20  Martin Baulig  <martin@gnome.org>
19033
19034         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
19035         instructions.  Fixes bug #27977, also added test-146.cs.
19036
19037 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19038
19039         * cs-tokenizer.cs: fixed getHex ().
19040
19041 2002-07-19  Martin Baulig  <martin@gnome.org>
19042
19043         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
19044         not Type.GetType() to lookup the array type.  This is needed when
19045         we're constructing an array of a user-defined type.
19046         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
19047         single-dimensional arrays, but also for single-dimensial arrays of
19048         type decimal.
19049
19050 2002-07-19  Martin Baulig  <martin@gnome.org>
19051
19052         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
19053         this function is called, it's not allowed to share LocalBuilders
19054         among ILGenerators.
19055
19056 2002-07-19  Martin Baulig  <martin@gnome.org>
19057
19058         * expression.cs (Argument.Resolve): Report an error 118 when trying
19059         to pass a type as argument.
19060
19061 2002-07-18  Martin Baulig  <martin@gnome.org>
19062
19063         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
19064         Conv_R_Un for the signed `long' type.
19065
19066 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
19067
19068         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
19069         `expr' for the temporary result, as that will fail if we do
19070         multiple resolves on the same expression.
19071
19072 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
19073
19074         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
19075         ec.TypeContainer for looking up aliases. 
19076
19077         * class.cs (TypeContainer): Remove LookupAlias from here.
19078
19079         * decl.cs (DeclSpace); Move here.
19080
19081 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
19082
19083         * class.cs (FindMembers): Only call filter if the constructor
19084         bulider is not null.
19085
19086         Also handle delegates in `NestedTypes' now.  Now we will perform
19087         type lookups using the standard resolution process.  This also
19088         fixes a bug.
19089
19090         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
19091         This uses Expressions (the limited kind that can be parsed by the
19092         tree) instead of strings.
19093
19094         * expression.cs (ComposedCast.ToString): Implement, used to flag
19095         errors since now we have to render expressions.
19096
19097         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
19098         FormArrayType. 
19099
19100         * ecore.cs (SimpleName.ToString): ditto.
19101
19102         * cs-parser.jay: Instead of using strings to assemble types, use
19103         Expressions to assemble the type (using SimpleName, ComposedCast,
19104         MemberAccess).  This should fix the type lookups in declarations,
19105         because we were using a different code path for this.
19106
19107         * statement.cs (Block.Resolve): Continue processing statements
19108         even when there is an error.
19109
19110 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
19111
19112         * class.cs (Event.Define): Also remove the `remove' method from
19113         the list of pending items.
19114
19115         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
19116         generate more compact code. 
19117
19118 2002-07-17  Martin Baulig  <martin@gnome.org>
19119
19120         * const.cs (Const.LookupConstantValue): Add support for constant
19121         `unchecked' and `checked' expressions.
19122         Also adding test case test-140.cs for this.
19123
19124 2002-07-17  Martin Baulig  <martin@gnome.org>
19125
19126         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
19127         check whether mi.ReturnType implements the IEnumerator interface; the
19128         `==' and the IsAssignableFrom() will fail in this situation.
19129
19130 2002-07-16  Ravi Pratap  <ravi@ximian.com>
19131
19132         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
19133         here too.
19134
19135 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19136
19137         * expression.cs: fixed bug #27811.
19138
19139 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
19140
19141         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
19142         Molaro: when we are a ref, the value already contains a pointer
19143         value, do not take the address of it.
19144
19145 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
19146         * removed mb-parser.jay and mb-tokenizer.cs
19147
19148 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19149
19150         * expression.cs: check against the building corlib void type.
19151
19152 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
19153
19154         * ecore.cs: fix for valuetype static readonly fields: when 
19155         initializing them, we need their address, not the address of a copy.
19156
19157 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
19158
19159         * typemanager.cs: register also enum_type in corlib.
19160
19161 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19162
19163         * class.cs: allow calling this (but not base) initializers in structs.
19164
19165 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
19166
19167         * ecore.cs: make sure we compare against the building base types
19168         in GetTypeSize ().
19169
19170 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
19171
19172         * typemanager.cs: fix TypeToCoreType() to handle void and object
19173         (corlib gets no more typerefs after this change).
19174
19175 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
19176
19177         * expression.cs (ArrayCreation.EmitArrayArguments): use
19178         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
19179
19180         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
19181         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
19182         array indexes, the runtime actually forbids them.
19183
19184         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
19185         for array arguments here.
19186
19187         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
19188         instead of the default for ValueTypes.
19189
19190         (New.DoEmit): Use IsValueType instead of
19191         IsSubclassOf (value_type)
19192         (New.DoResolve): ditto.
19193         (Invocation.EmitCall): ditto.
19194
19195         * assign.cs (Assign): ditto.
19196
19197         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
19198         Statements *are* currently doing part of their resolution during
19199         Emit.  
19200
19201         Expressions do always resolve during resolve, but statements are
19202         only required to propagate resolution to their children.
19203
19204 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
19205
19206         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
19207
19208         (LoadAssembly): Do not add the dll if it is already specified
19209
19210         (MainDriver): Add the System directory to the link path at the end,
19211         after all the other -L arguments. 
19212
19213         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
19214         wrong opcode for loading bytes and bools (ldelem.i1 instead of
19215         ldelem.u1) and using the opposite for sbytes.
19216
19217         This fixes Digger, and we can finally run it.
19218
19219         * driver.cs (UnixParseOption): Move the option parsing here.  
19220         (CSCParseOption): Implement CSC-like parsing of options.
19221
19222         We now support both modes of operation, the old Unix way, and the
19223         new CSC-like way.  This should help those who wanted to make cross
19224         platform makefiles.
19225
19226         The only thing broken is that /r:, /reference: and /lib: are not
19227         implemented, because I want to make those have the same semantics
19228         as the CSC compiler has, and kill once and for all the confussion
19229         around this.   Will be doing this tomorrow.
19230
19231         * statement.cs (Unsafe.Resolve): The state is checked during
19232         resolve, not emit, so we have to set the flags for IsUnsfe here.
19233
19234 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19235
19236         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
19237         not catch the Error_ObjectRefRequired in SimpleName (as it is
19238         possible to have a class/instance variable name that later gets
19239         deambiguated), we have to check this here.      
19240
19241 2002-07-10  Ravi Pratap  <ravi@ximian.com>
19242
19243         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
19244         make static and put into Expression.
19245
19246         (Event.Define): Register the private field of the event with the 
19247         TypeManager so that GetFieldFromEvent can get at it.
19248
19249         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
19250         keep track of the private field associated with an event which
19251         has no accessors.
19252
19253         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
19254         private field.
19255
19256         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
19257
19258 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19259
19260         * expression.cs (Binary.EmitBranchable): this routine emits the
19261         Binary expression in a branchable context.  This basically means:
19262         we need to branch somewhere, not just get the value on the stack.
19263
19264         This works together with Statement.EmitBoolExpression.
19265
19266         * statement.cs (Statement.EmitBoolExpression): Use
19267         EmitBranchable. 
19268
19269 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
19270
19271         * statement.cs (For): Reduce the number of jumps in loops.
19272
19273         (For): Implement loop inversion for the For statement.
19274
19275         (Break): We can be breaking out of a Try/Catch controlled section
19276         (foreach might have an implicit try/catch clause), so we need to
19277         use Leave instead of Br.
19278
19279         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
19280         now).  If the instace expression supports IMemoryLocation, we use
19281         the AddressOf method from the IMemoryLocation to extract the
19282         address instead of emitting the instance.
19283
19284         This showed up with `This', as we were emitting the instance
19285         always (Emit) instead of the Address of This.  Particularly
19286         interesting when This is a value type, as we dont want the Emit
19287         effect (which was to load the object).
19288
19289 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
19290
19291         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
19292
19293         * statement.cs (Checked): Set the CheckedState during the resolve
19294         process too, as the ConvCast operations track the checked state on
19295         the resolve process, and not emit.
19296
19297         * cs-parser.jay (namespace_member_declaration): Flag that we have
19298         found a declaration when we do.  This is used to flag error 1529
19299
19300         * driver.cs: Report ok when we display the help only.
19301
19302 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
19303
19304         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
19305
19306 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
19307
19308         * cs-tokenizer.cs (define): We also have to track locally the
19309         defines.  AllDefines is just used for the Conditional Attribute,
19310         but we also need the local defines for the current source code. 
19311
19312 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
19313
19314         * statement.cs (While, For, Do): These loops can exit through a
19315         Break statement, use this information to tell whether the
19316         statement is the last piece of code.
19317
19318         (Break): Flag that we break.
19319
19320         * codegen.cs (EmitContexts): New `Breaks' state variable.
19321
19322 2002-07-03  Martin Baulig  <martin@gnome.org>
19323
19324         * class.cs (TypeContainer.MethodModifiersValid): Allow override
19325         modifiers in method declarations in structs.  Otherwise, you won't
19326         be able to override things like Object.Equals().
19327
19328 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19329
19330         * class.cs (Method, Property, Indexer): Do not allow the public
19331         modifier to be used in explicit interface implementations.
19332
19333         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
19334         override modifiers in method declarations in structs
19335
19336 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
19337
19338         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
19339         integer or real overflow, report an error
19340
19341 2002-07-02  Martin Baulig  <martin@gnome.org>
19342
19343         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
19344         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
19345         to tell the runtime about our newly created System.Object and
19346         System.ValueType types.
19347
19348 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19349
19350         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
19351         struct instead of Ldarg/Starg.
19352
19353 2002-07-02  Martin Baulig  <martin@gnome.org>
19354
19355         * expression.cs (Indirection.Indirection): Call
19356         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
19357
19358 2002-07-02  Martin Baulig  <martin@gnome.org>
19359
19360         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
19361         ValueType, call TypeManager.TypeToCoreType() on it.
19362         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
19363         the OpCodes.Newarr argument.
19364
19365 2002-07-02  Martin Baulig  <martin@gnome.org>
19366
19367         * expression.cs (Invocation.EmitCall): When compiling corlib,
19368         replace all calls to the system's System.Array type to calls to
19369         the newly created one.
19370
19371         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
19372         System.Array methods.
19373         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
19374         from the system's System.Array type which must be replaced.
19375
19376 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
19377
19378         * typemanager.cs: load unverifiable_code_ctor so we can build
19379         corlib using the correct type. Avoid using GetTypeCode() with
19380         TypeBuilders.
19381         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
19382         TypeManager.object_type to allow building corlib.
19383
19384 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
19385
19386         * ecore.cs: handle System.Enum separately in LoadFromPtr().
19387
19388 2002-07-01  Martin Baulig  <martin@gnome.org>
19389
19390         * class.cs: Make the last change actually work, we need to check
19391         whether `ifaces != null' to avoid a crash.
19392
19393 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19394
19395         * class.cs: when we build structs without fields that implement
19396         interfaces, we need to add the interfaces separately, since there is
19397         no API to both set the size and add the interfaces at type creation
19398         time.
19399
19400 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19401
19402         * expression.cs: the dimension arguments to the array constructors
19403         need to be converted if they are a long.
19404
19405 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
19406
19407         * class.cs: don't emit ldarg.0 if there is no parent constructor
19408         (fixes showstopper for corlib).
19409
19410 2002-06-29  Martin Baulig  <martin@gnome.org>
19411
19412         MCS now compiles corlib on GNU/Linux :-)
19413
19414         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
19415         ie. check for MethodImplOptions.InternalCall.
19416
19417         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
19418         and TypeManager.attribute_type are null, so we must explicitly check
19419         whether parent is not null to find out whether it's an attribute type.
19420         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
19421         and SetBuilder, not only if the property is neither abstract nor external.
19422         This is necessary to set the MethodImplOptions on the accessor methods.
19423         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
19424         SetBuilder, see Property.Emit().
19425
19426         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
19427         populate "System.Object", "System.ValueType" and "System.Attribute" since
19428         they've already been populated from BootCorlib_PopulateCoreTypes().
19429
19430 2002-06-29  Martin Baulig  <martin@gnome.org>
19431
19432         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
19433         is the NullLiteral, we also need to make sure that target_type is not
19434         an enum type.   
19435
19436 2002-06-29  Martin Baulig  <martin@gnome.org>
19437
19438         * rootcontext.cs (RootContext.ResolveCore): We must initialize
19439         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
19440         before calling BootstrapCorlib_ResolveDelegate ().
19441
19442 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19443
19444         * statement.cs: fixed build-breaker. All tests passed ok.
19445
19446 2002-06-27  Martin Baulig  <martin@gnome.org>
19447
19448         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19449         for System.Decimal when compiling corlib.
19450
19451 2002-06-27  Martin Baulig  <martin@gnome.org>
19452
19453         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19454         switch blocks which contain nothing but a default clause.
19455
19456 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19457
19458        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19459
19460 2002-06-27  Martin Baulig  <martin@gnome.org>
19461
19462         * ecore.cs (PropertyExpr.PropertyExpr): Call
19463         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19464
19465         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19466         is already a TypeBuilder.
19467
19468 2002-06-27  Martin Baulig  <martin@gnome.org>
19469
19470         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19471         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19472         the "from an array-type to System.Array" case.  This makes it work
19473         when compiling corlib.
19474
19475 2002-06-27  Martin Baulig  <martin@gnome.org>
19476
19477         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19478         non-static PropertyExpr, set its InstanceExpression.  This makes
19479         the `ICollection.Count' property work in System/Array.cs.
19480
19481 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19482
19483         * driver.cs: Made error handling more consistent.  Errors now
19484         tracked by Report class, so many methods which used to return int
19485         now return void.  Main() now prints success/failure and 
19486         errors/warnings message.
19487
19488         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19489         the magic number return values (123 and 124).  Now, if the
19490         expected error occurs, the compiler exits with success (exit value
19491         0).  If the compilation completes without seeing that particular
19492         error, the compiler exits with failure (exit value 1).  The
19493         makefile in mcs/errors has been changed to handle the new behaviour.
19494
19495         * report.cs: Made 'expected error' number a property and renamed
19496         it from 'Probe' to 'ExpectedError'.
19497
19498         * genericparser.cs: Removed error handling support, since it is
19499         now all done by Report class.
19500
19501         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19502         class, so parse() no longer returns an int.
19503
19504         * namespace.cs: Use Report.Error instead of GenericParser.error
19505
19506 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19507
19508         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19509         TypeContainer.AddOperator): At the front of the list put the
19510         explicit implementations, so they get resolved/defined first. 
19511
19512 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19513
19514         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19515         interface type is implemented by this TypeContainer.  Used during
19516         explicit interface implementation.
19517
19518         (Property.Define, Indexer.Define, Method.Define): Validate that
19519         the given interface in the explicit implementation is one of the
19520         base classes for the containing type.
19521
19522         Also if we are explicitly implementing an interface, but there is
19523         no match in the pending implementation table, report an error.
19524
19525         (Property.Define): Only define the property if we are
19526         not explicitly implementing a property from an interface.  Use the
19527         correct name also for those properties (the same CSC uses,
19528         although that is really not needed).
19529
19530         (Property.Emit): Do not emit attributes for explicitly implemented
19531         properties, as there is no TypeBuilder.
19532
19533         (Indexer.Emit): ditto.
19534
19535         Hiding then means that we do not really *implement* a pending
19536         implementation, which makes code fail.
19537
19538 2002-06-22  Martin Baulig  <martin@gnome.org>
19539
19540         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19541         the return value of Object.GetType().  [FIXME: we need to do this whenever
19542         we get a type back from the reflection library].
19543
19544 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19545
19546         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19547
19548 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19549
19550         * attribute.cs: Return null if we can not look up the type.
19551
19552         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19553         the interface types found.
19554
19555         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19556         interface types found.
19557
19558         * typemanager.cs (GetInterfaces): Make this routine returns alll
19559         the interfaces and work around the lame differences between
19560         System.Type and System.Reflection.Emit.TypeBuilder in the results
19561         result for GetInterfaces.
19562
19563         (ExpandInterfaces): Given an array of interface types, expand and
19564         eliminate repeated ocurrences of an interface.  This expands in
19565         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19566         be IA, IB, IC.
19567
19568 2002-06-21  Martin Baulig  <martin@gnome.org>
19569
19570         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19571         on System.Enum.
19572
19573 2002-06-21  Martin Baulig  <martin@gnome.org>
19574
19575         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
19576         and called with one of the core types, return the corresponding typebuilder for
19577         that type.
19578
19579         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
19580         element type.
19581
19582 2002-06-21  Martin Baulig  <martin@gnome.org>
19583
19584         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
19585         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
19586         (Expression.ConvertReferenceExplicit): Likewise.
19587
19588         * expression.cs (ElementAccess.DoResolve): Likewise.
19589         (ElementAccess.DoResolveLValue): Likewise.
19590
19591 2002-06-10  Martin Baulig  <martin@gnome.org>
19592
19593         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
19594         add the "value" parameter to the parameter list.
19595
19596         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
19597         to our caller.
19598
19599 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
19600
19601         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
19602         the argument to an int, uint, long or ulong, per the spec.  Also
19603         catch negative constants in array creation.
19604
19605 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
19606
19607         * class.cs: do not allow the same interface to appear twice in
19608         the definition list.
19609
19610 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
19611
19612         * ecore.cs: don't use ldlen with System.Array.
19613
19614 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
19615
19616         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
19617
19618 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
19619
19620         * modifiers.cs: produce correct field attributes for protected
19621         internal. Easy fix so miguel can work on ther harder stuff:-)
19622
19623 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
19624
19625         * pending.cs: New file.  Move the code from class.cs here.
19626         Support clearning the pending flag for all methods (when not doing
19627         explicit interface implementation).
19628
19629 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
19630
19631         * rootcontext.cs: added a couple more types needed to bootstrap.
19632
19633 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
19634
19635         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
19636         constructor in the type, instead of any constructor in the type
19637         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
19638         a bug in the Mono runtime when applying the params attribute). 
19639
19640 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
19641         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
19642
19643 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
19644
19645         * expression.cs (Unary.ResolveOperator): Use TypeManager
19646         to resolve the type.
19647
19648 2002-06-13  Ravi Pratap  <ravi@ximian.com>
19649
19650         * cs-parser.jay (enum_member_declaration): Pass in the attributes
19651         attached.
19652
19653         * enum.cs (AddEnumMember): Add support to store the attributes associated 
19654         with each member too.
19655
19656         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
19657         field builders too - this takes care of the enum member case.
19658
19659 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
19660
19661         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
19662         address-of operator on both value types and pointers.
19663
19664 2002-06-10  Martin Baulig  <martin@gnome.org>
19665
19666         * interface.cs (Interface.PopulateIndexer): Add the indexer's
19667         PropertyBuilder to the `property_builders' list.
19668
19669         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
19670         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
19671         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
19672         find any indexers which are inherited from an interface.
19673
19674 2002-06-09  Martin Baulig  <martin@gnome.org>
19675
19676         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
19677         the same type as the constant if necessary.  There's also a test-130.cs
19678         for this.
19679
19680         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
19681
19682         * typemanager.cs (TypeManager.ChangeType): Previously known as
19683         Enum.ChangeEnumType().
19684
19685 2002-06-09  Martin Baulig  <martin@gnome.org>
19686
19687         * expression.cs (Cast.TryReduce): Added support for consts.
19688
19689 2002-06-08  Ravi Pratap  <ravi@ximian.com>
19690
19691         * class.cs (Accessor): Hold attributes information so we can pass
19692         it along.
19693
19694         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
19695         Modify to pass in attributes attached to the methods.
19696
19697         (add_accessor_declaration, remove_accessor_declaration): Ditto.
19698
19699         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
19700         to handle the Accessor kind :-)
19701
19702         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
19703
19704 2002-06-08  Martin Baulig  <martin@gnome.org>
19705
19706         * expression.cs (Unary.TryReduceNegative): Added support for
19707         ULongConstants.
19708
19709 2002-06-08  Martin Baulig  <martin@gnome.org>
19710
19711         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
19712         name can't be found in the `defined_names' - the caller will do a
19713         MemberLookup in this case and thus find methods in System.Enum
19714         such as Enum.IsDefined().
19715
19716 2002-06-08  Martin Baulig  <martin@gnome.org>
19717
19718         * enum.cs (Enum.ChangeEnumType): This is a custom version of
19719         Convert.ChangeType() which works with TypeBuilder created types.
19720         (Enum.LookupEnumValue, Enum.Define): Use it here.
19721
19722         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
19723         `TypeBuilder.BaseType != null' check.
19724         (TypeContainer.FindMembers): Only lookup parent members if we
19725         actually have a parent.
19726         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
19727         (ConstructorInitializer.Resolve): Likewise.
19728
19729         * interface.cs (Interface.FindMembers): Added
19730         `TypeBuilder.BaseType != null' check.
19731
19732         * rootcontext.cs (RootContext.ResolveCore): Added
19733         "System.Runtime.CompilerServices.IndexerNameAttribute" to
19734         classes_second_stage.
19735
19736         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
19737         debug_type and trace_type when compiling with --nostdlib.       
19738
19739 2002-06-07  Martin Baulig  <martin@gnome.org>
19740
19741         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
19742         (AddField): Set it to true when adding a non-static field.
19743         (DefineType): Use `have_nonstatic_fields' to find out whether we
19744         have non-static fields, not `Fields != null'.
19745
19746 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
19747
19748         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
19749         dereferencing a null on the static-field code path)
19750
19751 2002-05-30  Martin Baulig  <martin@gnome.org>
19752
19753         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
19754         to take command line arguments.  Use reflection to call the new
19755         custom `Initialize' function on the symbol writer and pass it the
19756         command line arguments.
19757
19758         * driver.cs (--debug-args): New command line argument to pass command
19759         line arguments to the symbol writer.
19760
19761 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
19762
19763         * assign.cs (DoResolve): Forgot to do the implicit conversion to
19764         the target type for indexers and properties.  Thanks to Joe for
19765         catching this.
19766
19767 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
19768
19769         * typemanager.cs (MethodFlags): returns the method flags
19770         (Obsolete/ShouldIgnore) that control warning emission and whether
19771         the invocation should be made, or ignored. 
19772
19773         * expression.cs (Invocation.Emit): Remove previous hack, we should
19774         not do this on matching a base type, we should do this based on an attribute
19775
19776         Only emit calls to System.Diagnostics.Debug and
19777         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
19778         on the command line.
19779
19780         * rootcontext.cs: Global settings for tracing and debugging.
19781
19782         * cs-tokenizer.cs (define): New utility function to track
19783         defines.   Set the global settings for TRACE and DEBUG if found.
19784
19785 2002-05-25  Ravi Pratap  <ravi@ximian.com>
19786
19787         * interface.cs (Populate*): Pass in the TypeContainer as well as
19788         the DeclSpace as parameters so that we can create EmitContexts and
19789         then use that to apply attributes etc.
19790
19791         (PopulateMethod, PopulateEvent, PopulateProperty)
19792         (PopulateIndexer): Apply attributes everywhere.
19793
19794         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
19795         etc.
19796
19797         (ApplyAttributes): Update accordingly.
19798
19799         We now apply interface attributes for all members too.
19800
19801 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
19802
19803         * class.cs (Indexer.Define); Correctly check if we are explicit
19804         implementation (instead of checking the Name for a ".", we
19805         directly look up if the InterfaceType was specified).
19806
19807         Delay the creation of the PropertyBuilder.
19808
19809         Only create the PropertyBuilder if we are not an explicit
19810         interface implementation.   This means that explicit interface
19811         implementation members do not participate in regular function
19812         lookups, and hence fixes another major ambiguity problem in
19813         overload resolution (that was the visible effect).
19814
19815         (DefineMethod): Return whether we are doing an interface
19816         implementation. 
19817
19818         * typemanager.cs: Temporary hack until we get attributes in
19819         interfaces (Ravi is working on that) and we get IndexerName
19820         support in interfaces.
19821
19822         * interface.cs: Register the indexers as properties.
19823
19824         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
19825         warning, I have verified that this is a bug in the .NET runtime
19826         (JavaScript suffers of the same problem).
19827
19828         * typemanager.cs (MemberLookup): When looking up members for
19829         interfaces, the parent of an interface is the implicit
19830         System.Object (so we succeed in searches of Object methods in an
19831         interface method invocation.  Example:  IEnumerable x;  x.ToString
19832         ()) 
19833
19834 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
19835
19836         * class.cs (Event): Events should also register if they do
19837         implement the methods that an interface requires.
19838
19839         * typemanager.cs (MemberLookup); use the new GetInterfaces
19840         method. 
19841
19842         (GetInterfaces): The code used to lookup interfaces for a type is
19843         used in more than one place, factor it here. 
19844
19845         * driver.cs: Track the errors at the bottom of the file, we kept
19846         on going.
19847
19848         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
19849         instance if the method we are calling is static!
19850
19851 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
19852
19853         * attribute.cs (ApplyAttributes): Make this function filter out
19854         the IndexerName attribute (as that attribute in reality is never
19855         applied) and return the string constant for the IndexerName
19856         attribute. 
19857
19858         * class.cs (TypeContainer.Emit): Validate that all the indexers
19859         have the same IndexerName attribute, and if so, set the
19860         DefaultName attribute on the class. 
19861
19862         * typemanager.cs: The return value might contain other stuff (not
19863         only methods).  For instance, consider a method with an "Item"
19864         property and an Item method.
19865
19866         * class.cs: If there is a problem with the parameter types,
19867         return. 
19868
19869 2002-05-24  Ravi Pratap  <ravi@ximian.com>
19870
19871         * ecore.cs (ImplicitConversionExists): Wrapper function which also
19872         looks at user defined conversion after making a call to 
19873         StandardConversionExists - we need this for overload resolution.
19874
19875         * expression.cs : Update accordingly the various method calls.
19876
19877         This fixes 2 bugs filed against implicit user defined conversions 
19878
19879 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
19880
19881         * statement.cs: Track the result of the assignment.
19882
19883 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
19884
19885         * expression.cs (MemberAccess): Improved error reporting for
19886         inaccessible members.
19887
19888 2002-05-22  Martin Baulig  <martin@gnome.org>
19889
19890         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
19891         itself with debugging support.
19892
19893 2002-05-22  Martin Baulig  <martin@gnome.org>
19894
19895         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
19896         Removed, this isn't needed anymore.
19897
19898 2002-05-20  Martin Baulig  <martin@gnome.org>
19899
19900         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
19901         be underlying type for an enum.
19902
19903 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
19904
19905         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
19906         that splits out the loading of just the core types.
19907
19908         * rootcontext.cs (ResolveCore): Split the struct resolution in
19909         two, so we can load the enumeration underlying types before any
19910         enums are used.
19911
19912         * expression.cs (Is): Bandaid until we fix properly Switch (see
19913         bug #24985 for details).
19914
19915         * typemanager.cs (ImplementsInterface): The hashtable will contain
19916         a null if there are no interfaces implemented.
19917
19918 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
19919
19920         * cs-parser.jay (indexer_declarator): It is fine to have array
19921         parameters
19922
19923 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19924
19925         * typemanager.cs: (RegisterBuilder): New function used to register
19926         TypeBuilders that implement interfaces.  Since
19927         TypeBuilder.GetInterfaces (as usual) does not work with lame
19928         Reflection.Emit. 
19929         (AddUserType): register interfaces.
19930
19931         (ImplementsInterface): Use the builder_to_ifaces hash if we are
19932         dealing with TypeBuilder.  Also, arrays are showing up as
19933         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
19934         methods can not be invoked on them!
19935
19936         * ecore.cs (ExplicitReferenceConversionExists): Made public.
19937         (ImplicitReferenceConversionExists): Split out from
19938         StandardConversionExists. 
19939
19940         * expression.cs (As): We were only implementing one of the three
19941         cases for the as operator.  We now implement them all.
19942         (Is): Implement the various other cases for Is as well.
19943
19944         * typemanager.cs (CACHE): New define used to control if we want or
19945         not the FindMembers cache.  Seems to have a negative impact on
19946         performance currently
19947
19948         (MemberLookup): Nested types have full acess to
19949         enclosing type members
19950
19951         Remove code that coped with instance/static returns for events, we
19952         now catch this in RealFindMembers.
19953
19954         (RealFindMembers): only perform static lookup if the instance
19955         lookup did not return a type or an event.  
19956
19957 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19958
19959         * assign.cs (CompoundAssign): We pass more semantic information
19960         now to Compound Assignments than we did before: now we have all
19961         the information at hand, and now we resolve the target *before* we
19962         do the expression expansion, which allows the "CacheValue" method
19963         to have the effect we intended (before, a [x] += 1 would generate
19964         two differen ArrayAccess expressions from the ElementAccess,
19965         during the resolution process).
19966
19967         (CompoundAssign.DoResolve): Resolve target and original_source here.
19968
19969 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
19970
19971         * expression.cs (ArrayAccess): dropped debugging information. 
19972
19973         * typemanager.cs: Small bug fix: I was always returning i_members,
19974         instead of one of i_members or s_members (depending on which had
19975         the content).
19976
19977         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
19978         method is invoked before any code generation takes place, and it
19979         is a mechanism to inform that the expression will be invoked more
19980         than once, and that the method should use temporary values to
19981         avoid having side effects
19982
19983         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
19984
19985         * ecore.cs (Expression.CacheTemporaries): Provide empty default
19986         implementation.
19987
19988         * expression.cs (Indirection, ArrayAccess): Add support for
19989         CacheTemporaries in these two bad boys. 
19990
19991         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
19992         ldobj or ldind_ref.  
19993         (StoreFromPtr): Handle stobj as well.
19994
19995         * expression.cs (UnaryMutator): Share more code.
19996
19997         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
19998         down: I was not tracking the Filter function as well, which
19999         was affecting the results of the cache.
20000
20001 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
20002
20003         * attribute.cs: Remove the hack to handle the CharSet property on
20004         StructLayouts. 
20005
20006 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
20007
20008         * attribute.cs (DoResolve): More uglyness, we now only try to
20009         resolve the attribute partially, to extract the CharSet
20010         information (only if we are a StructLayout attribute).  Otherwise 
20011
20012         (GetExtraTypeInfo): Add some code to conditionally kill in the
20013         future this.   I am more and more convinced that the .NET
20014         framework has special code to handle the attribute setting on
20015         certain elements.
20016
20017         * expression.cs (IsParamsMethodApplicable): Revert my previous
20018         foreach change here, it was wrong.
20019
20020 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
20021
20022         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
20023         (pp_expr): do not abort on unknown input, just return.
20024         (eval): abort if there are pending chars.
20025
20026         * attribute.cs (Attribute.Resolve): Positional parameters are
20027         optional.  Deal with that case.
20028
20029         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
20030         the Ansi/Unicode/Auto information for the type.
20031
20032         (TypeContainer.DefineType): instantiate the EmitContext here, as
20033         we will be using it during the type definition (to resolve
20034         attributes) and during the emit phase.
20035
20036         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
20037         to pull type information out of the attributes
20038
20039         (Attribute.Resolve): track the constructor builder, and allow for
20040         multiple invocations (structs and classes will use this).
20041
20042         * ecore.cs (MemberLookupFinal): new version with all the
20043         parameters customizable.
20044
20045         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
20046         constructors.  Return if the result value is null (as the error
20047         would have been flagged already by MemberLookupFinal)
20048
20049         Do not allow instances of abstract classes or interfaces to be
20050         created.
20051
20052         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
20053         We have to compare the assembly property here when dealing with
20054         FamANDAssem and Assembly access modifiers, because we might be
20055         creating an assembly from *modules* (that means that we are not
20056         getting TypeBuilders for types defined in other modules that are
20057         part of this assembly).
20058
20059         (Method.Emit): If the method is marked abstract and has a body,
20060         emit an error. 
20061
20062         (TypeContainer.DefineMembers): If both the defined member and the
20063         parent name match are methods, then do not emit any warnings: let
20064         the Method.Define routine take care of flagging warnings.  But if
20065         there is a mismatch (method overrides something else, or method is
20066         overriwritten by something, then emit warning).
20067
20068         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
20069         set to null, this means `do not check for the return type on the
20070         signature'. 
20071
20072         (Method.Define): set the return type for the method signature to
20073         null, so that we get methods with the same name and parameters and
20074         different return types.  This is used to flag warning 114 (you are
20075         hiding a method, and you probably want to use the new/override
20076         keywords instead).
20077
20078         * typemanager.cs (MemberLookup): Implemented proper access
20079         control, closing a long standing set of bug reports.  The problem
20080         was that the Framework only has two bits: Public and NonPublic,
20081         and NonPublic includes private and protected methods, but we need
20082         to enforce the FamANDAssem, FamOrAssem and Family. 
20083
20084 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
20085
20086         * statement.cs (GotoCase): Return true: Ammounts to giving up
20087         knowledge on whether we return or not, and letting the other case
20088         be responsible for it.
20089
20090 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
20091
20092         * driver.cs: Do not load directories for each file processed, only
20093         do it if there is a pattern.
20094
20095         * ecore.cs: Report readonly assigns here as well, as we might have
20096         been resolved only by MemberAccess.
20097
20098         (SimpleName.SimpleNameResolve): Also be useful for LValue
20099         resolution.   We need this to propagate assign to local readonly variables
20100
20101         * typemanager.cs: Use a ptrhashtable for the criteria, because we
20102         do not want to reuse potential criteria memory.
20103
20104         * class.cs (MyEventBuilder): Set reflected_type;
20105
20106         * ecore.cs (Constantify): Added support for constifying bools.
20107
20108         (RootContext.LookupType): Added a cache for values looked up in
20109         the declaration space.
20110
20111         * typemanager.cs (FindMembers): Now is a front-end to
20112         RealFindMembers, and provides a two-level hashtable-based cache to
20113         the request.  
20114
20115         15% performance improvement: from 22.5 to 19.2 seconds.
20116
20117         * expression.cs (IsParamsMethodApplicable): use foreach.
20118         (Invocation.DoResolve): ditto.
20119         (New.DoResolve): ditto.
20120         (ArrayCreation.DoResolve): ditto.
20121
20122         * ecore.cs (FindMostEncompassingType): use foreach.
20123
20124         * delegate.cs (NewDelegate.DoResolve): Use foreach
20125
20126         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
20127         (RemoveMethods): use foreach.
20128
20129         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
20130         nested foreach statements instead of for, and also break out of
20131         the inner loop once a match is found.
20132
20133         (Invocation.OverloadResolve): Use foreach, simplify the code. 
20134
20135 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
20136
20137         * cfold.cs (BinaryFold): During an enumeration evaluation context,
20138         we actually unwrap the expression to allow for extra information
20139         to be extracted. 
20140
20141         * expression.cs: Use Shr_Un on unsigned operations. 
20142
20143 2002-05-08  Ravi Pratap  <ravi@ximian.com>
20144
20145         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
20146         applicable operators was not being considered correctly. This closes
20147         the bug Miguel reported.
20148
20149 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
20150
20151         * attribute.cs: check that the type derives from System.Attribute
20152         and report the correct error in that case (moved the duplicate code to
20153         its own method, too).
20154
20155 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
20156
20157         * attribute.cs: lookup attribute type name as the spec says: first the
20158         bare attribute name and then name + "Attribute" (nant compiles with
20159         mcs after this fix).
20160
20161 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
20162
20163         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
20164         Because of the way we parse things, we should try to see if a
20165         UIntConstant can fit in an integer.
20166
20167 2002-05-07  Ravi Pratap  <ravi@ximian.com>
20168
20169         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
20170         when we are in an explicit context.
20171
20172         (ConvertReferenceExplicit): When converting from Iface type S to Class
20173         T make sure the rules are implemented as an OR.
20174
20175         * parameter.cs (ParameterType): Make it a property for now although the
20176         purpose really isn't anything immediate.
20177
20178         * expression.cs (Is*Applicable): Do better checking on the parameter type
20179         of a ref/out parameter. The ones from the system assemblies are already 
20180         marked with the correct type so we don't need to do any correction.
20181
20182         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
20183         the object type is standard too so include that.
20184
20185 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20186
20187         * ecore.cs (StandardConversionExists): Augment with missing code:
20188         deal with IntConstant, LongConstants and Enumerations.
20189
20190         * assign.cs: Report the error, instead of failing silently
20191
20192         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
20193         typecontainer that they are declared, because the
20194         typecontainer/namespace will have the list of using clauses that
20195         need to be applied.
20196
20197         Assembly Attributes were escaping the normal registration
20198         mechanism. 
20199
20200         (EmitCode): Apply attributes within an EmitContext that represents
20201         the container they were declared on.
20202
20203         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
20204
20205 2002-05-06  Ravi Pratap  <ravi@ximian.com>
20206
20207         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
20208         Revamp completely - make much cleaner as we now operate only
20209         on a set of Types.
20210
20211         (FindMostSpecificSource, FindMostSpecificTarget): New methods
20212         to implement the logic detailed in the spec more correctly.
20213
20214         (UserDefinedConversion): Update accordingly.
20215
20216 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20217
20218         * statement.cs: Return flow analysis information up.
20219
20220         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
20221         and the default.
20222
20223         (token): Do not consume an extra character before calling
20224         decimal_digits.
20225
20226 2002-05-06  Piers Haken <piersh@friskit.com>
20227
20228         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
20229
20230 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20231
20232         * class.cs (Constructor.Emit): Set the IsStatic flag in the
20233         EmitContext during the instance constructor initializer
20234         resolution, to stop access to instance variables.
20235
20236         This is mandated by the spec, last paragraph of the `constructor
20237         initializers' section. 
20238
20239 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
20240
20241         * cs-parser.jay, class.cs (Accessor): new class used to represent
20242         an accessor (get or set).  In the past we used `null' to represent
20243         a missing accessor.  But this is ambiguous because there was no
20244         way to tell in abstract indexers/properties if one of them was
20245         specified.
20246
20247         Now there is a way of addressing that.
20248
20249         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
20250         instead of FindMembers.
20251
20252         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
20253         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
20254
20255         * attribute.cs: Treat indexers and properties as the same in terms
20256         of applying attributes
20257
20258         * ecore.cs (FindMostEncompassedType): Use statically initialized
20259         EmptyExpressions()s like we do elsewhere to avoid creating useless
20260         objects (and we take this out of the tight loop).
20261
20262         (GetConversionOperators): Move the code to extract the actual
20263         operators to a separate routine to clean things up.
20264
20265 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
20266
20267         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
20268         events are always registered FieldBuilders.
20269
20270         * class.cs (FieldBase): New class shared by Fields 
20271
20272         * delegate.cs: If we are a toplevel delegate, use our full name.
20273         If we are a nested delegate, then only use our tail name.
20274
20275 2002-05-02  Ravi Pratap  <ravi@ximian.com>
20276
20277         * expression.cs (IsApplicable): Ensure that we add the "&" to
20278         ref/out types before comparing it with the type of the argument.
20279
20280         (IsParamsMethodApplicable): Ditto.
20281
20282         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
20283         silly me ;-)
20284
20285         * delegate.cs : Handle the case when we have more than one applicable
20286         method. Flag an error only when we finish checking all.
20287
20288 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
20289
20290         * expression.cs: Add support for boolean static initializers.
20291
20292 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
20293
20294         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
20295
20296         * parameter.cs (ComputeParameterTypes,
20297         ComputeAndDefineParameterTypes): Better error handling: now we
20298         clear the `types' cache if we fail during any of the type lookups.
20299         We also return the status code correctly to our caller
20300
20301         * delegate.cs: If we fail to define a delegate, abort the extra
20302         steps. 
20303
20304         * expression.cs (Binary.ResolveOperator): for
20305         operator==(object,object) and operator !=(object, object) we also
20306         have to verify that there is an implicit conversion from one to
20307         the other.
20308
20309         (ArrayAccess.DoResolve): Array Access can operate on
20310         non-variables. 
20311
20312 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
20313
20314         * assign.cs (CompoundAssign): A new class used as a "flag" that
20315         the assignment actually is happening as part of a compound
20316         assignment operator.
20317
20318         During compound assignment, a few new rules exist to enable things
20319         like:
20320
20321         byte b |= 1 + 2
20322
20323         From the spec:
20324
20325         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
20326         to the type of x) if y is implicitly convertible to the type of x,
20327         and the operator is a builtin operator and the return type of the
20328         operator is explicitly convertible to the type of x. 
20329
20330         * rootcontext.cs: Reset warning level to 2.  4 catches various
20331         "interesting" features in mcs, we must clean this up at some
20332         point, but currently am trying to kill other bugs ;-)
20333
20334         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
20335         in container classes as well.  
20336
20337         * expression.cs (Binary.ResolveOperator): Handle string case
20338         before anything else (as operator overloading does emit an error
20339         before doing anything else).
20340
20341         This code could go away when we move to a table driven model, but
20342         i could not come up with a good plan last night.
20343
20344 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
20345
20346         * typemanager.cs (CSharpName): reimplementation using regex.
20347         * class.cs: added null check for fields in Emit
20348         * rootcontext.cs: set warninglevel to 4
20349
20350 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
20351
20352         * typemanager.cs (CSharpName): reimplemented with Lupus
20353         suggestion.
20354
20355 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
20356
20357         * statement.cs (If): correclty implement Resolve, because we were
20358         not catching sem errors in there.  The same process is needed
20359         everywhere else. 
20360         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
20361
20362
20363         (Statement.Warning_DeadCodeFound): Factorize code.
20364         (While): Report dead code here too.
20365
20366         (Statement): Added Resolve virtual method to allow
20367         for resolution split from the emit code.
20368
20369 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20370
20371         * statement.cs (EmitBoolExpression): No longer try to resolve the
20372         expression here.    
20373         (MakeBoolean): New utility function that resolve, implicitly
20374         converts to boolean and tags the expression. 
20375
20376
20377         (If, Do): Implement dead code elimination.
20378         (While): Implement loop inversion
20379
20380         (Do, While, For, If): Resolve the expression prior to calling our
20381         code generation.
20382
20383 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
20384
20385         * class.cs:
20386           - added method Report28 (warning: program has more than one entry point)
20387           - added method IsEntryPoint, implements paragraph 10.1 of the spec
20388           - modified method Method.Define, the part at the end of the method
20389
20390         * rootcontext.cs: added static public Location EntryPointLocation;
20391           
20392         * ../errors/cs0028.cs : Add test case for the above warning.              
20393
20394         * typemanager.cs:
20395           - modified method CSharpName to allow arrays of primitive type to
20396             be printed nicely (e.g. instead of System.Int32[][] it now prints
20397             int[][])
20398           - added method CSharpSignature: returns the signature of a method
20399             in string format to be used in reporting errors, warnings, etc.
20400
20401         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
20402         with String.Empty.
20403
20404 2002-04-26  Ravi Pratap  <ravi@ximian.com>
20405
20406         * delegate.cs (Define): Fix extremely silly bug where I was
20407         setting the type of the 'object' parameter of the BeginInvoke
20408         method to System.IAsyncResult instead of System.Object ;-)
20409
20410 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20411
20412         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
20413         here. 
20414
20415         (Constructor.Emit): return if we fail to initialize the
20416         constructor.  Another door closed!  
20417
20418         * expression.cs (New.DoResolve): Improve error message (from -6 to
20419         1501).  Use DeclaredOnly lookup to find the exact constructor.
20420
20421         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
20422         loop.  This is useful.
20423
20424         * cs-parser.jay: Adjust the default parameters so that destructors
20425         have the proper signature.
20426
20427 2002-04-26  Martin Baulig  <martin@gnome.org>
20428
20429         * driver.cs (LoadAssembly): If `assembly' contains any characters
20430         which are only valid in path names and not in assembly names
20431         (currently slash, backslash and point), use Assembly.LoadFrom ()
20432         instead of Assembly.Load () on the `assembly' (before iteration
20433         over the link_paths).
20434
20435 2002-04-26  Martin Baulig  <martin@gnome.org>
20436
20437         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
20438
20439 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
20440
20441         * class.cs (Property): use the new typemanager.MemberLookup
20442
20443         (TypeContainer.MemberLookup): Implement using the
20444         TypeManager.MemberLookup now. 
20445
20446         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20447         and return MemberInfos, so that these can be used without an
20448         EmitContext (what we had before).
20449
20450 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20451
20452         * expression.cs: Fix the case where the argument to params if the
20453         type of the params.  I omitted handling this before.   Fixed
20454
20455 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20456
20457         * driver.cs: Call BootCorlib_PopulateCoreType
20458
20459         * class.cs (Property.CheckBase): Check for properties only, not
20460         for all members. 
20461
20462         * interface.cs: Temporary hack: try/catch around the
20463         CustomAttributeBuilder, because I am getting an exception that I
20464         do not understand.
20465
20466         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20467         types whose definitions are required to be there (attributes are
20468         defined before standard types).
20469
20470         Compute definitions as we boot the various types, as they are used
20471         immediately (value_type class will need object_type, but if we do
20472         not initialize object_type, we will pass a null, which will let
20473         the runtime pick the System.Object from the existing corlib, which
20474         is not what we want).
20475
20476 2002-04-22  Patrik Torstensson <totte@labs2.com>
20477
20478         * cs-tokenizer.cs: fixed a number of trim() issues.
20479
20480 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20481
20482         * expression.cs (Argument.Type): Ensure that we return the correct
20483         type when we have out or ref parameters [in which case we 
20484         append a "&"].
20485
20486 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20487
20488         * class.cs (Property, Indexer): Allow extern modifier in there. 
20489
20490         * typemanager.cs (InitBaseTypes): Initializes object_type and
20491         value_type, since those will be used early on during the bootstrap
20492         process to compile corlib.
20493
20494         (InitCoreTypes): Move code from here to InitBaseTypes.
20495
20496 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20497
20498         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20499         single-dimension arrays as using the ldlen opcode.  
20500
20501         Daniel Lewis discovered this optimization.  
20502
20503         * typemanager.cs: Add signature for System.Array::get_Length
20504
20505 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20506
20507         * statement.cs: report the error when the foreach does not apply to an
20508         array nor a collection.
20509
20510 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20511
20512         * expression.cs: Add implicit conversions to the operator ~.
20513
20514         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20515
20516         * typemanager.cs: Locate the decimal constructor.
20517
20518 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20519
20520         * attribute.cs: use the new property of TypeOf.
20521         * expression.cs: added 'get' property around typearg.
20522
20523         These changes fix a build breaker reported by NickD. Is this the
20524         correct way to fix?  If not, please, revert my changes and make it
20525         work :-).
20526
20527 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20528
20529         * attribute.cs: Add support for typeof in attribute invocations.
20530         I am not sure that this is right though.
20531
20532 2002-04-14  Duncan Mak  <duncan@ximian.com>
20533
20534         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20535         Binary.Operator.Division case.
20536
20537 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20538
20539         * class.cs (DefineType): Ensure that we do a proper check on
20540         attribute types and also register it with the TypeManager.
20541
20542         (TypeContainer.Targets): The default for attribute types is
20543         AttributeTargets.All.
20544
20545         * attribute.cs (ApplyAttributes): Registering the attribute type
20546         is done elsewhere, not when we discover we have a Usage attribute.
20547
20548 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20549
20550         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20551         and get rid of is_delegate parameter.
20552
20553         * everywhere : update.
20554
20555 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20556
20557         * cs-parser.jay (compilation_unit): Revamp completely to use
20558         some new ideas that I got from Rhys' grammar to solve the problems
20559         with assembly level attributes.
20560
20561         (outer_declaration): New grammar production.
20562
20563         (attribute_sections): Add.
20564
20565         (opt_attributes): Base on attribute_sections
20566
20567         (namespace_declaration): Allow opt_attributes to tackle the case
20568         when we have assembly level attributes - we are clever in this
20569         regard now ;-)
20570
20571         * attribute.cs (ApplyAttributes): Do not worry about assembly 
20572         attributes in the non-global context.
20573
20574         * rootcontext.cs (AddGlobalAttributes): Go back to using this
20575         instead of SetGlobalAttributes.
20576
20577         * class.cs, rootcontext.cs : Ensure we define and generate 
20578         attribute types before anything else.
20579
20580         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
20581         and flag the new error -20 for the case when the attribute type
20582         does not have valid targets specified. csc does not catch this.
20583
20584         * ../errors/errors.txt : update for error # -20
20585
20586 2002-04-11  Ravi Pratap  <ravi@ximian.com>
20587
20588         * support.cs (InternalParameters.ParameterModifier): Do some null
20589         checking and return sane values.
20590
20591         * class.cs (Method.Define): If we are a PInvoke method, ensure
20592         that we are static and extern. Report error # 601
20593
20594         * ../errors/cs0601.cs : Add test case for the above error.
20595
20596 2002-04-07  Ravi Pratap  <ravi@ximian.com>
20597
20598         * rootcontext.cs (attribute_types): We need to keep type of
20599         all attribute types separately and emit code for them first.
20600
20601         (RegisterAttribute) : Implement.
20602
20603         * class.cs (DefineType): Check if the current Type is a custom
20604         attribute type and register it accordingly.
20605
20606         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
20607         adding the first attribute twice and rename to
20608
20609         (SetGlobalAttributes): this.
20610
20611         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
20612         lookups.
20613
20614         * attribute.cs (ApplyAttributes): Take an additional argument telling us
20615         if we are processing global arguments. Hmm, I am unsure of this.
20616
20617 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20618
20619         * expression.cs: added static array of strings to avoid calling
20620         Enum.ToString () for Operator in Binary. Significant recover of
20621         performance.
20622
20623 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
20624
20625         * class.cs (FindMembers): Allow the Builders of the various
20626         members to be null.  If they are skip them.  This only happens
20627         during the PInvoke declaration.
20628
20629 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
20630
20631         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
20632         failure, so we do not keep going afterwards.
20633
20634         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
20635         wanted to pass `false' as the `is_delegate' argument.  If this is
20636         the case, why not use delegate_type == null to mean `is_delegate =
20637         false' and anything else as is_delegate = true.
20638
20639 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
20640
20641         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
20642         code for the section, not the beginning of the tests.
20643
20644 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
20645
20646         * cfold.cs: Handle operator + (Enum x, Underlying x) 
20647
20648         * expression.cs (Binary): same.  Warn about errors where we have
20649         Enum/Enum in operator + as well.
20650
20651 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
20652
20653         * statement.cs:
20654                 - added support for switch(bool)
20655                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
20656                 - add TableSwitchEmit() to handle table-based switch statements
20657
20658 2002-04-05  Ravi Pratap  <ravi@ximian.com>
20659
20660         * expression.cs (Invocation.OverloadResolve): Factor out code which
20661         does parameter compatibility checking with arguments so that we can 
20662         re-use the code even from Delegate.VerifyApplicability
20663
20664         (VerifyArgumentsCompat): Move above code here.
20665
20666         * delegate.cs (VerifyApplicability): Get rid of duplicate code
20667         and instead make a call to the above method.
20668
20669 2002-03-31  Ravi Pratap  <ravi@ximian.com>
20670
20671         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
20672         We use it to keep track of classes which are attribute types.
20673
20674 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
20675
20676         * delegate.cs (Delegate.Define): Correctly define the types in the
20677         presence of fixed and array parameters.
20678
20679         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
20680         doing FindMembers.
20681
20682         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
20683         include NonPublic after the first iteration.
20684
20685         * class.cs (Indexer.CheckBase): Only check if both parents are
20686         non-null. 
20687
20688         * cs-parser.jay (accessor_body): If empty, set to null.
20689
20690         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
20691         same code path here to resolve constants names that we did have in
20692         MemberAccess.DoResolve.  There is too much code duplicated here.
20693
20694 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
20695
20696         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
20697
20698         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
20699         to MakeUnionSet.
20700
20701         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
20702         tokens, numbers and strings.
20703
20704         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
20705         parenthesis.
20706
20707         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
20708         asyncronous parameters and the regular parameters.  
20709
20710         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
20711         specify the target directory.
20712
20713         * expression.cs: (This.DoResolve): Simplify
20714         (As.Emit): Optimize, do not generate IsInst if the expression is
20715         always of the given type.
20716
20717         (Is.DoResolve): Bug fix, we were reporting both always/never for
20718         the is expression.
20719
20720         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
20721         creating too many unnecessary arrays.
20722
20723 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
20724
20725         * class.cs (EmitFieldInitializer): Use Assign expression to assign
20726         fields instead of rolling our own initializer.   Takes care of all
20727         implicit conversions, and drops unnecessary static checks/argument.
20728
20729 2002-03-31  Dick Porter  <dick@ximian.com>
20730
20731         * driver.cs: use the GetDirectories() return values properly, and
20732         use "/" as path separator.
20733
20734 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
20735
20736         * expression.cs (Unary): Optimize - - expr into expr.
20737         (Binary): Optimize a + (-b) into a -b.
20738
20739         * codegen.cs (CodeGen): Made all methods static.
20740
20741 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
20742
20743         * rootcontext.cs: 
20744
20745         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
20746         TypeBuilder property.
20747
20748         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
20749         instead. 
20750
20751         * tree.cs: Removed the various RecordXXXX, and replaced with a
20752         single RecordDecl.  Removed all the accessor methods, and just
20753         left a single access point Type 
20754
20755         * enum.cs: Rename DefineEnum to DefineType.
20756
20757         * decl.cs: New abstract method `DefineType' used to unify the
20758         Defines for Enumerations, Interfaces, TypeContainers and
20759         Delegates.
20760
20761         (FindType): Moved LookupInterfaceOrClass here.  Moved the
20762         LookupBaseClasses method that used to live in class.cs and
20763         interface.cs here, and renamed to FindType.
20764
20765         * delegate.cs: Implement DefineType.  Take advantage of the
20766         refactored pattern for locating the parent builder without taking
20767         the parent_builder argument (which we know does not work if we are
20768         nested, and triggering a toplevel definition).
20769
20770 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20771
20772         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
20773         accessibility of a member has changed during override and report
20774         an error if so.
20775
20776         * class.cs (Method.Define, Property.Define): Only complain on
20777         overrides if the method is private, any other accessibility is
20778         fine (and since we just checked the permission is the same, we are
20779         good to go).
20780
20781         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
20782         and elif are processed always.  The other pre-processing
20783         directives are only processed if we are "taking" the path
20784
20785 2002-03-29  Martin Baulig  <martin@gnome.org>
20786
20787         * class.cs (Method.Emit): Only emit symbolic debugging info if the
20788         current location is not Null.
20789
20790         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
20791         a separate method so we can profile it.
20792
20793         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
20794         `span.Seconds' are just seconds, but no minutes or hours.
20795         (MainDriver): Profile the CodeGen.SaveSymbols calls.
20796
20797 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20798
20799         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
20800         Remove the gratuitous set of Final:
20801
20802                                 // If an interface implementation, then we can set Final.
20803                                 if (((flags & MethodAttributes.Abstract) == 0) &&
20804                                     implementing.DeclaringType.IsInterface)
20805                                         flags |= MethodAttributes.Final;
20806
20807         I do not know what I was smoking when I used that.
20808
20809
20810         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
20811         step into fixing the name resolution issues for delegates and
20812         unifying the toplevel name resolution.
20813
20814 2002-03-28  Martin Baulig  <martin@gnome.org>
20815
20816         * class.cs (Method.Emit): If we have a symbol writer, call its
20817         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
20818         tell it about the current method.
20819
20820         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
20821         writer that we're going to emit the first byte of IL code for a new
20822         statement (a new source line).
20823         (EmitContext.EmitTopBlock): If we have a symbol writer, call
20824         EmitContext.Mark() before emitting any code.
20825
20826         * location.cs (SymbolDocument): Return null when we're Null.
20827
20828         * statement.cs (Statement): Moved the `Location loc' variable here.
20829         (Statement.EmitBoolExpression): If we have a symbol writer, call
20830         ec.Mark() before emitting any code to tell it that we're at the
20831         beginning of a new statement.
20832         (StatementExpression): Added `Location' argument to the constructor.
20833         (Block): Added public readonly variable `StartLocation' and public
20834         variable `EndLocation'.  The latter is to be set using SetEndLocation().
20835         (Block): Added constructor which takes a start and end location.
20836         (Block.SetEndLocation): New method. This sets the end location.
20837         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
20838         local variables we create.
20839         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
20840         each statement and do also mark the begin and end of the block.
20841
20842         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
20843         tell it the current lexer.Location, use Location.Null for the end of the
20844         block.
20845         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
20846         current block, set its end location using SetEndLocation().
20847         (statement_expression): StatementExpression constructor now takes the
20848         lexer.Location as additional argument.
20849         (for_statement, declare_local_variables): Likewise.
20850         (declare_local_variables): When creating a new implicit block, use the
20851         new Block constructor and pass it the lexer.Location.
20852
20853 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20854
20855         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
20856         members also on the parent interfaces recursively.
20857
20858 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
20859
20860         * report.cs: Use new formats, since Gonzalo finished the missing
20861         bits. 
20862
20863         * expression.cs (Binary.ResolveOperator): added missing operator|
20864         operator& and operator^ for bool/bool.
20865
20866         * cs-parser.jay: CheckDef now takes a Location argument that is
20867         used to report errors more precisly (instead of reporting the end
20868         of a definition, we try to track something which is a lot closer
20869         to the source of the problem).
20870
20871         * cs-tokenizer.cs: Track global token use, so we can properly flag
20872         the use of #define/#undef after the first token has been seen.
20873
20874         Also, rename the reportXXXX to Error_DescriptiveName
20875
20876         * decl.cs (DeclSpace.IsTopLevel): Move property here from
20877         TypeContainer, so that Enum and Interface can use this too.
20878
20879         * class.cs (TypeContainer.LookupInterfaceOrClass,
20880         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
20881         `builder' argument.  Typically this was used to pass the parent
20882         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
20883         the definition).  
20884
20885         The problem is that a nested class could trigger the definition of
20886         a toplevel class, and the builder would be obviously wrong in that
20887         case. 
20888
20889         So we drop this argument, and we compute dynamically the
20890         TypeBuilder/ModuleBuilder (the correct information was available
20891         to us anyways from DeclSpace.Parent)
20892
20893         * interface.cs (Interface.DefineInterface): Drop builder
20894         parameter cleanup like class.cs
20895
20896         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
20897         like class.cs
20898
20899         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
20900         values. 
20901
20902         (Try.Emit): Propagate the returns value from the statement.
20903
20904         (Return.Emit): Even if we are leavning 
20905
20906         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
20907
20908         * modifiers.cs: Fix the computation of MethodAttributes flags.
20909
20910 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
20911
20912         * driver.cs: allow compilation of files that start with '/'.
20913         Add a default case when checking the argument of --target.
20914
20915 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
20916
20917         * interface.cs: Implement the same search algorithm for types in
20918         the interface code.
20919
20920         * delegate.cs: Do not allow multiple definition.
20921
20922         * Recovered ChangeLog that got accidentally amputated
20923
20924         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
20925
20926         * rootcontext.cs: Load manually enum to allow core classes to
20927         contain enumerations.
20928
20929         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
20930         Update to new static methods in TypeManager.
20931
20932         * typemanager.cs (GetMethod, GetConstructor): Use our
20933         implementation of FindMembers to find the members, since during
20934         corlib compilation, the types are TypeBuilders and GetMethod and
20935         GetConstructor do not work.
20936
20937         Make all methods in TypeManager static.
20938
20939         (InitCodeHelpers): Split the functionality from
20940         the InitCodeTypes function.
20941
20942         * driver.cs: Call InitCodeHelpers after we have populated the
20943         types. 
20944
20945         * cs-parser.jay (delegate_declaration): we did not used to compute
20946         the delegate name correctly for void delegates.
20947
20948 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
20949
20950         * rootcontext.cs (RootContext): Init the interface_resolve_order
20951         and type_container_resolve_order always.
20952
20953         (ResolveCore, BootstrapCorlib_ResolveClass,
20954         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
20955         compiler when compiling with --nostdlib
20956
20957         * class.cs (TypeContainer.DefineType): Check that our parent is
20958         not null.  This test is most important when we are bootstraping
20959         the core types.
20960
20961         * codegen.cs: Split out the symbol writing code.
20962
20963 2002-03-25  Martin Baulig  <martin@gnome.org>
20964
20965         * driver.cs (-g): Made -g an alias for --debug.
20966
20967 2002-03-24  Martin Baulig  <martin@gnome.org>
20968
20969         * codegen.cs (SymbolWriter): New public variable. Returns the
20970         current symbol writer.
20971         (CodeGen): Added `bool want_debugging_support' argument to the
20972          constructor. If true, tell the ModuleBuild that we want debugging
20973         support and ask it for the ISymbolWriter.
20974         (Save): If we have a symbol writer, call it's Close() method after
20975         saving the assembly.
20976
20977         * driver.c (--debug): New command line argument to create a
20978         debugger information file.
20979
20980         * location.cs (SymbolDocument): New public property. Returns an
20981         ISymbolDocumentWriter object for the current source file or null
20982         if we don't have a symbol writer.
20983
20984 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
20985
20986         * driver.cs (LoadAssembly): Correctly return when all the paths
20987         have been tried and not before.
20988
20989         * statement.cs (Switch.Emit): return the actual coverage for this
20990         statement (returns/not-returns)
20991
20992         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
20993         switch of the statement if we are the last switch section.  That
20994         kills two problems: try/catch problems (we used to emit an empty
20995         nop at the end) and switch statements where all branches would
20996         return. 
20997
20998 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
20999
21000         * driver.cs: Add default assemblies (the equivalent to the
21001         Microsoft CSC.RSP file)
21002
21003         * cs-tokenizer.cs: When updating `cols and setting it to zero,
21004         also update tokens_seen and set it to false.
21005
21006         * driver.cs: Implement --recurse for Mike.
21007
21008         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
21009         correctly splitting out the paths.
21010
21011 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
21012
21013         * interface.cs (Interface.PopulateProperty): Instead of using
21014         `parent' as the declaration space for the set parameters, use
21015         `this' 
21016
21017         * support.cs (InternalParameters): InternalParameters constructor
21018         takes a DeclSpace instead of a TypeContainer.
21019
21020         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
21021         types are being initialized, load the address of it before calling
21022         the function.  
21023
21024         (New): Provide a mechanism to disable the generation of local
21025         value type temporaries when the caller will be providing us with
21026         an address to store it.
21027
21028         (ArrayCreation.EmitDynamicInitializers): Use it.
21029
21030 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
21031
21032         * expression.cs (Invocation.EmitArguments): Only probe for array
21033         property if there is more than one argument.  Sorry about that.
21034
21035         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
21036         empty param arrays.
21037
21038         * class.cs (Method.LabelParameters): Fix incorrect code path that
21039         prevented the `ParamArrayAttribute' from being applied to the
21040         params attribute.
21041
21042 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
21043
21044         * support.cs (ReflectionParameters): Correctly compute whether the
21045         last argument is a params array.  Fixes the problem with
21046         string.Split ('a')
21047
21048         * typemanager.cs: Make the assemblies array always be non-null
21049         (empty, but non-null)
21050
21051         * tree.cs (RecordDecl): New function that abstracts the recording
21052         of names.  This reports error 101, and provides a pointer to the
21053         previous declaration.  Fixes a crash in the compiler.
21054
21055         * cs-parser.jay (constructor_declaration): Update to new grammar,
21056         and provide a constructor_body that can be empty.
21057
21058 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
21059
21060         * driver.cs: Add support for --resources.
21061
21062         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
21063         Make all types for the various array helper methods be integer.
21064
21065         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
21066         CheckState to ConvCast.
21067
21068         (ConvCast): Now it takes a `checked' state argument, to avoid
21069         depending on the emit context for the conversion, and just using
21070         the resolve time setting.
21071
21072         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
21073         instead of Invocation.EmitArguments.  We do not emit the original
21074         arguments, instead we emit those which have been converted to
21075         unsigned int expressions.
21076
21077         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
21078
21079         * codegen.cs: ditto.
21080
21081         * expression.cs (LocalVariableReference): Drop the use of the
21082         Store function that depended on the variable index.
21083
21084         * statement.cs (VariableInfo): Drop the `Idx' property from this
21085         class, as this is not taking into account the indexes for
21086         temporaries tat we generate during the execution, getting the
21087         indexes wrong.
21088
21089         * class.cs: First emit class initializers, then call the parent
21090         constructor. 
21091
21092         * expression.cs (Binary): Fix opcode emision.
21093         (UnaryMutator.EmitCode): Support checked code generation
21094
21095         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
21096         matches for events for both the Static and Instance scans,
21097         pointing to the same element.   Fix that.
21098
21099 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
21100
21101         * rootcontext.cs (ResolveTree): Always set the
21102         interface_resolve_order, because nested interfaces will be calling
21103         into us.
21104
21105         * class.cs (GetInterfaceOrClass): Track the same resolution
21106         process used by TypeManager.LookupType.  This fixes the nested
21107         type lookups in class declarations (separate path from
21108         LookupType). 
21109
21110         (TypeContainer.DefineType): Also define nested interfaces.
21111         (TypeContainer.RegisterOrder): New public function used to
21112         register the order in which child interfaces need to be closed.
21113
21114         Nested interfaces need to be closed after their parents have been
21115         created. 
21116
21117         * interface.cs (InterfaceAttr): Put all the logic for computing
21118         the interface attribute here. 
21119
21120         (DefineInterface): Register our interface order with the
21121         RootContext or with the TypeContainer depending on the case.
21122
21123 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21124
21125         * cs-parser.jay: rework foreach statement to work with the new
21126         changes to the policy on SimpleNames.
21127
21128         * report.cs: support Stacktrace on warnings as well.
21129
21130         * makefile: drop --unsafe and /unsafe from the compile.
21131
21132 2002-03-13  Ravi Pratap  <ravi@ximian.com>
21133
21134         * ecore.cs (StandardConversionExists): Modify to take an Expression
21135         as the first parameter. Ensure we do null -> reference type conversion
21136         checking.
21137
21138         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
21139         temporary Expression objects.
21140
21141 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
21142
21143         * interface.cs: workaround bug in method overloading resolution
21144         (there is already a bugzilla bug for it).
21145
21146 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21147
21148         We could also solve this problem by having a separate path for
21149         performing type lookups, instead of DoResolve, we could have a
21150         ResolveType entry point, and only participating pieces of the
21151         production (simplename, deref, array) would implement this. 
21152
21153         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
21154         signal SimpleName to only resolve type names and not attempt to
21155         resolve anything else.
21156
21157         * expression.cs (Cast): Set the flag.
21158
21159         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
21160
21161         * class.cs: Only report 108 if there is no `new' modifier.
21162
21163         * cs-parser.jay: rework foreach statement to work with the new
21164         changes to the policy on SimpleNames.
21165         
21166         * report.cs: support Stacktrace on warnings as well.
21167
21168         * makefile: drop --unsafe and /unsafe from the compile.
21169
21170 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
21171
21172         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21173         lookups here, instead of doing that at parse time.  This means
21174         that our grammar will not introduce `LocalVariableReferences' as
21175         expressions at this point.  That solves the problem of code like
21176         this:
21177
21178         class X {
21179            static void Main ()
21180            { int X = 1;
21181             { X x = null }}}
21182
21183         This is only half the fix.  The full fix requires parameters to
21184         also be handled in this way.
21185
21186         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
21187         makes the use more obvious of the DeclSpace.  The
21188         ec.TypeContainer.TypeBuilder is now only used to pull the
21189         TypeBuilder for it.
21190
21191         My theory is that I can get rid of the TypeBuilder completely from
21192         the EmitContext, and have typecasts where it is used (from
21193         DeclSpace to where it matters).  
21194
21195         The only pending problem is that the code that implements Aliases
21196         is on TypeContainer, and probably should go in DeclSpace.
21197
21198         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21199         lookups here, instead of doing that at parse time.  This means
21200         that our grammar will not introduce `LocalVariableReferences' as
21201         expressions at this point.  That solves the problem of code like
21202         this:
21203
21204         class X {
21205            static void Main ()
21206            { int X = 1;
21207             { X x = null }}}
21208
21209         This is only half the fix.  The full fix requires parameters to
21210         also be handled in this way.
21211
21212         * class.cs (Property.DefineMethod): When implementing an interface
21213         method, set newslot, when implementing an abstract method, do not
21214         set the flag (before we tried never setting it, or always setting
21215         it, which is the difference).
21216         (Indexer.DefineMethod): same.
21217         (Method.DefineMethod): same.
21218
21219         * ecore.cs: Only set the status used flag if we get back a Field.
21220
21221         * attribute.cs: Temporary hack, so Paolo can keep working.
21222
21223 2002-03-08  Ravi Pratap  <ravi@ximian.com>
21224
21225         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
21226         the unmanaged type in the case we have a MarshalAs attribute.
21227
21228         (Resolve): Handle the case when we are parsing the special MarshalAs
21229         attribute [we need to store the unmanaged type to use later]
21230
21231         * typemanager.cs (marshal_as_attr_type): Built in type for the 
21232         MarshalAs Attribute.
21233
21234         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
21235         on parameters and accordingly set the marshalling info.
21236
21237 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
21238
21239         * class.cs: Optimizing slightly by removing redundant code after
21240         we switched to the `NoTypes' return value.
21241         (Property.DefineMethod): use NoTypes here too.
21242
21243         This fixes the bug I introduced in my last batch of changes.
21244
21245 2002-03-05  Ravi Pratap  <ravi@ximian.com>
21246
21247         * tree.cs (RecordEnum): Add. We now keep track of enums too.
21248
21249         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
21250         Enums since those are types too. 
21251
21252         * cs-parser.jay (enum_declaration): Record enums as we parse them.
21253
21254         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
21255         thanks to a call during the lookup process.
21256
21257 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
21258
21259         * statement.cs (Foreach): Lots of work to accomodate a particular
21260         kind of foreach statement that I had not kept in mind.  It is
21261         possible to have foreachs on classes that provide a GetEnumerator
21262         method that return objects that implement the "pattern" for using
21263         a foreach, there is no need to support GetEnumerator
21264         specifically. 
21265
21266         This is needed to compile nant.
21267
21268         * decl.cs: Only report 114 if the member is not `Finalize' and if
21269         the warning level is at least 2.
21270
21271         * class.cs: Moved the compare function from Method to
21272         MethodSignature. 
21273
21274         (MethodSignature.InheritableMemberSignatureCompare): Add new
21275         filter function that is used to extract inheritable methods from a
21276         class. 
21277
21278         (Method.Define): Use the new `inheritable_method_signature_filter'
21279         delegate
21280
21281         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
21282         command. 
21283
21284 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
21285
21286         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
21287
21288         * cs-parser.jay: Add opt_semicolon to the interface declaration.
21289
21290         * expression.cs: Pass location information to
21291         ConvertImplicitStandard. 
21292
21293         * class.cs: Added debugging code to track return values from
21294         interfaces. 
21295
21296 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
21297
21298         * expression.cs (Is.DoResolve): If either side of the `is' is an
21299         interface, do not flag the warning.
21300
21301         * ecore.cs (ImplicitReferenceConversion): We need a separate test
21302         for interfaces
21303
21304         * report.cs: Allow for --fatal to be used with --probe.
21305
21306         * typemanager.cs (NoTypes): Move the definition for the empty Type
21307         array here. 
21308
21309         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
21310         properties. 
21311         (TypeContainer.DefineProxy): New function used to proxy to parent
21312         implementations when implementing interfaces.
21313         (TypeContainer.ParentImplements): used to lookup if our parent
21314         implements a public function that is required by an interface.
21315         (TypeContainer.VerifyPendingMethods): Hook this up.
21316
21317         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
21318         `modules' and `assemblies' arraylists into arrays.  We only grow
21319         these are the very early start up of the program, so this improves
21320         the speedof LookupType (nicely measured).
21321
21322         * expression.cs (MakeByteBlob): Replaced unsafe code with
21323         BitConverter, as suggested by Paolo.
21324
21325         * cfold.cs (ConstantFold.Binary): Special case: perform constant
21326         folding of string concatenation, but if either side is a string,
21327         and the other is not, then return null, and let the runtime use
21328         the concatenation on the string plus the object (using
21329         `Object.ToString'). 
21330
21331 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
21332
21333         Constant Folding has been implemented now.
21334
21335         * expression.cs (Unary.Reduce): Do not throw an exception, catch
21336         the error instead on types that are not supported in one's
21337         complement. 
21338
21339         * constant.cs (Constant and all children): New set of functions to
21340         perform implict and explicit conversions.
21341
21342         * ecore.cs (EnumConstant): Implement the new functions to perform
21343         conversion by proxying to the child expression.
21344
21345         * codegen.cs: (ConstantCheckState): Constant evaluation has its
21346         own separate setting that can not be turned off from the command
21347         line using --unchecked or --checked and is only controlled using
21348         the checked/unchecked statements and expressions.  This setting is
21349         used by the constant folder to flag errors.
21350
21351         * expression.cs (CheckedExpr, UncheckedExpr): Set the
21352         ConstantCheckState as well.   
21353
21354         During Resolve, they also have to flag the state, because the
21355         constant folder runs completely in the Resolve phase.
21356
21357         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
21358         well.
21359
21360 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21361
21362         * cfold.cs: New file, this file contains the constant folder.
21363
21364         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
21365         argument to track whether we are using the resulting address to
21366         load or store a value and provide better error messages. 
21367
21368         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
21369         new AddressOf arguments.
21370
21371         * statement.cs (Foreach.EmitCollectionForeach): Update
21372
21373         * expression.cs (Argument.Emit): Call AddressOf with proper
21374         arguments to track usage.
21375
21376         (New.DoEmit): Call AddressOf with new arguments.
21377
21378         (Unary.Emit): Adjust AddressOf call.
21379
21380 2002-03-01  Ravi Pratap  <ravi@ximian.com>
21381
21382         * cs-parser.jay (member_access): Change the case for pre-defined types
21383         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
21384         this suggestion.
21385
21386         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
21387         a method body.
21388
21389         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
21390         essentially like methods and apply attributes like MethodImplOptions to them too.
21391
21392         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
21393         not being null.
21394
21395         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
21396         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
21397         is the DeclSpace.
21398
21399         * Update code everywhere accordingly.
21400
21401         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
21402
21403         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
21404
21405 2002-02-28  Ravi Pratap  <ravi@ximian.com>
21406
21407         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
21408         try performing lookups against those instead of jumping straight into using
21409         the 'using' clauses.
21410
21411         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
21412
21413         (LookupType): Perform lookups in implicit parents too.
21414
21415         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
21416         sequence as RootContext.LookupType. 
21417
21418         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
21419         the various cases of namespace lookups into this method.
21420
21421 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21422
21423         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
21424         in positional arguments)
21425
21426         * class.cs (Operator): Update the AllowedModifiers to contain
21427         extern. 
21428
21429         * cs-parser.jay: Update operator declaration to allow for the
21430         operator body to be empty.
21431
21432         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
21433         values. 
21434
21435 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
21436
21437         * class.cs (Method.Emit): Label parameters.
21438
21439         * driver.cs: Return 1 or 0 as the program exit code.
21440
21441 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
21442
21443         * expression.cs: Special case the `null' object when trying to
21444         auto-compute the type, as anything can be explicitly converted to
21445         that. 
21446
21447         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21448         spotting this Paolo.
21449
21450         (Expression.ImplicitNumericConversion): Perform comparissions of
21451         the type using the underlying type in the case of an enumeration
21452         rather than using the enumeration type for the compare.
21453
21454         Cope with the underlying == type case, which is not possible to
21455         catch before. 
21456
21457         (Expression.ConvertNumericExplicit): Perform comparissions of
21458         the type using the underlying type in the case of an enumeration
21459         rather than using the enumeration type for the compare.
21460
21461         * driver.cs: If the user does not supply an extension, assume .exe
21462
21463         * cs-parser.jay (if_statement): Rewrote so that we can track the
21464         location for the if statement.
21465
21466         * expression.cs (Binary.ConstantFold): Only concat strings when
21467         the operation is "+", not everything ;-)
21468
21469         * statement.cs (Statement.EmitBoolExpression): Take a location
21470         argument. 
21471         (If, While, Do): Track location.
21472
21473         * expression.cs (Binary.ResolveOperator): In the object + string
21474         case, I was missing a call to ConvertImplicit
21475
21476 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21477
21478         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21479         Location arguments. Ensure we use RootContext.LookupType to do our work
21480         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21481
21482         * interface.cs (PopulateMethod): Handle the type of the parameter being
21483         null gracefully.
21484
21485         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21486         have a params method with no fixed arguments and a call is made with no
21487         arguments.
21488
21489 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21490
21491         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21492         the verbatim-string-literal
21493
21494         * support.cs (InternalParameters.ParameterModifier): handle null
21495         fixed parameters.
21496         (InternalParameters.ParameterType): ditto.
21497
21498         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21499         duplicating the name of the variable parameter.
21500         (GetParameterByName): Fix bug where we were not looking up array
21501         paramters if they were the only present (thanks Paolo!).
21502         (GetParameterInfo): We only have an empty set of types if both
21503         fixed and array are set to null.
21504         (GetParameterInfo-idx): Handle FixedParameter == null
21505
21506         * cs-parser.jay: Handle the case where there is no catch
21507         statements (missing null test).
21508
21509 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21510
21511         * driver.cs (MainDriver): Be conservative on our command line
21512         handling.
21513
21514         Catch DirectoryNotFoundException when calling GetFiles.
21515
21516         (SplitPathAndPattern): Used to split the input specification into
21517         a path and a pattern that we can feed to Directory.GetFiles.
21518
21519 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21520
21521         * statement.cs (Fixed): Implement the last case of the Fixed
21522         statement (string handling).
21523
21524         * expression.cs (StringPtr): New class used to return a char * to
21525         a string;  Used by the Fixed statement.
21526
21527         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21528
21529         * expression.cs (Binary.ResolveOperator): Remove redundant
21530         MemberLookup pn parent type.
21531         Optimize union call, we do not need a union if the types are the same.
21532         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21533         type.
21534
21535         Specialize the use of MemberLookup everywhere, instead of using
21536         the default settings. 
21537
21538         (StackAlloc): Implement stackalloc keyword.
21539
21540         * cs-parser.jay: Add rule to parse stackalloc.
21541
21542         * driver.cs: Handle /h, /help, /?
21543
21544         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21545         before we supported unsafe code.
21546
21547         * makefile: add --unsafe to the self compilation of mcs.
21548
21549 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21550
21551         * expression.cs (PointerArithmetic): New class that is used to
21552         perform pointer arithmetic.
21553         (Binary.Resolve): Handle pointer arithmetic
21554         Handle pointer comparission.
21555         (ArrayPtr): Utility expression class that is used to take the
21556         address of an array.
21557
21558         (ElementAccess): Implement array access for pointers
21559
21560         * statement.cs (Fixed): Implement fixed statement for arrays, we
21561         are missing one more case before we are done.
21562
21563         * expression.cs (Indirection): Implement EmitAssign and set the
21564         ExprClass to Variable.  This allows pointer dereferences to be
21565         treated as variables, and to have values assigned to them.
21566
21567         * ecore.cs (Expression.StoreFromPtr): New utility function to
21568         store values dereferencing.
21569
21570 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21571
21572         * expression.cs (Binary.ResolveOperator): Ensure that we are
21573         not trying to operate on a void type - this fixes the reported
21574         bug.
21575
21576         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
21577         the parent implementation is sealed.
21578
21579         * ../errors/cs0239.cs : Add.
21580
21581         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
21582
21583         * typemanager.cs (unverifiable_code_type): Corresponds to 
21584         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
21585         which have unsafe code in them.
21586
21587         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
21588         unsafe context.
21589
21590 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
21591
21592         * cs-tokenizer.cs: Add support for @"litreal strings"
21593
21594         Make tokenizer accept pre-processor directives
21595         on any column (remove the old C-like limitation). 
21596
21597         * rootcontext.cs (EmitCode): Emit any global attributes.
21598         (AddGlobalAttributes): Used to keep track of assembly attributes. 
21599
21600         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
21601
21602         * cs-parser.jay: Add support for global attributes.  
21603
21604 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
21605
21606         * expression.cs (Indirection): New helper class.  Unary will
21607         create Indirection classes to be able to implement the
21608         IMemoryLocation interface on it.
21609
21610 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
21611
21612         * cs-parser.jay (fixed_statement): reference the right statement.
21613
21614         * statement.cs (Fixed.Emit): Finish implementing the fixed
21615         statement for the &x case.
21616
21617 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
21618
21619         * class.cs (Property.Define, Method.Define): Remove newslot when
21620         `implementing'.  
21621
21622         * modifiers.cs: My use of NewSlot when `Abstract' was set was
21623         wrong.  NewSlot should only be used if the `new' keyword is present.
21624
21625         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
21626         locating our system dir.  Sorry about this.
21627
21628 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21629
21630         * driver.cs (GetSystemDir): Compute correctly the location of our
21631         system assemblies.  I was using the compiler directory instead of
21632         the library directory.
21633
21634 2002-02-13  Ravi Pratap  <ravi@ximian.com>
21635
21636         * expression.cs (BetterFunction): Put back in what Miguel commented out
21637         since it is the correct fix. The problem is elsewhere ;-)
21638
21639         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
21640         parameters of the parms method are themselves compatible or not !
21641
21642         (StandardConversionExists): Fix very dangerous bug where we were forgetting
21643         to check that a class implements an interface before saying that an implicit
21644         conversion was allowed. Use ImplementsInterface to do the checking.
21645
21646 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21647
21648         * class.cs (Method.Define): Track whether we are an explicit
21649         implementation or not.  And only call DefineMethodOverride if we
21650         are an explicit implementation.
21651
21652         (Property.DefineMethod): Ditto.
21653
21654 2002-02-11  Ravi Pratap  <ravi@ximian.com>
21655
21656         * expression.cs (BetterFunction): Catch hideous bug which was
21657          preventing us from detecting ambiguous calls due to implicit casts i.e
21658         cs0121.
21659
21660 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
21661
21662         * support.cs (Pair): Remove un-needed method.  I figured why I was
21663         getting the error in cs-parser.jay, the variable in a foreach loop
21664         is readonly, and the compiler does not really treat this as a variable.
21665
21666         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
21667         instead of EQUALS in grammar.  
21668
21669         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
21670
21671         * expression.cs (Unary.DoResolve): Check whether the argument is
21672         managed or not.
21673
21674 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
21675
21676         * support.cs: Api for Pair to set a value.  Despite the fact that
21677         the variables are public the MS C# compiler refuses to compile
21678         code that accesses the field if the variable is part of a foreach
21679         statement. 
21680
21681         * statement.cs (Fixed): Begin implementation of the fixed
21682         statement.
21683
21684         (Block.AddVariable): Return the VariableInfo on success and null
21685         on failure instead of true/false. 
21686
21687         * cs-parser.jay (foreach): Catch errors on variables already
21688         defined (we were ignoring this value before) and properly unwind
21689         the block hierarchy
21690
21691         (fixed_statement): grammar for the fixed statement.
21692
21693 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
21694
21695         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
21696         pointer types to be incretemented.
21697
21698         (SizeOf): Implement.
21699
21700         * cs-parser.jay (pointer_member_access): Implement
21701         expr->IDENTIFIER production.
21702
21703         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
21704         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
21705         on safe contexts.
21706
21707         (Unary): Implement indirection.
21708
21709         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
21710         use in non-unsafe context).
21711
21712         (SimpleName.DoResolve): Check for pointers in field access on safe
21713         contexts. 
21714
21715         (Expression.LoadFromPtr): Factor the load-indirect code in this
21716         function.  This was duplicated in UnboxCast and ParameterReference
21717
21718 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
21719
21720         * expression.cs (ComposedCast): report an error if a pointer cast
21721         is used in a safe region.
21722
21723         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
21724         pointer type casts in unsafe context.
21725
21726         * codegen.cs (EmitContext): Set up IsUnsafe.
21727
21728         * cs-parser.jay (non_expression_type): Add productions for pointer
21729         casts. 
21730
21731         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
21732         code.  We should not use force into static mode if the method is
21733         not virtual.  Fixes bug in MIS
21734
21735         * statement.cs (Do.Emit, While.Emit, For.Emit,
21736         Statement.EmitBoolExpression): Add support to Do and While to
21737         propagate infinite loop as `I do return' semantics.
21738
21739         Improve the For case to also test for boolean constants.
21740
21741         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
21742         to the list of attributes we can add.
21743
21744         Remove `EmitContext' argument.
21745
21746         * class.cs (Method.Define): Apply parameter attributes.
21747         (Constructor.Define): Apply parameter attributes.
21748         (MethodCore.LabelParameters): Move here the core of labeling
21749         parameters. 
21750
21751         * support.cs (ReflectionParameters.ParameterModifier,
21752         InternalParameters.ParameterModifier): Use IsByRef on the type and
21753         only return the OUT bit for these parameters instead of in/out/ref
21754         flags.
21755
21756         This is because I miss-understood things.  The ParameterInfo.IsIn
21757         and IsOut represent whether the parameter has the [In] and [Out]
21758         attributes set.  
21759
21760 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
21761
21762         * ecore.cs (FieldExpr.Emit): Release temporaries.
21763
21764         * assign.cs (LocalTemporary.Release): new function.
21765
21766         * codegen.cs (EmitContext.GetTemporaryStorage,
21767         EmitContext.FreeTemporaryStorage): Rework the way we deal with
21768         temporary storage.  Now we can "put back" localbuilders when we
21769         are done with them
21770
21771 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
21772
21773         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
21774         need to make a copy of the variable to generate verifiable code.
21775
21776 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
21777
21778         * driver.cs: Compute dynamically the system directory.
21779
21780         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
21781         Slower, but more generally useful.  Used by the abstract
21782         registering implementation. 
21783
21784         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
21785         the rules for the special rule on Type/instances.  First check if
21786         we have the same name, and if so, try that special static path
21787         rather than the instance path.
21788
21789 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
21790
21791         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
21792         for, while and if.
21793
21794         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
21795         Enum, ValueType, Delegate or Array for non-corlib compiles.
21796
21797         * cs-tokenizer.cs: Catch long identifiers (645)
21798
21799         * typemanager.cs (IndexerPropetyName): Ravi never tested this
21800         piece of code.
21801
21802         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
21803         fix, we were returning too early, so we were not registering
21804         pending methods from abstract classes.
21805
21806         Do not register pending methods if the class is abstract.
21807
21808         * expression.cs (Conditional.DoResolve): Report circular implicit
21809         conversions when we neecd to compute it for conditional
21810         expressions. 
21811
21812         (Is.DoResolve): If the expression is always of the provided type,
21813         flag warning 183.  If the expression can not ever be of the
21814         provided type flag warning 184.
21815
21816         * class.cs: Catch 169 as well.
21817
21818         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
21819         read. 
21820
21821 2002-01-18  Nick Drochak  <ndrochak@gol.com>
21822
21823         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
21824
21825 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
21826
21827         * interface.cs: (PopulateMethod): Check for pointers being defined
21828         only if the unsafe context is active.
21829         (PopulateProperty): ditto.
21830         (PopulateIndexer): ditto.
21831
21832         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
21833         specified.  If pointers are present, make sure that they are
21834         present in an unsafe context.
21835         (Constructor, Constructor.Define): ditto.
21836         (Field, Field.Define): ditto.
21837         (Property, Property.Define): ditto.
21838         (Event, Event.Define): ditto.
21839
21840         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
21841         hashtable if there are classes or structs defined.
21842
21843         * expression.cs (LocalVariableReference.DoResolve): Simplify this
21844         code, as the constant resolution moved.
21845
21846         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
21847         the metadata, so we can flag error 133. 
21848
21849         * decl.cs (MemberCore.UnsafeOK): New function to test that a
21850         pointer is being declared in an unsafe context.
21851
21852 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
21853
21854         * modifiers.cs (Modifiers.Check): Require a Location argument.
21855         Report error 227 for Unsafe use.
21856
21857         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
21858
21859         * statement.cs (For.Emit): If the test is null, then report that
21860         we do `return', as we wont reach anything afterwards.
21861
21862         (Switch.SwitchGoverningType): Track the expression that matched
21863         the conversion.
21864
21865         * driver.cs: Allow negative numbers as an error code to flag.
21866
21867         * cs-parser.jay: Handle 1551.
21868
21869         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
21870
21871 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21872
21873         * cs-parser.jay: Report 1518 (type declaration can only contain
21874         class, struct, interface, enum or delegate)
21875
21876         (switch_label): Report 1523 (keywords `case' or `default' must
21877         preced code)
21878
21879         (opt_switch_sections): Report 1522 (empty switch)
21880
21881         * driver.cs: Report 1515 (response file specified multiple times)
21882         Report 1516 (Source file specified multiple times).
21883
21884         * expression.cs (Argument.Resolve): Signal 1510
21885
21886         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
21887         access not allowed in static code)
21888
21889 2002-01-11  Ravi Pratap  <ravi@ximian.com>
21890
21891         * typemanager.cs (IsPointerType): Utility method which we are going
21892         to need a lot.
21893
21894         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
21895         the object type, so we take care of that.
21896
21897         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
21898
21899         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
21900         added to non-params parameters :-)
21901
21902         * typemanager.cs (CSharpName): Include 'void' type too. 
21903
21904         (void_ptr_type): Include in the set of core types.
21905
21906         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
21907         duplicating code.
21908
21909         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
21910         an unsafe context.
21911
21912         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
21913         completely forgotten about it.
21914
21915 2002-01-10  Ravi Pratap  <ravi@ximian.com>
21916
21917         * cs-parser.jay (pointer_type): Add. This begins our implementation
21918         of parsing rules for unsafe code.
21919
21920         (unsafe_statement): Implement.
21921
21922         (embedded_statement): Modify to include the above.
21923
21924         * statement.cs (Unsafe): Implement new class for unsafe blocks.
21925
21926         * codegen.cs (EmitContext.InUnsafe): Add. This determines
21927         if the current context is an unsafe one.
21928
21929         * cs-parser.jay (local_variable_pointer_type): Since local variable types
21930         are handled differently, we need separate rules for them.
21931
21932         (local_variable_declaration): Update to use local_variable_pointer_type
21933         to allow variable declarations of unmanaged pointer types.
21934
21935         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
21936         in unsafe contexts.
21937
21938         * ../errors/cs0214.cs : Add.
21939
21940 2002-01-16  Nick Drochak  <ndrochak@gol.com>
21941
21942         * makefile: remove 'response' file when cleaning.
21943
21944 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21945
21946         * cs-parser.jay: Report 1524.
21947
21948 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
21949
21950         * typemanager.cs (RegisterMethod): drop checking if we have
21951         registered this from here
21952
21953 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
21954
21955         * class.cs (Method.EmitDestructor): Implement calling our base
21956         destructor. 
21957
21958         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
21959         value of InFinally.
21960
21961         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
21962         this routine and will wrap the call in a try/catch block.  Deal
21963         with the case.
21964
21965 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
21966
21967         * ecore.cs (Expression.MemberLookup): instead of taking a
21968         parameter `same_type' that was used to tell whether we could
21969         access private members we compute our containing type from the
21970         EmitContext.
21971
21972         (FieldExpr): Added partial support for volatile fields.  This does
21973         not work for volatile fields exposed from assemblies, as I can not
21974         figure out how to extract the modreq from it.
21975
21976         Updated all the source files to use this.
21977
21978         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
21979         because it is referenced by MemberLookup very often. 
21980
21981 2002-01-09  Ravi Pratap  <ravi@ximian.com>
21982
21983         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
21984         TypeBuilder.GetCustomAttributes to retrieve what we need.
21985
21986         Get rid of redundant default_member_attr_type as this is the same as
21987         default_member_type which already exists.
21988
21989         * interface.cs, attribute.cs : Update accordingly.
21990
21991 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
21992
21993         * typemanager.cs: Enable IndexerPropertyName again.  It does not
21994         work for TYpeBuilders though.  Ravi, can you please fix this?
21995
21996         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
21997
21998         * expression.cs (Argument.Emit): Handle the case of ref objects
21999         being passed to ref functions;  
22000
22001         (ParameterReference.EmitLoad): Loads the content of the pointer
22002         without dereferencing.
22003
22004 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22005
22006         * cs-tokenizer.cs: Implemented the pre-processing expressions.
22007
22008 2002-01-08  Ravi Pratap  <ravi@ximian.com>
22009
22010         * class.cs (Indexer.DefineMethod): Incorporate the interface
22011         type in the name of the method if we are doing explicit interface
22012         implementation.
22013
22014         * expression.cs (ConversionExists): Remove as it is completely obsolete.
22015
22016         (BetterConversion): Fix extremely trivial bug where we were referring to
22017         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
22018         again !
22019
22020         * ../errors/bug16.cs : Add although we have fixed it.
22021
22022 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22023
22024         * expression.cs (BaseIndexer): Begin implementation.
22025
22026         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
22027
22028         * cs-parser.jay (indexer_declarator): Use qualified_identifier
22029         production directly to remove a shift/reduce, and implement
22030         explicit interface implementation.
22031
22032         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
22033         after a floating point suffix.
22034
22035         * expression.cs (DoNumericPromotions): Improved the conversion for
22036         uint/uint.  If we have a constant, we avoid doing a typecast to a
22037         larger type.
22038
22039         * class.cs (Indexer): Implement explicit interface implementation
22040         for indexers.
22041
22042 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
22043
22044         * class.cs: make the default instance constructor public and hidebysig.
22045
22046 2001-01-03  Ravi Pratap  <ravi@ximian.com>
22047
22048         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
22049         so we can call it from elsewhere.
22050
22051         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
22052         we emit it internally if the class has a defined indexer; otherwise the user
22053         emits it by decorating the class definition with the DefaultMemberAttribute.
22054
22055         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
22056         attribute is not used on a type which defines an indexer.
22057
22058         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
22059         character when we skip whitespace.
22060
22061         * ../errors/cs0646.cs : Add.
22062
22063 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
22064
22065         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
22066         again. 
22067
22068         * makefile: Add practical target `mcs3.exe' which builds the third
22069         generation compiler. 
22070
22071         * expression.cs (New): Fix structures constructor calling.
22072
22073         * class.cs (Property, Method, Indexer): Emit Final flag on the
22074         method if we are an interface implementation and we are not
22075         abstract. 
22076
22077         * ecore.cs (PropertyExpr): New public field `IsBase', tells
22078         whether this property is referencing a `base' method.
22079
22080         * expression.cs (Invocation.EmitCall): take an extra argument:
22081         is_base, this is used to determine whether the `call' or
22082         `callvirt' opcode should be used.
22083
22084
22085         * delegate.cs: update EmitCall.
22086
22087         * class.cs (Method.Define): Set NewSlot for the cases where we are
22088         not implementing an interface method.
22089
22090         (Property.Define): ditto.
22091
22092 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
22093
22094         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
22095         'r'.  Allows mcs to parse itself fully.
22096
22097 2002-01-02  Ravi Pratap  <ravi@ximian.com>
22098
22099         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
22100         of the number of initializers that require the InitializeArray method.
22101
22102         (CheckIndices): Store the Expression in all cases - not the plain value. Also
22103         update the above field where necessary.
22104
22105         (MakeByteBlob): Update accordingly.
22106
22107         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
22108         greater than 2.
22109
22110         (EmitDynamicInitializers): Update in accordance with the new optimization.
22111
22112         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
22113         same OpCode applies.
22114
22115         * cs-parser.jay : Fix some glaring errors I introduced.
22116
22117 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
22118
22119         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
22120         so that we can check for name clashes there too.
22121
22122         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
22123         for interface indexers.
22124
22125         * interfaces.cs (Define): Emit the default member attribute.
22126
22127         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
22128         variable was being referred to while setting the value ;-)
22129
22130 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
22131
22132         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
22133         byte-by-byte information when we know the data is zero.
22134
22135         Make the block always a multiple of 4, because
22136         DefineInitializedData has a bug.
22137
22138         * assign.cs: Fix, we should assign from the temporary, not from
22139         the source. 
22140
22141         * expression.cs (MakeByteBlob): Fix my incorrect code.
22142
22143 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
22144
22145         * typemanager.cs (EnumToUnderlying): This function is used to get
22146         the underlying type from an enumeration, because it does not
22147         always work. 
22148
22149         * constant.cs: Use the I4_S form for values between -128 and 127.
22150
22151         * statement.cs (Block.LookupLabel): Looks up a label.
22152         (Block): Drop support for labeled blocks.
22153
22154         (LabeledStatement): New kind of statement that represents a label
22155         only.
22156
22157         (Goto): Finally implement this bad boy.
22158
22159         * cs-parser.jay: Update to reflect new mechanism to implement
22160         labels.
22161
22162 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
22163
22164         * codegen.cs (EmitContext.This): a codegen property that keeps the
22165         a single instance of this instead of creating many different this
22166         instances. 
22167
22168         * delegate.cs (Delegate.DoResolve): Update to use the property;
22169
22170         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
22171
22172         * expression.cs (BaseAccess.DoResolve): Ditto.
22173
22174 2001-12-29  Ravi Pratap  <ravi@ximian.com>
22175
22176         * typemanager.cs (methodimpl_attr_type): Add to hold the type
22177         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
22178
22179         (InitCoreTypes): Update accordingly.
22180
22181         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
22182         so we can quickly store the state.
22183
22184         (ApplyAttributes): Set the correct implementation flags
22185         for InternalCall methods.
22186
22187 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
22188
22189         * expression.cs (EmitCall): if a method is not virtual, then do
22190         not use callvirt on it.
22191
22192         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
22193         user defined stuff) requires the use of stobj, which takes an
22194         address on the stack instead of an array and an index.  So emit
22195         the Ldelema operation for it.
22196
22197         (EmitStoreOpcode): Use stobj for valuetypes.
22198
22199         (UnaryMutator.EmitCode): Use the right 1 value depending on
22200         whether we are dealing with int64/uint64, float or doubles.
22201
22202         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
22203         constructors that I implemented last night.
22204
22205         (Constructor.IsDefault): Fix to work properly for static
22206         constructors.
22207
22208         * cs-parser.jay (CheckDef): report method signature errors.
22209         Update error number 103 to be 132.
22210
22211         * decl.cs: New AdditionResult enumeration value: MethodExists.
22212         Although we do this check for methods later on in the semantic
22213         analysis, catching repeated default constructors is so easy that
22214         we catch these here. 
22215
22216         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
22217         promotions code.
22218
22219         (ParameterReference.EmitAssign, Emit): handle
22220         bools as bytes.
22221
22222         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
22223         (ArrayAccess.EmitStoreOpcode): ditto.
22224
22225         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
22226
22227         * expression.cs (MakeByteBlob): Complete all the missing types
22228         (uint, short, ushort, byte, sbyte)
22229
22230         * class.cs: Only init instance field initializers on instance
22231         constructors. 
22232
22233         Rename `constructors' to instance_constructors. 
22234
22235         (TypeContainer.AddConstructor): Only add constructors to the list
22236         if it is not static.
22237
22238         Make sure that we handle default_static_constructor independently
22239         everywhere where we handle instance_constructors
22240
22241 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
22242
22243         * class.cs: Do not lookup or create a base initializer for a
22244         static constructor.
22245
22246         (ConstructorInitializer.Resolve): use the proper type to lookup
22247         for constructors.
22248
22249         * cs-parser.jay: Report error 1585 (modifiers between type and name).
22250
22251         * enum.cs, interface.cs: Remove CloseType, this is taken care by
22252         in DeclSpace. 
22253
22254         * decl.cs: CloseType is now an virtual method, the default
22255         implementation just closes this type.
22256
22257 2001-12-28  Ravi Pratap  <ravi@ximian.com>
22258
22259         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
22260         to PreserveSig by default. Also emit HideBySig on such methods.
22261
22262         Basically, set the defaults to standard values.
22263
22264         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
22265         argument, if candidate is better, it can't be worse than the best !
22266
22267         (Invocation): Re-write bits to differentiate between methods being
22268         applicable in their expanded form and their normal form - for params
22269         methods of course.
22270
22271         Get rid of use_standard everywhere as only standard conversions are allowed
22272         in overload resolution. 
22273
22274         More spec conformance.
22275
22276 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22277
22278         * driver.cs: Add --timestamp, to see where the compiler spends
22279         most of its time.
22280
22281         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
22282         `this' in static code.
22283
22284         (SimpleName.DoResolve): Implement in terms of a helper function
22285         that allows static-references to be passed upstream to
22286         MemberAccess.
22287
22288         (Expression.ResolveWithSimpleName): Resolve specially simple
22289         names when called by MemberAccess to implement the special
22290         semantics. 
22291
22292         (Expression.ImplicitReferenceConversion): Handle conversions from
22293         Null to reference types before others, as Null's type is
22294         System.Object. 
22295
22296         * expression.cs (Invocation.EmitCall): Handle the special case of
22297         calling methods declared on a reference type from a ValueType
22298         (Base classes System.Object and System.Enum)
22299
22300         (MemberAccess.Resolve): Only perform lookups on Enumerations if
22301         the left hand side is a TypeExpr, not on every enumeration. 
22302
22303         (Binary.Resolve): If types are reference types, then do a cast to
22304         object on operators != and == of both arguments.
22305
22306         * typemanager.cs (FindMembers): Extract instance and static
22307         members if requested.
22308
22309         * interface.cs (PopulateProperty): Use void_type instead of null
22310         as the return type for the setter method.
22311
22312         (PopulateIndexer): ditto.
22313
22314 2001-12-27  Ravi Pratap  <ravi@ximian.com>
22315
22316         * support.cs (ReflectionParameters): Fix minor bug where we
22317         were examining the wrong parameter for the ParamArray attribute.
22318
22319         Cope with requests for the type of the parameter at position
22320         greater than the params parameter's. We now return the element
22321         type of the params array as that makes more sense.
22322
22323         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
22324         accordingly as we no longer have to extract the element type
22325         ourselves.
22326
22327         (Invocation.OverloadResolve): Update.
22328
22329 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22330
22331         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
22332         against IEnumerator, test whether the return value is a descendant
22333         of the IEnumerator interface.
22334
22335         * class.cs (Indexer.Define): Use an auxiliary method to implement
22336         the other bits of the method definition.  Begin support for
22337         explicit interface implementation.
22338
22339         (Property.DefineMethod): Use TypeManager.void_type instead of null
22340         for an empty return value.
22341
22342 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
22343
22344         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
22345         dealing with a FieldExpr which is composed of a FieldBuilder, in
22346         the code path we did extract the constant, but we should have
22347         obtained the underlying value to be able to cast it (otherwise we
22348         end up in an infinite loop, this is what Ravi was running into).
22349
22350         (ArrayCreation.UpdateIndices): Arrays might be empty.
22351
22352         (MemberAccess.ResolveMemberAccess): Add support for section
22353         14.5.4.1 that deals with the special case of E.I when E is a type
22354         and something else, that I can be a reference to a static member.
22355
22356         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
22357         handle a particular array type to create byte blobs, it is just
22358         something we dont generate byteblobs for.
22359
22360         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
22361         arguments. 
22362
22363         * location.cs (Push): remove the key from the hashtable that we
22364         are about to add.   This happens for empty files.
22365
22366         * driver.cs: Dispose files after we have parsed them.
22367
22368         (tokenize): new function that only runs the tokenizer on its
22369         input, for speed testing.
22370
22371 2001-12-26  Ravi Pratap  <ravi@ximian.com>
22372
22373         * class.cs (Event.Define): Define the private field only if there
22374         are no accessors defined.
22375
22376         * expression.cs (ResolveMemberAccess): If there is no associated
22377         field with the event, that means we have an event defined with its
22378         own accessors and we should flag error cs0070 since transforming
22379         ourselves into a field is not valid in that case.
22380
22381         * ecore.cs (SimpleName.DoResolve): Same as above.
22382
22383         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
22384         and charset to sane values.
22385
22386 2001-12-25  Ravi Pratap  <ravi@ximian.com>
22387
22388         * assign.cs (DoResolve): Perform check on events only if they 
22389         are being accessed outside the declaring type.
22390
22391         * cs-parser.jay (event_declarations): Update rules to correctly
22392         set the type of the implicit parameter etc.
22393
22394         (add_accessor, remove_accessor): Set current local parameters.
22395
22396         * expression.cs (Binary): For delegate addition and subtraction,
22397         cast the return value from the method into the appropriate delegate
22398         type.
22399
22400 2001-12-24  Ravi Pratap  <ravi@ximian.com>
22401
22402         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
22403         of these as the workaround is unnecessary.
22404
22405         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
22406         delegate data - none of that is needed at all.
22407
22408         Re-write bits to extract the instance expression and the delegate method
22409         correctly.
22410
22411         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
22412         on delegates too.
22413
22414         * attribute.cs (ApplyAttributes): New method to take care of common tasks
22415         of attaching attributes instead of duplicating code everywhere.
22416
22417         * everywhere : Update code to do attribute emission using the above method.
22418
22419 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22420
22421         * expression.cs (IsParamsMethodApplicable): if there are not
22422         parameters, return immediately.
22423
22424         * ecore.cs: The 0 literal can be implicity converted to an enum
22425         type. 
22426
22427         (SimpleName.DoResolve): First lookup the type, then lookup the
22428         members. 
22429
22430         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
22431         want to get its address.  If the InstanceExpression is not
22432         addressable, store the result in a temporary variable, then get
22433         the address of it.
22434
22435         * codegen.cs: Only display 219 errors on warning level or above. 
22436
22437         * expression.cs (ArrayAccess): Make it implement the
22438         IMemoryLocation interface.
22439
22440         (Binary.DoResolve): handle the operator == (object a, object b)
22441         and operator != (object a, object b) without incurring into a
22442         BoxedCast (because 5 != o should never be performed).
22443
22444         Handle binary enumerator operators.
22445
22446         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22447         value type, otherwise use Ldelem_ref.
22448
22449         Use precomputed names;
22450
22451         (AddressOf): Implement address of
22452
22453         * cs-parser.jay (labeled_statement): Fix recursive block
22454         addition by reworking the production.
22455
22456         * expression.cs (New.DoEmit): New has a special case:
22457                 
22458                  If we are dealing with a ValueType, we have a few
22459                  situations to deal with:
22460                 
22461                     * The target of New is a ValueType variable, that is
22462                       easy, we just pass this as the variable reference
22463                 
22464                     * The target of New is being passed as an argument,
22465                       to a boxing operation or a function that takes a
22466                       ValueType.
22467                 
22468                       In this case, we need to create a temporary variable
22469                       that is the argument of New.
22470
22471
22472 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22473
22474         * rootcontext.cs (LookupType): Check that current_type is not null before
22475         going about looking at nested types.
22476
22477         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22478         not implement the IAssignMethod interface any more.
22479
22480         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22481         where we tranform them into FieldExprs if they are being resolved from within
22482         the declaring type.
22483
22484         * ecore.cs (SimpleName.DoResolve): Do the same here.
22485
22486         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22487
22488         * ../errors/bug10.cs : Add.
22489
22490         * ../errors/cs0070.cs : Add.
22491
22492         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22493
22494         * assign.cs : Get rid of EventIsLocal everywhere.
22495
22496 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22497
22498         * ecore.cs (ConvertIntLiteral): finished the implementation.
22499
22500         * statement.cs (SwitchLabel): Convert the value we are using as a
22501         key before looking up the table.
22502
22503 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22504
22505         * codegen.cs (EmitTopBlock): Require a Location argument now.
22506
22507         * cs-parser.jay (constructor_declarator): We need to setup
22508         current_local_parameters before we parse the
22509         opt_constructor_initializer, to allow the variables to be bound
22510         to the constructor arguments.
22511
22512         * rootcontext.cs (LookupType): First lookup nested classes in our
22513         class and our parents before we go looking outside our class.
22514
22515         * expression.cs (ConstantFold): Extract/debox the values at the
22516         beginnning. 
22517
22518         * rootcontext.cs (EmitCode): Resolve the constants first before we
22519         resolve the types.  This is not really needed, but it helps debugging.
22520
22521         * statement.cs: report location.
22522
22523         * cs-parser.jay: pass location to throw statement.
22524
22525         * driver.cs: Small bug fix.
22526
22527         * report.cs: Updated format to be 4-zero filled digits.
22528
22529 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22530
22531         * expression.cs (CheckIndices): Fix minor bug where the wrong
22532         variable was being referred to ;-)
22533
22534         (DoEmit): Do not call EmitStaticInitializers when the 
22535         underlying type is System.Object.
22536
22537 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22538
22539         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22540         and do the usual workaround for SRE.
22541
22542         * class.cs (MyEventBuilder.EventType): New member to get at the type
22543         of the event, quickly.
22544
22545         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22546
22547         * assign.cs (Assign.DoResolve): Handle the case when the target
22548         is an EventExpr and perform the necessary checks.
22549
22550         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22551         interface.
22552
22553         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22554
22555         (EventExpr): Set the type in the constructor itself since we 
22556         are meant to be born fully resolved.
22557
22558         (EventExpr.Define): Revert code I wrote earlier.
22559                 
22560         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22561         instance expression is null. The instance expression is a This in that case
22562         or a null, depending on whether it is a static method or not.
22563
22564         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22565         refers to more than one method.
22566
22567         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22568         and accordingly flag errors.
22569
22570 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22571
22572         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
22573
22574 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22575
22576         * location.cs (ToString): Provide useful rutine.
22577
22578 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22579
22580         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
22581         objects, return the actual integral boxed.
22582
22583         * statement.cs (SwitchLabel): define an ILLabel for each
22584         SwitchLabel. 
22585
22586         (Switch.CheckSwitch): If the value is a Literal, extract
22587         the underlying literal.
22588
22589         Also in the unused hashtable we had, add the SwitchLabel so we can
22590         quickly look this value up.
22591
22592         * constant.cs: Implement a bunch of new constants.  Rewrite
22593         Literal based on this.  Made changes everywhere to adapt to this.
22594
22595         * expression.cs (Expression.MakeByteBlob): Optimize routine by
22596         dereferencing array only once, and also copes with enumrations.
22597
22598         bytes are two bytes wide, not one.
22599
22600         (Cast): Perform constant conversions.
22601
22602         * ecore.cs (TryImplicitIntConversion): Return literals instead of
22603         wrappers to the literals here.
22604
22605         * expression.cs (DoNumericPromotions): long literals can converted
22606         to ulong implicity (this is taken care of elsewhere, but I was
22607         missing this spot).
22608
22609         * ecore.cs (Expression.Literalize): Make the return type Literal,
22610         to improve type checking.
22611
22612         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
22613
22614 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22615
22616         * literal.cs: Revert code from ravi that checked the bounds.  The
22617         bounds are sane by the definition of the type itself. 
22618
22619         * typemanager.cs: Fix implementation of ImplementsInterface.  We
22620         need to actually look up in our parent hierarchy for interfaces
22621         implemented. 
22622
22623         * const.cs: Use the underlying type for enumerations
22624
22625         * delegate.cs: Compute the basename for the delegate creation,
22626         that should fix the delegate test case, and restore the correct
22627         Type Lookup semantics in rootcontext
22628
22629         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
22630         referencing a nested type with the Reflection API is using the "+"
22631         sign. 
22632
22633         * cs-parser.jay: Do not require EOF token at the end.
22634
22635 2001-12-20  Ravi Pratap  <ravi@ximian.com>
22636
22637         * rootcontext.cs (LookupType): Concatenate type names with
22638         a '.' instead of a '+' The test suite passes again.
22639
22640         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
22641         field of the enumeration.
22642
22643         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
22644         the case when the member is an EventExpr.
22645
22646         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
22647         static has an associated instance expression.
22648
22649         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
22650
22651         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
22652
22653         * class.cs (Event.Define): Register event and perform appropriate checks
22654         for error #111.
22655
22656         We define the Add and Remove methods even if the use provides none because
22657         in that case, we provide default implementations ourselves.
22658
22659         Define a private field of the type of the event. This is done by the CSC compiler
22660         and we should be doing it too ;-)
22661
22662         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
22663         More methods we use in code we generate.
22664
22665         (multicast_delegate_type, delegate_type): Two separate types since the distinction
22666         is important.
22667
22668         (InitCoreTypes): Update accordingly for the above.
22669
22670         * class.cs (Event.Emit): Generate code for default accessors that we provide
22671
22672         (EmitDefaultMethod): Do the job in the above.
22673
22674         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
22675         appropriate place.
22676
22677 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22678
22679         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
22680         builders even if we were missing one.
22681
22682         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
22683         pass the Basename as our class name instead of the Name.  The
22684         basename will be correctly composed for us.
22685
22686         * parameter.cs (Paramters): Now takes a Location argument.
22687
22688         * decl.cs (DeclSpace.LookupType): Removed convenience function and
22689         make all the code call directly LookupType in RootContext and take
22690         this chance to pass the Location information everywhere.
22691
22692         * Everywhere: pass Location information.
22693
22694 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
22695
22696         * class.cs (Constructor.Define): Updated way of detecting the
22697         length of the parameters.
22698
22699         (TypeContainer.DefineType): Use basename as the type name for
22700         nested types.
22701
22702         (TypeContainer.Define): Do not recursively define types here, as
22703         definition is taken care in order by the RootContext.
22704
22705         * tree.cs: Keep track of namespaces in a per-file basis.
22706
22707         * parameter.cs (Parameter.ComputeSignature): Update to use
22708         DeclSpace. 
22709
22710         (Parameters.GetSignature): ditto.
22711
22712         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
22713         instead of a TypeContainer.
22714
22715         (Interface.SemanticAnalysis): Use `this' instead of our parent to
22716         resolve names.  Because we need to be resolve in our context, not
22717         our parents.
22718
22719         * driver.cs: Implement response files.
22720
22721         * class.cs (TypeContainer.DefineType): If we are defined, do not
22722         redefine ourselves.
22723
22724         (Event.Emit): Emit the code for add/remove handlers.
22725         (Event.Define): Save the MethodBuilders for add/remove.
22726
22727         * typemanager.cs: Use pair here too.
22728
22729         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
22730         DictionaryEntry requires the first argument to be non-null.  
22731
22732         (enum_declaration): Compute full name for registering the
22733         enumeration.
22734
22735         (delegate_declaration): Instead of using
22736         formal_parameter_list, use opt_formal_parameter_list as the list
22737         can be empty.
22738
22739         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
22740         (EventParsing): New property that controls whether `add' and
22741         `remove' are returned as tokens or identifiers (for events);
22742
22743 2001-12-19  Ravi Pratap  <ravi@ximian.com>
22744
22745         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
22746         use MyEventBuilder only and let it wrap the real builder for us.
22747
22748         (MyEventBuilder): Revamp constructor etc.
22749
22750         Implement all operations that we perform on EventBuilder in precisely the same
22751         way here too.
22752
22753         (FindMembers): Update to use the EventBuilder member.
22754
22755         (Event.Emit): Update accordingly.
22756
22757 2001-12-18  Ravi Pratap  <ravi@ximian.com>
22758
22759         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
22760         by calling the appropriate methods.
22761
22762         (GetCustomAttributes): Make stubs as they cannot possibly do anything
22763         useful.
22764
22765         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
22766
22767 2001-12-17  Ravi Pratap  <ravi@ximian.com>
22768
22769         * delegate.cs (Delegate.Populate): Check that the return type
22770         and various parameters types are indeed accessible.
22771
22772         * class.cs (Constructor.Define): Same here.
22773
22774         (Field.Define): Ditto.
22775
22776         (Event.Define): Ditto.
22777
22778         (Operator.Define): Check that the underlying Method defined itself
22779         correctly - so it's MethodBuilder should not be null.
22780
22781         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
22782         expression happens to be null.
22783
22784         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
22785         members but as of now we don't seem to be able to do anything really useful with it.
22786
22787         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
22788         not the EventBuilder.
22789
22790 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
22791
22792         * cs-tokenizer.cs: Add support for defines.
22793         Add support for #if, #elif, #else, #endif
22794
22795         (eval_var): evaluates a variable.
22796         (eval): stubbed for evaluating functions.
22797
22798         * cs-parser.jay: Pass the defines information
22799
22800         * driver.cs: Add --define command line option.
22801
22802         * decl.cs: Move MemberCore here.
22803
22804         Make it the base class for DeclSpace.  This allows us to catch and
22805         report 108 and 109 for everything now.
22806
22807         * class.cs (TypeContainer.Define): Extract all the members
22808         before populating and emit the warning 108 (new keyword required
22809         to override) instead of having each member implement this.
22810
22811         (MemberCore.Define): New abstract method, we will be using this in
22812         the warning reporting engine in Populate.
22813
22814         (Operator.Define): Adjust to new MemberCore protocol. 
22815
22816         * const.cs (Const): This does not derive from Expression, it is a
22817         temporary object we use to create fields, it is a MemberCore. 
22818
22819         * class.cs (Method.Define): Allow the entry point to be in a
22820         specific class.
22821
22822         * driver.cs: Rewrite the argument handler to clean it up a bit.
22823
22824         * rootcontext.cs: Made it just an auxiliary namespace feature by
22825         making everything static.
22826
22827         * driver.cs: Adapt code to use RootContext type name instead of
22828         instance variable.
22829
22830         * delegate.cs: Remove RootContext argument.
22831
22832         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
22833         argument. 
22834
22835         * class.cs (Event.Define): The lookup can fail.
22836
22837         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
22838
22839         * expression.cs: Resolve the this instance before invoking the code.
22840
22841 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
22842
22843         * cs-parser.jay: Add a production in element_access that allows
22844         the thing to become a "type" reference.  This way we can parse
22845         things like "(string [])" as a type.
22846
22847         Note that this still does not handle the more complex rules of
22848         casts. 
22849
22850
22851         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
22852
22853         * ecore.cs: (CopyNewMethods): new utility function used to
22854         assemble the list of methods from running FindMembers.
22855
22856         (MemberLookup): Rework FindMembers so that 
22857
22858 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
22859
22860         * class.cs (TypeContainer): Remove Delegates who fail to be
22861         defined.
22862
22863         * delegate.cs (Populate): Verify that we dont get null return
22864         values.   TODO: Check for AsAccessible.
22865
22866         * cs-parser.jay: Use basename to emit error 574 (destructor should
22867         have the same name as container class), not the full name.
22868
22869         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
22870         possible representation.  
22871
22872         Also implements integer type suffixes U and L.
22873
22874 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
22875
22876         * expression.cs (ArrayCreation.DoResolve): We need to do the
22877         argument resolution *always*.
22878
22879         * decl.cs: Make this hold the namespace.  Hold the root context as
22880         well.
22881         (LookupType): Move here.
22882
22883         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
22884
22885         * location.cs (Row, Name): Fixed the code, it was always returning
22886         references to the first file.
22887
22888         * interface.cs: Register properties defined through interfaces.
22889
22890         * driver.cs: Add support for globbing on the command line
22891
22892         * class.cs (Field): Make it derive from MemberCore as well.
22893         (Event): ditto.
22894
22895 2001-12-15  Ravi Pratap  <ravi@ximian.com>
22896
22897         * class.cs (Event::Define): Check that the type of the event is a delegate
22898         type else flag error #66.
22899
22900         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
22901         same.
22902
22903         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
22904         values of EntryPoint, CharSet etc etc.
22905
22906         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
22907
22908         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
22909         be null and we should ignore this. I am not sure if this is really clean. Apparently,
22910         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
22911         which needs this to do its work.
22912
22913         * ../errors/cs0066.cs : Add.
22914
22915 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
22916
22917         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
22918         helper functions.
22919
22920         * class.cs: (MethodSignature.MethodSignature): Removed hack that
22921         clears out the parameters field.
22922         (MemberSignatureCompare): Cleanup
22923
22924         (MemberCore): New base class used to share code between MethodCore
22925         and Property.
22926
22927         (RegisterRequiredImplementations) BindingFlags.Public requires
22928         either BindingFlags.Instace or Static.  Use instance here.
22929
22930         (Property): Refactored code to cope better with the full spec.
22931
22932         * parameter.cs (GetParameterInfo): Return an empty array instead
22933         of null on error.
22934
22935         * class.cs (Property): Abstract or extern properties have no bodies.
22936
22937         * parameter.cs (GetParameterInfo): return a zero-sized array.
22938
22939         * class.cs (TypeContainer.MethodModifiersValid): Move all the
22940         method modifier validation to the typecontainer so we can reuse
22941         this on properties.
22942
22943         (MethodCore.ParameterTypes): return an empty sized array of types.
22944
22945         (Property.Define): Test property modifier validity.
22946
22947         Add tests for sealed/override too.
22948
22949         (Method.Emit): abstract or extern methods have no bodies.
22950
22951 2001-12-14  Ravi Pratap  <ravi@ximian.com>
22952
22953         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
22954         thing.
22955
22956         (Method::Define, ::Emit): Modify accordingly.
22957
22958         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
22959
22960         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
22961
22962         * makefile: Pass in /unsafe.
22963
22964 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
22965
22966         * class.cs (MakeKey): Kill routine.
22967
22968         * class.cs (TypeContainer.Define): Correctly define explicit
22969         method implementations (they require the full interface name plus
22970         the method name).
22971
22972         * typemanager.cs: Deply the PtrHashtable here and stop using the
22973         lame keys.  Things work so much better.
22974
22975         This of course broke everyone who depended on `RegisterMethod' to
22976         do the `test for existance' test.  This has to be done elsewhere.
22977
22978         * support.cs (PtrHashtable): A hashtable that avoid comparing with
22979         the object stupid Equals method (because, that like fails all over
22980         the place).  We still do not use it.
22981
22982         * class.cs (TypeContainer.SetRequiredInterface,
22983         TypeContainer.RequireMethods): Killed these two routines and moved
22984         all the functionality to RegisterRequiredImplementations.
22985
22986         (TypeContainer.RegisterRequiredImplementations): This routine now
22987         registers all the implementations required in an array for the
22988         interfaces and abstract methods.  We use an array of structures
22989         which can be computed ahead of time to reduce memory usage and we
22990         also assume that lookups are cheap as most classes will not
22991         implement too many interfaces.
22992
22993         We also avoid creating too many MethodSignatures.
22994
22995         (TypeContainer.IsInterfaceMethod): Update and optionally does not
22996         clear the "pending" bit if we find that there are problems with
22997         the declaration.
22998
22999         (TypeContainer.VerifyPendingMethods): Update to report errors of
23000         methods that look like implementations but are not.
23001
23002         (TypeContainer.Define): Add support for explicit interface method
23003         implementation. 
23004
23005 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
23006
23007         * typemanager.cs: Keep track of the parameters here instead of
23008         being a feature of the TypeContainer.
23009
23010         * class.cs: Drop the registration of parameters here, as
23011         InterfaceMethods are also interface declarations.
23012
23013         * delegate.cs: Register methods with the TypeManager not only with
23014         the TypeContainer.  This code was buggy.
23015
23016         * interface.cs: Full registation here.
23017
23018 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
23019
23020         * expression.cs: Remove reducer for binary expressions, it can not
23021         be done this way.
23022
23023         * const.cs: Put here the code that used to go into constant.cs
23024
23025         * constant.cs: Put here the code for constants, this is a new base
23026         class for Literals.
23027
23028         * literal.cs: Make Literal derive from Constant.
23029
23030 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
23031
23032         * statement.cs (Return.Emit): Report error 157 if the user
23033         attempts to return from a finally block.
23034
23035         (Return.Emit): Instead of emitting a return, jump to the end of
23036         the function.
23037
23038         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
23039         LocalBuilder to store the result of the function.  ReturnLabel is
23040         the target where we jump.
23041
23042
23043 2001-12-09  Radek Doulik  <rodo@ximian.com>
23044
23045         * cs-parser.jay: remember alias in current namespace
23046
23047         * ecore.cs (SimpleName::DoResolve): use aliases for types or
23048         namespaces
23049
23050         * class.cs (LookupAlias): lookup alias in my_namespace
23051
23052         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
23053         aliases hashtable
23054         (LookupAlias): lookup alias in this and if needed in parent
23055         namespaces
23056
23057 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
23058
23059         * support.cs: 
23060
23061         * rootcontext.cs: (ModuleBuilder) Made static, first step into
23062         making things static.  I need this to avoid passing the
23063         TypeContainer when calling ParameterType.
23064
23065         * support.cs (InternalParameters.ParameterType): Remove ugly hack
23066         that did string manipulation to compute the type and then call
23067         GetType.  Use Parameter.ParameterType instead.
23068
23069         * cs-tokenizer.cs: Consume the suffix for floating values.
23070
23071         * expression.cs (ParameterReference): figure out whether this is a
23072         reference parameter or not.  Kill an extra variable by computing
23073         the arg_idx during emission.
23074
23075         * parameter.cs (Parameters.GetParameterInfo): New overloaded
23076         function that returns whether a parameter is an out/ref value or not.
23077
23078         (Parameter.ParameterType): The type of the parameter (base,
23079         without ref/out applied).
23080
23081         (Parameter.Resolve): Perform resolution here.
23082         (Parameter.ExternalType): The full type (with ref/out applied).
23083
23084         * statement.cs (Using.Emit, Using.EmitExpression): Implement
23085         support for expressions on the using statement.
23086
23087 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
23088
23089         * statement.cs (Using.EmitLocalVariableDecls): Split the
23090         localvariable handling of the using statement.
23091
23092         (Block.EmitMeta): Keep track of variable count across blocks.  We
23093         were reusing slots on separate branches of blocks.
23094
23095         (Try.Emit): Emit the general code block, we were not emitting it. 
23096
23097         Check the type of the declaration to be an IDisposable or
23098         something that can be implicity converted to it. 
23099
23100         Emit conversions if required.
23101
23102         * ecore.cs (EmptyExpression): New utility class.
23103         (Expression.ImplicitConversionExists): New utility function.
23104
23105 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
23106
23107         * statement.cs (Using): Implement.
23108
23109         * expression.cs (LocalVariableReference): Support read only variables.
23110
23111         * statement.cs: Remove the explicit emit for the Leave opcode.
23112         (VariableInfo): Add a readonly field.
23113
23114 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
23115
23116         * ecore.cs (ConvCast): new class used to encapsulate the various
23117         explicit integer conversions that works in both checked and
23118         unchecked contexts.
23119
23120         (Expression.ConvertNumericExplicit): Use new ConvCast class to
23121         properly generate the overflow opcodes.
23122
23123 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23124
23125         * statement.cs: The correct type for the EmptyExpression is the
23126         element_type, not the variable type.  Ravi pointed this out.
23127
23128 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23129
23130         * class.cs (Method::Define): Handle PInvoke methods specially
23131         by using DefinePInvokeMethod instead of the usual one.
23132
23133         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
23134         above to do the task of extracting information and defining the method.
23135
23136 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23137
23138         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
23139         of the condition for string type.
23140
23141         (Emit): Move that here. 
23142
23143         (ArrayCreation::CheckIndices): Keep string literals in their expression
23144         form.
23145
23146         (EmitDynamicInitializers): Handle strings appropriately.
23147
23148 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23149
23150         * codegen.cs (EmitContext): Replace multiple variables with a
23151         single pointer to the current Switch statement.
23152
23153         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
23154         EmitContext.
23155
23156 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23157
23158         * statement.cs 
23159
23160         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
23161         default'.
23162
23163         (Foreach.Emit): Foreach on arrays was not setting
23164         up the loop variables (for break/continue).
23165
23166         (GotoCase): Semi-implented.
23167
23168 2001-12-03  Ravi Pratap  <ravi@ximian.com>
23169
23170         * attribute.cs (CheckAttribute): Handle system attributes by using
23171         Attribute.GetAttributes to examine information we need.
23172
23173         (GetValidPlaces): Same here.
23174
23175         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
23176
23177         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
23178
23179         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
23180
23181         (Method::Define): Set appropriate flags if we have a DllImport attribute.
23182
23183         (Method::Emit): Handle the case when we are a PInvoke method.
23184
23185 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23186
23187         * expression.cs: Use ResolveWithSimpleName on compound names.
23188
23189 2001-12-02  Ravi Pratap  <ravi@ximian.com>
23190
23191         * constant.cs (EmitConstant): Make sure we resolve the associated expression
23192         before trying to reduce it.
23193
23194         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
23195
23196         * constant.cs (LookupConstantValue): Implement.
23197
23198         (EmitConstant): Use the above in emitting the constant.
23199
23200         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
23201         that are user-defined by doing a LookupConstantValue on them.
23202
23203         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
23204         too, like above.
23205
23206 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
23207
23208         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
23209
23210         (BaseAccess.DoResolve): Implement.
23211
23212         (MemberAccess.DoResolve): Split this routine into a
23213         ResolveMemberAccess routine that can be used independently
23214
23215 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
23216
23217         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
23218         As that share bits of the implementation.  Is returns a boolean,
23219         while As returns the Type that is being probed.
23220
23221 2001-12-01  Ravi Pratap  <ravi@ximian.com>
23222
23223         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
23224         instead of a Literal - much easier.
23225
23226         (EnumInTransit): Remove - utterly useless :-)
23227
23228         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
23229
23230         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
23231
23232         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
23233         chain when we have no associated expression.
23234
23235 2001-11-30  Ravi Pratap  <ravi@ximian.com>
23236
23237         * constant.cs (Define): Use Location while reporting the errror.
23238
23239         Also emit a warning when 'new' is used and there is no inherited
23240         member to hide.
23241
23242         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
23243         populated.
23244
23245         (LookupEnumValue): Implement to lookup an enum member's value and define it
23246         if necessary.
23247
23248         (Populate): Re-write accordingly to use the above routine.
23249
23250 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
23251
23252         * expression.cs (This): Fix prototype for DoResolveLValue to
23253         override the base class DoResolveLValue.
23254
23255         * cs-parser.cs: Report errors cs574 and cs575 (destructor
23256         declarations) 
23257
23258         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
23259         (we need to load the address of the field here).  This fixes
23260         test-22. 
23261
23262         (FieldExpr.DoResolveLValue): Call the DoResolve
23263         function to initialize the Instance expression.
23264
23265         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
23266         correctly the GetEnumerator operation on a value type.
23267
23268         * cs-parser.jay: Add more simple parsing error catches.
23269
23270         * statement.cs (Switch): Add support for string switches.
23271         Handle null specially.
23272
23273         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
23274
23275 2001-11-28  Ravi Pratap  <ravi@ximian.com>
23276
23277         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
23278
23279         (declare_local_constant): New helper function.
23280
23281         * statement.cs (AddConstant): Keep a separate record of constants
23282
23283         (IsConstant): Implement to determine if a variable is a constant.
23284
23285         (GetConstantExpression): Implement.
23286
23287         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
23288
23289         * statement.cs (IsVariableDefined): Re-write.
23290
23291 2001-11-27  Ravi Pratap  <ravi@ximian.com>
23292
23293         * class.cs (TypeContainer::FindMembers): Look for constants
23294         in the case when we are looking for MemberTypes.Field
23295
23296         * expression.cs (MemberAccess::DoResolve): Check that in the
23297         case we are a FieldExpr and a Literal, we are not being accessed
23298         by an instance reference.
23299
23300         * cs-parser.jay (local_constant_declaration): Implement.
23301
23302         (declaration_statement): Implement for constant declarations.
23303
23304 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
23305
23306         * statement.cs (Switch): Catch double defaults.
23307
23308         (Switch): More work on the switch() statement
23309         implementation.  It works for integral values now, need to finish
23310         string support.
23311
23312
23313 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23314
23315         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
23316         integer literals into other integer literals.  To be used by
23317         switch. 
23318
23319 2001-11-24  Ravi Pratap  <ravi@ximian.com>
23320
23321         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
23322         some memory.
23323
23324         (EmitDynamicInitializers): Cope with the above since we extract data
23325         directly from ArrayData now.
23326
23327         (ExpectInitializers): Keep track of whether initializers are mandatory
23328         or not.
23329
23330         (Bounds): Make it a hashtable to prevent the same dimension being 
23331         recorded for every element in that dimension.
23332
23333         (EmitDynamicInitializers): Fix bug which prevented the Set array method
23334         from being found.
23335
23336         Also fix bug which was causing the indices to be emitted in the reverse
23337         order.
23338
23339 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23340
23341         * expression.cs (ArrayCreation): Implement the bits that Ravi left
23342         unfinished.  They do not work, because the underlying code is
23343         sloppy.
23344
23345 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23346
23347         * cs-parser.jay: Remove bogus fixme.
23348
23349         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
23350         on Switch statement.
23351
23352 2001-11-23  Ravi Pratap  <ravi@ximian.com>
23353
23354         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
23355         the same. 
23356
23357         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
23358         parameter. Apparently, any expression is allowed. 
23359
23360         (ValidateInitializers): Update accordingly.
23361
23362         (CheckIndices): Fix some tricky bugs thanks to recursion.
23363
23364         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
23365         I was being completely brain-dead.
23366
23367         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
23368         and re-write acordingly.
23369
23370         (DelegateInvocation): Re-write accordingly.
23371
23372         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
23373
23374         (MakeByteBlob): Handle types more correctly.
23375
23376         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
23377         initialization from expressions but it is incomplete because I am a complete
23378         Dodo :-|
23379
23380 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23381
23382         * statement.cs (If.Emit): Fix a bug that generated incorrect code
23383         on If.  Basically, we have to return `true' (ie, we do return to
23384         our caller) only if both branches of the if return.
23385
23386         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
23387         short-circuit operators, handle them as short circuit operators. 
23388
23389         (Cast.DoResolve): Resolve type.
23390         (Cast.Cast): Take an expression as the target type.
23391
23392         * cs-parser.jay (cast_expression): Remove old hack that only
23393         allowed a limited set of types to be handled.  Now we take a
23394         unary_expression and we resolve to a type during semantic
23395         analysis.
23396
23397         Use the grammar productions from Rhys to handle casts (this is
23398         not complete like Rhys syntax yet, we fail to handle that corner
23399         case that C# has regarding (-x), but we will get there.
23400
23401 2001-11-22  Ravi Pratap  <ravi@ximian.com>
23402
23403         * class.cs (EmitFieldInitializer): Take care of the case when we have a
23404         field which is an array type.
23405
23406         * cs-parser.jay (declare_local_variables): Support array initialization too.
23407
23408         * typemanager.cs (MakeKey): Implement.
23409
23410         (everywhere): Use the above appropriately.
23411
23412         * cs-parser.jay (for_statement): Update for array initialization while
23413         declaring variables.
23414
23415         * ecore.cs : The error message was correct, it's the variable's names that
23416         were misleading ;-) Make the code more readable.
23417
23418         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
23419         the correct type etc.
23420
23421         (ConvertExplicit): Handle Enum types by examining the underlying type.
23422
23423 2001-11-21  Ravi Pratap  <ravi@ximian.com>
23424
23425         * parameter.cs (GetCallingConvention): Always return
23426         CallingConventions.Standard for now.
23427
23428 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23429
23430         * expression.cs (Binary.ResolveOperator): Update the values of `l'
23431         and `r' after calling DoNumericPromotions.
23432
23433         * ecore.cs: Fix error message (the types were in the wrong order).
23434
23435         * statement.cs (Foreach.ProbeCollectionType): Need to pass
23436         BindingFlags.Instance as well 
23437
23438         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
23439         implicit int literal conversion in an empty cast so that we
23440         propagate the right type upstream.
23441
23442         (UnboxCast): new class used to unbox value types.
23443         (Expression.ConvertExplicit): Add explicit type conversions done
23444         by unboxing.
23445
23446         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23447         the target type before applying the implicit LongLiterals to ULong
23448         literal cast.
23449
23450 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23451
23452         * cs-parser.jay (for_statement): Reworked the way For works: now
23453         we declare manually any variables that are introduced in
23454         for_initializer to solve the problem of having out-of-band code
23455         emition (that is what got for broken).
23456
23457         (declaration_statement): Perform the actual variable declaration
23458         that used to be done in local_variable_declaration here.
23459
23460         (local_variable_declaration): Do not declare anything, just pass
23461         the information on a DictionaryEntry
23462
23463 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23464
23465         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23466         re-write of the logic to now make it recursive.
23467
23468         (UpdateIndices): Re-write accordingly.
23469
23470         Store element data in a separate ArrayData list in the above methods.
23471
23472         (MakeByteBlob): Implement to dump the array data into a byte array.
23473
23474 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23475
23476         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23477         into CheckIndices.
23478
23479         * constant.cs (Define): Implement.
23480
23481         (EmitConstant): Re-write fully.
23482
23483         Pass in location info.
23484
23485         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23486         respectively.
23487
23488         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23489         DictionaryEntry since we need location info too.
23490
23491         (constant_declaration): Update accordingly.
23492
23493         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23494         code into another method : UpdateIndices.
23495
23496 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23497
23498         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23499         some type checking etc.
23500
23501 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23502
23503         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23504         bits to provide dimension info if the user skips doing that.
23505
23506         Update second constructor to store the rank correctly.
23507
23508 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23509
23510         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23511         and try to implement.
23512
23513         * ../errors/cs0150.cs : Add.
23514
23515         * ../errors/cs0178.cs : Add.
23516
23517 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23518
23519         * statement.cs: Implement foreach on multi-dimensional arrays. 
23520
23521         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23522         name of the params argument.
23523
23524         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23525         initializing the array.
23526
23527         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23528         we can use this elsewhere.
23529
23530         * statement.cs: Finish implementation of foreach for single
23531         dimension arrays.
23532
23533         * cs-parser.jay: Use an out-of-band stack to pass information
23534         around, I wonder why I need this.
23535
23536         foreach_block: Make the new foreach_block the current_block.
23537
23538         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23539         function used to return a static Parameters structure.  Used for
23540         empty parameters, as those are created very frequently.
23541
23542         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23543
23544 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23545
23546         * interface.cs : Default modifier is private, not public. The
23547         make verify test passes again.
23548
23549 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23550
23551         * support.cs (ReflectionParameters): Fix logic to determine
23552         whether the last parameter is a params one. Test 9 passes again.
23553
23554         * delegate.cs (Populate): Register the builders we define with
23555         RegisterParameterForBuilder. Test 19 passes again.
23556
23557         * cs-parser.jay (property_declaration): Reference $6 instead
23558         of $$ to get at the location.
23559
23560         (indexer_declaration): Similar stuff.
23561
23562         (attribute): Ditto.
23563
23564         * class.cs (Property): Register parameters for the Get and Set methods
23565         if they exist. Test 23 passes again.
23566
23567         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23568         call to EmitArguments as we are sure there aren't any params arguments. 
23569         Test 32 passes again.
23570
23571         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
23572         IndexOutOfRangeException. 
23573
23574         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
23575         Test 33 now passes again.
23576
23577 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
23578
23579         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
23580         broke a bunch of things.  Will have to come up with a better way
23581         of tracking locations.
23582
23583         * statement.cs: Implemented foreach for single dimension arrays.
23584
23585 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23586
23587         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
23588         an error.  This removes the lookup from the critical path.
23589
23590         * cs-parser.jay: Removed use of temporary_loc, which is completely
23591         broken. 
23592
23593 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
23594
23595         * support.cs (ReflectionParameters.ParameterModifier): Report
23596         whether the argument is a PARAMS argument or not.
23597
23598         * class.cs: Set the attribute `ParamArrayAttribute' on the
23599         parameter argument.
23600
23601         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
23602         and cons_param_array_attribute (ConstructorInfo for
23603         ParamArrayAttribute)., 
23604
23605         * codegen.cs: Emit the return using the `Return' statement, that
23606         way we can report the error correctly for missing return values. 
23607
23608         * class.cs (Method.Emit): Clean up.
23609
23610         * expression.cs (Argument.Resolve): Take another argument: the
23611         location where this argument is used.  Notice that this is not
23612         part of the "Argument" class as to reduce the size of the
23613         structure (we know the approximate location anyways).
23614
23615         Test if the argument is a variable-reference, if not, then
23616         complain with a 206.
23617
23618         (Argument.Emit): Emit addresses of variables.
23619
23620         (Argument.FullDesc): Simplify.
23621
23622         (Invocation.DoResolve): Update for Argument.Resolve.
23623
23624         (ElementAccess.DoResolve): ditto.
23625
23626         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
23627         method should be virtual, as this method is always virtual.
23628
23629         (NewDelegate.DoResolve): Update for Argument.Resolve.
23630
23631         * class.cs (ConstructorInitializer.DoResolve): ditto.
23632
23633         * attribute.cs (Attribute.Resolve): ditto.
23634
23635 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
23636
23637         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
23638
23639         * expression.cs (ParameterReference): Drop IStackStorage and implement
23640         IAssignMethod instead. 
23641
23642         (LocalVariableReference): ditto.
23643
23644         * ecore.cs (FieldExpr): Drop IStackStorage and implement
23645         IAssignMethod instead. 
23646
23647 2001-11-13  Miguel de Icaza <miguel@ximian.com>
23648
23649         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
23650         enumerations that are used in heavily used structures derive from
23651         byte in a laughable and pathetic attempt to reduce memory usage.
23652         This is the kind of pre-optimzations that you should not do at
23653         home without adult supervision.
23654
23655         * expression.cs (UnaryMutator): New class, used to handle ++ and
23656         -- separatedly from the other unary operators.  Cleans up the
23657         code, and kills the ExpressionStatement dependency in Unary.
23658
23659         (Unary): Removed `method' and `Arguments' from this class, making
23660         it smaller, and moving it all to SimpleCall, so I can reuse this
23661         code in other locations and avoid creating a lot of transient data
23662         strucutres when not required.
23663
23664         * cs-parser.jay: Adjust for new changes.
23665
23666 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
23667
23668         * enum.cs (Enum.Populate): If there is a failure during
23669         definition, return
23670
23671         * cs-parser.jay (opt_enum_base): we used to catch type errors
23672         here, but this is really incorrect.  The type error should be
23673         catched during semantic analysis.
23674
23675 2001-12-11  Ravi Pratap  <ravi@ximian.com>
23676
23677         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
23678         current_local_parameters as expected since I, in my stupidity, had forgotten
23679         to do this :-)
23680
23681         * attribute.cs (GetValidPlaces): Fix stupid bug.
23682
23683         * class.cs (Method::Emit): Perform check on applicability of attributes.
23684
23685         (Constructor::Emit): Ditto.
23686
23687         (Field::Emit): Ditto.
23688
23689         (Field.Location): Store location information.
23690
23691         (Property, Event, Indexer, Operator): Ditto.
23692
23693         * cs-parser.jay (field_declaration): Pass in location for each field.
23694
23695         * ../errors/cs0592.cs : Add.
23696
23697 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23698
23699         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
23700
23701         (InitCoreTypes): Update accordingly.
23702
23703         (RegisterAttrType, LookupAttr): Implement.
23704
23705         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
23706         info about the same.
23707
23708         (Resolve): Update to populate the above as necessary.
23709
23710         (Error592): Helper.
23711
23712         (GetValidPlaces): Helper to the above.
23713
23714         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
23715
23716         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
23717
23718 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23719
23720         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
23721
23722         * ../errors/cs0617.cs : Add.
23723
23724 2001-11-11  Ravi Pratap  <ravi@ximian.com>
23725
23726         * enum.cs (Emit): Rename to Populate to be more consistent with what
23727         we expect it to do and when exactly it is called.
23728
23729         * class.cs, rootcontext.cs : Update accordingly.
23730
23731         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
23732         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
23733
23734         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
23735
23736         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
23737         of a fieldinfo using the above, when dealing with a FieldBuilder.
23738
23739 2001-11-10  Ravi Pratap  <ravi@ximian.com>
23740
23741         * ../errors/cs0031.cs : Add.
23742
23743         * ../errors/cs1008.cs : Add.
23744
23745         * ../errrors/cs0543.cs : Add.
23746
23747         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
23748         enum type.
23749
23750         (FindMembers): Implement.
23751
23752         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
23753         enums and delegates too.
23754
23755         (enum_types): Rename to builder_to_enum.
23756
23757         (delegate_types): Rename to builder_to_delegate.
23758
23759         * delegate.cs (FindMembers): Implement.
23760
23761 2001-11-09  Ravi Pratap  <ravi@ximian.com>
23762
23763         * typemanager.cs (IsEnumType): Implement.
23764
23765         * enum.cs (Emit): Re-write parts to account for the underlying type
23766         better and perform checking etc.
23767
23768         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
23769         of the underlying type.
23770
23771         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
23772         value
23773
23774         * enum.cs (error31): Helper to report error #31.
23775
23776         * cs-parser.jay (enum_declaration): Store location of each member too.
23777
23778         * enum.cs (member_to_location): New hashtable. 
23779
23780         (AddEnumMember): Update location hashtable.
23781
23782         (Emit): Use the location of each member while reporting errors.
23783
23784 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23785
23786         * cs-parser.jay: A for_initializer if is a
23787         local_variable_declaration really ammount to have an implicit
23788         block with the variable declaration and no initializer for for.
23789
23790         * statement.cs (For.Emit): Cope with null initializers.
23791
23792         This fixes the infinite loop on for initializers.
23793
23794 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
23795
23796         * enum.cs: More cleanup.
23797
23798         * ecore.cs: Remove dead code.
23799
23800         * class.cs (Property.Emit): More simplification.
23801         (Event.Emit): ditto.
23802
23803         Reworked to have less levels of indentation.
23804
23805 2001-11-08  Ravi Pratap  <ravi@ximian.com>
23806
23807         * class.cs (Property): Emit attributes.
23808
23809         (Field): Ditto.
23810
23811         (Event): Ditto.
23812
23813         (Indexer): Ditto.
23814
23815         (Operator): Ditto.
23816
23817         * enum.cs (Emit): Ditto.
23818
23819         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
23820         Enums too.
23821
23822         * class.cs (Field, Event, etc.): Move attribute generation into the
23823         Emit method everywhere.
23824
23825         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
23826         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
23827         as we had no way of defining nested enums !
23828
23829         * rootcontext.cs : Adjust code accordingly.
23830
23831         * typemanager.cs (AddEnumType): To keep track of enum types separately.
23832
23833 2001-11-07  Ravi Pratap  <ravi@ximian.com>
23834
23835         * expression.cs (EvalConstantExpression): Move into ecore.cs
23836
23837         * enum.cs (Enum): Rename some members and make them public and readonly
23838         according to our convention.
23839
23840         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
23841         nothing else.
23842
23843         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
23844
23845         (Enum::Emit): Write a simple version for now which doesn't try to compute
23846         expressions. I shall modify this to be more robust in just a while.
23847
23848         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
23849
23850         (TypeContainer::CloseType): Create the Enum types too.
23851
23852         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
23853
23854         * expression.cs (EvalConstantExpression): Get rid of completely.
23855
23856         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
23857         user-defined values and other cases.
23858
23859         (IsValidEnumLiteral): Helper function.
23860
23861         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
23862         out there in the case we had a literal FieldExpr.
23863
23864         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
23865
23866         (Literalize): Revamp a bit to take two arguments.
23867
23868         (EnumLiteral): New class which derives from Literal to wrap enum literals.
23869
23870 2001-11-06  Ravi Pratap  <ravi@ximian.com>
23871
23872         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
23873
23874         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
23875
23876         (Resolve): Use the above to ensure we have proper initializers.
23877
23878 2001-11-05  Ravi Pratap  <ravi@ximian.com>
23879
23880         * expression.cs (Expression::EvalConstantExpression): New method to 
23881         evaluate constant expressions.
23882
23883         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
23884
23885 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
23886
23887         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
23888         in an array.
23889
23890         (Binary.ResolveOperator): Handle operator != (object a, object b)
23891         and operator == (object a, object b);
23892
23893         (Binary.DoNumericPromotions): Indicate whether the numeric
23894         promotion was possible.
23895
23896         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
23897         Implement.  
23898
23899         Made the ArrayAccess implement interface IAssignMethod instead of
23900         IStackStore as the order in which arguments are passed reflects
23901         this.
23902
23903         * assign.cs: Instead of using expr.ExprClass to select the way of
23904         assinging, probe for the IStackStore/IAssignMethod interfaces.
23905
23906         * typemanager.cs: Load InitializeArray definition.
23907
23908         * rootcontext.cs (RootContext.MakeStaticData): Used to define
23909         static data that can be used to initialize arrays. 
23910
23911 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
23912
23913         * expression.cs: Handle operator== and operator!= for booleans.
23914
23915         (Conditioal.Reduce): Implement reducer for the ?: operator.
23916
23917         (Conditional.Resolve): Implement dead code elimination.
23918
23919         (Binary.Resolve): Catch string literals and return a new
23920         concatenated string.
23921
23922         (Unary.Reduce): Implement reduction of unary expressions.
23923
23924         * ecore.cs: Split out the expression core handling here.
23925
23926         (Expression.Reduce): New method used to perform constant folding
23927         and CSE.  This is needed to support constant-expressions. 
23928
23929         * statement.cs (Statement.EmitBoolExpression): Pass true and false
23930         targets, and optimize for !x.
23931
23932 2001-11-04  Ravi Pratap  <ravi@ximian.com>
23933
23934         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
23935         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
23936         set custom atttributes.
23937
23938         * literal.cs (Literal::GetValue): New abstract method to return the actual
23939         value of the literal, cast as an object.
23940
23941         (*Literal): Implement GetValue method.
23942
23943         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
23944         expressions to the arraylist but objects of type Argument.
23945
23946         * class.cs (TypeContainer::Emit): Emit our attributes too.
23947
23948         (Method::Emit, Constructor::Emit): Ditto.
23949
23950         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
23951         to be ignoring earlier.
23952
23953 2001-11-03  Ravi Pratap  <ravi@ximian.com>
23954
23955         * attribute.cs (AttributeSection::Define): Implement to do the business
23956         of constructing a CustomAttributeBuilder.
23957
23958         (Attribute): New trivial class. Increases readability of code.  
23959
23960         * cs-parser.jay : Update accordingly.
23961
23962         (positional_argument_list, named_argument_list, named_argument): New rules
23963
23964         (attribute_arguments): Use the above so that we are more correct.
23965
23966 2001-11-02  Ravi Pratap  <ravi@ximian.com>
23967
23968         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
23969         to perform all checks for a method with a params parameter.
23970
23971         (Invocation::OverloadResolve): Update to use the above method and therefore
23972         cope correctly with params method invocations.
23973
23974         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
23975         params too.
23976
23977         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
23978         constructors in our parent too because we can't afford to miss out on 
23979         protected ones ;-)
23980
23981         * attribute.cs (AttributeSection): New name for the class Attribute
23982
23983         Other trivial changes to improve readability.
23984
23985         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
23986         use the new class names.
23987
23988 2001-11-01  Ravi Pratap  <ravi@ximian.com>
23989
23990         * class.cs (Method::Define): Complete definition for params types too
23991
23992         (Indexer::Define): Ditto.
23993
23994         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
23995         Cope everywhere with a request for info about the array parameter.
23996
23997 2001-11-01  Ravi Pratap  <ravi@ximian.com>
23998
23999         * tree.cs (RecordNamespace): Fix up to check for the correct key.
24000
24001         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
24002         local_variable_type to extract the string corresponding to the type.
24003
24004         (local_variable_type): Fixup the action to use the new helper method.
24005
24006         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
24007         go.
24008
24009         * expression.cs : Clean out code which uses the above.
24010
24011 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24012
24013         * typemanager.cs (RegisterMethod): Check if we already have an existing key
24014         and bale out if necessary by returning a false.
24015
24016         (RegisterProperty): Ditto.
24017
24018         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
24019         and print out appropriate error messages.
24020
24021         * interface.cs (everywhere): Ditto.
24022
24023         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
24024         location to constructor.
24025
24026         * class.cs (Property, Event, Indexer): Update accordingly.
24027
24028         * ../errors/cs111.cs : Added.
24029
24030         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
24031         of a method, as laid down by the spec.
24032
24033         (Invocation::OverloadResolve): Use the above method.
24034
24035 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24036
24037         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
24038         now take a TypeContainer and a Parameters object.
24039
24040         (ParameterData): Modify return type of ParameterModifier method to be 
24041         Parameter.Modifier and not a string.
24042
24043         (ReflectionParameters, InternalParameters): Update accordingly.
24044
24045         * expression.cs (Argument::GetParameterModifier): Same here.
24046
24047         * support.cs (InternalParameters::ParameterType): Find a better way of determining
24048         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
24049         symbol in it at all so maybe this is only for now.
24050
24051 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24052
24053         * support.cs (InternalParameters): Constructor now takes an extra argument 
24054         which is the actual Parameters class.
24055
24056         (ParameterDesc): Update to provide info on ref/out modifiers.
24057
24058         * class.cs (everywhere): Update call to InternalParameters to pass in
24059         the second argument too.
24060
24061         * support.cs (ParameterData): Add ParameterModifier, which is a method 
24062         to return the modifier info [ref/out etc]
24063
24064         (InternalParameters, ReflectionParameters): Implement the above.
24065
24066         * expression.cs (Argument::ParameterModifier): Similar function to return
24067         info about the argument's modifiers.
24068
24069         (Invocation::OverloadResolve): Update to take into account matching modifiers 
24070         too.
24071
24072         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
24073         a new SetFormalParameters object which we pass to InternalParameters.
24074
24075 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24076
24077         * expression.cs (NewArray): Merge into the ArrayCreation class.
24078
24079 2001-10-29  Ravi Pratap  <ravi@ximian.com>
24080
24081         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
24082         NewUserdefinedArray into one as there wasn't much of a use in having
24083         two separate ones.
24084
24085         * expression.cs (Argument): Change field's name to ArgType from Type.
24086
24087         (Type): New readonly property which returns the proper type, taking into 
24088         account ref/out modifiers.
24089
24090         (everywhere): Adjust code accordingly for the above.
24091
24092         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
24093         whether we are emitting for a ref or out parameter.
24094
24095         * expression.cs (Argument::Emit): Use the above field to set the state.
24096
24097         (LocalVariableReference::Emit): Update to honour the flag and emit the
24098         right stuff.
24099
24100         * parameter.cs (Attributes): Set the correct flags for ref parameters.
24101
24102         * expression.cs (Argument::FullDesc): New function to provide a full desc.
24103
24104         * support.cs (ParameterData): Add method ParameterDesc to the interface.
24105
24106         (ReflectionParameters, InternalParameters): Implement the above method.
24107
24108         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
24109         reporting errors.
24110
24111         (Invocation::FullMethodDesc): Ditto. 
24112
24113 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
24114
24115         * cs-parser.jay: Add extra production for the second form of array
24116         creation. 
24117
24118         * expression.cs (ArrayCreation): Update to reflect the above
24119         change. 
24120
24121         * Small changes to prepare for Array initialization.
24122
24123 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
24124
24125         * typemanager.cs (ImplementsInterface): interface might be null;
24126         Deal with this problem;
24127
24128         Also, we do store negative hits on the cache (null values), so use
24129         this instead of calling t.GetInterfaces on the type everytime.
24130
24131 2001-10-28  Ravi Pratap  <ravi@ximian.com>
24132
24133         * typemanager.cs (IsBuiltinType): New method to help determine the same.
24134
24135         * expression.cs (New::DoResolve): Get rid of array creation code and instead
24136         split functionality out into different classes.
24137
24138         (New::FormArrayType): Move into NewBuiltinArray.
24139
24140         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
24141         quite useless.
24142
24143         (NewBuiltinArray): New class to handle creation of built-in arrays.
24144
24145         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
24146         account creation of one-dimensional arrays.
24147
24148         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
24149
24150         (NewUserdefinedArray::DoResolve): Implement.
24151
24152         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
24153
24154         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
24155         we maintain inside the TypeManager. This is necessary to perform lookups on the
24156         module builder.
24157
24158         (LookupType): Update to perform GetType on the module builders too.     
24159
24160         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
24161
24162         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
24163
24164 2001-10-23  Ravi Pratap  <ravi@ximian.com>
24165
24166         * expression.cs (New::DoResolve): Implement guts of array creation.
24167
24168         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
24169
24170 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
24171
24172         * expression.cs: Fix bug I introduced lsat night that broke
24173         Delegates. 
24174
24175         (Expression.Resolve): Report a 246 error (can not resolve name)
24176         if we find a SimpleName in the stream.
24177
24178         (Expression.ResolveLValue): Ditto.
24179
24180         (Expression.ResolveWithSimpleName): This function is a variant of
24181         ResolveName, this one allows SimpleNames to be returned without a
24182         warning.  The only consumer of SimpleNames is MemberAccess
24183
24184 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
24185
24186         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
24187         might arrive here.  I have my doubts that this is correct.
24188
24189         * statement.cs (Lock): Implement lock statement.
24190
24191         * cs-parser.jay: Small fixes to support `lock' and `using'
24192
24193         * cs-tokenizer.cs: Remove extra space
24194
24195         * driver.cs: New flag --checked, allows to turn on integer math
24196         checking. 
24197
24198         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
24199         Threading.Monitor.Exit 
24200
24201 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
24202
24203         * expression.cs (IndexerAccess::DoResolveLValue): Set the
24204         Expression Class to be IndexerAccess.
24205
24206         Notice that Indexer::DoResolve sets the eclass to Value.
24207
24208 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
24209
24210         * class.cs (TypeContainer::Emit): Emit code for indexers.
24211
24212         * assign.cs (IAssignMethod): New interface implemented by Indexers
24213         and Properties for handling assignment.
24214
24215         (Assign::Emit): Simplify and reuse code. 
24216
24217         * expression.cs (IndexerAccess, PropertyExpr): Implement
24218         IAssignMethod, clean up old code. 
24219
24220 2001-10-22  Ravi Pratap  <ravi@ximian.com>
24221
24222         * typemanager.cs (ImplementsInterface): New method to determine if a type
24223         implements a given interface. Provides a nice cache too.
24224
24225         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
24226         method.
24227
24228         (ConvertReferenceExplicit): Ditto.
24229
24230         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
24231         various methods, with correct names etc.
24232
24233         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
24234         Operator.UnaryNegation.
24235
24236         * cs-parser.jay (operator_declarator): Be a little clever in the case where
24237         we have a unary plus or minus operator.
24238
24239         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
24240         UnaryMinus.
24241
24242         * everywhere : update accordingly.
24243
24244         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
24245         respectively.
24246
24247         * class.cs (Method::Define): For the case where we are implementing a method
24248         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
24249         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
24250
24251 2001-10-21  Ravi Pratap  <ravi@ximian.com>
24252
24253         * interface.cs (FindMembers): Implement to work around S.R.E
24254         lameness.
24255
24256         * typemanager.cs (IsInterfaceType): Implement.
24257
24258         (FindMembers): Update to handle interface types too.
24259
24260         * expression.cs (ImplicitReferenceConversion): Re-write bits which
24261         use IsAssignableFrom as that is not correct - it doesn't work.
24262
24263         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
24264         and accordingly override EmitStatement.
24265
24266         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
24267         using the correct logic :-)
24268
24269 2001-10-19  Ravi Pratap  <ravi@ximian.com>
24270
24271         * ../errors/cs-11.cs : Add to demonstrate error -11 
24272
24273 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
24274
24275         * assign.cs (Assign::Resolve): Resolve right hand side first, and
24276         then pass this as a hint to ResolveLValue.
24277
24278         * expression.cs (FieldExpr): Add Location information
24279
24280         (FieldExpr::LValueResolve): Report assignment to readonly
24281         variable. 
24282
24283         (Expression::ExprClassFromMemberInfo): Pass location information.
24284
24285         (Expression::ResolveLValue): Add new method that resolves an
24286         LValue. 
24287
24288         (Expression::DoResolveLValue): Default invocation calls
24289         DoResolve. 
24290
24291         (Indexers): New class used to keep track of indexers in a given
24292         Type. 
24293
24294         (IStackStore): Renamed from LValue, as it did not really describe
24295         what this did.  Also ResolveLValue is gone from this interface and
24296         now is part of Expression.
24297
24298         (ElementAccess): Depending on the element access type
24299
24300         * typemanager.cs: Add `indexer_name_type' as a Core type
24301         (System.Runtime.CompilerServices.IndexerNameAttribute)
24302
24303         * statement.cs (Goto): Take a location.
24304
24305 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24306
24307         * delegate.cs (Delegate::VerifyDelegate): New method to verify
24308         if two delegates are compatible.
24309
24310         (NewDelegate::DoResolve): Update to take care of the case when
24311         we instantiate a delegate from another delegate.
24312
24313         * typemanager.cs (FindMembers): Don't even try to look up members
24314         of Delegate types for now.
24315
24316 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24317
24318         * delegate.cs (NewDelegate): New class to take care of delegate
24319         instantiation.
24320
24321         * expression.cs (New): Split the delegate related code out into 
24322         the NewDelegate class.
24323
24324         * delegate.cs (DelegateInvocation): New class to handle delegate 
24325         invocation.
24326
24327         * expression.cs (Invocation): Split out delegate related code into
24328         the DelegateInvocation class.
24329
24330 2001-10-17  Ravi Pratap  <ravi@ximian.com>
24331
24332         * expression.cs (New::DoResolve): Implement delegate creation fully
24333         and according to the spec.
24334
24335         (New::DoEmit): Update to handle delegates differently.
24336
24337         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
24338         because of which we were printing out arguments in reverse order !
24339
24340         * delegate.cs (VerifyMethod): Implement to check if the given method
24341         matches the delegate.
24342
24343         (FullDelegateDesc): Implement.
24344
24345         (VerifyApplicability): Implement.
24346
24347         * expression.cs (Invocation::DoResolve): Update to accordingly handle
24348         delegate invocations too.
24349
24350         (Invocation::Emit): Ditto.
24351
24352         * ../errors/cs1593.cs : Added.
24353
24354         * ../errors/cs1594.cs : Added.
24355
24356         * delegate.cs (InstanceExpression, TargetMethod): New properties.
24357
24358 2001-10-16  Ravi Pratap  <ravi@ximian.com>
24359
24360         * typemanager.cs (intptr_type): Core type for System.IntPtr
24361
24362         (InitCoreTypes): Update for the same.
24363
24364         (iasyncresult_type, asynccallback_type): Ditto.
24365
24366         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
24367         correct.
24368
24369         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
24370         too.
24371
24372         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
24373         the builders for the 4 members of a delegate type :-)
24374
24375         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
24376         type.
24377
24378         * expression.cs (New::DoResolve): Implement guts for delegate creation.
24379
24380         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
24381
24382 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
24383
24384         * statement.cs (Break::Emit): Implement.   
24385         (Continue::Emit): Implement.
24386
24387         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24388         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24389         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24390         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
24391         end loop
24392
24393         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
24394         properties that track the label for the current loop (begin of the
24395         loop and end of the loop).
24396
24397 2001-10-15  Ravi Pratap  <ravi@ximian.com>
24398
24399         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
24400         use of emitting anything at all.
24401
24402         * class.cs, rootcontext.cs : Get rid of calls to the same.
24403
24404         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
24405
24406         (Populate): Define the constructor correctly and set the implementation
24407         attributes.
24408
24409         * typemanager.cs (delegate_types): New hashtable to hold delegates that
24410         have been defined.
24411
24412         (AddDelegateType): Implement.
24413
24414         (IsDelegateType): Implement helper method.
24415
24416         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
24417
24418         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
24419         and accordingly handle it.
24420
24421         * delegate.cs (Populate): Take TypeContainer argument.
24422         Implement bits to define the Invoke method. However, I still haven't figured out
24423         how to take care of the native int bit :-(
24424
24425         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
24426         Qualify the name of the delegate, not its return type !
24427
24428         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
24429         conversion.
24430
24431         (StandardConversionExists): Checking for array types turns out to be recursive.
24432
24433         (ConvertReferenceExplicit): Implement array conversion.
24434
24435         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
24436
24437 2001-10-12  Ravi Pratap  <ravi@ximian.com>
24438
24439         * cs-parser.jay (delegate_declaration): Store the fully qualified
24440         name as it is a type declaration.
24441
24442         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24443         readonly.
24444
24445         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24446         as TypeContainer::DefineType.
24447
24448         (Populate): Method in which all the definition of the various methods (Invoke)
24449         etc is done.
24450
24451         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24452         see.
24453
24454         (CloseDelegate): Finally creates the delegate.
24455
24456         * class.cs (TypeContainer::DefineType): Update to define delegates.
24457         (Populate, Emit and CloseType): Do the same thing here too.
24458
24459         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24460         delegates in all these operations.
24461
24462 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24463
24464         * expression.cs: LocalTemporary: a new expression used to
24465         reference a temporary that has been created.
24466
24467         * assign.cs: Handle PropertyAccess back here, so that we can
24468         provide the proper semantic access to properties.
24469
24470         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24471         a few more explicit conversions. 
24472
24473         * modifiers.cs: `NEW' modifier maps to HideBySig.
24474
24475         * expression.cs (PropertyExpr): Make this into an
24476         ExpressionStatement, and support the EmitStatement code path. 
24477
24478         Perform get/set error checking, clean up the interface.
24479
24480         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24481         them into toplevel access objects.
24482
24483 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24484
24485         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24486         SRE.
24487
24488         * typemanager.cs: Keep track here of our PropertyBuilders again to
24489         work around lameness in SRE.
24490
24491 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24492
24493         * expression.cs (LValue::LValueResolve): New method in the
24494         interface, used to perform a second resolution pass for LValues. 
24495
24496         (This::DoResolve): Catch the use of this in static methods.
24497
24498         (This::LValueResolve): Implement.
24499
24500         (This::Store): Remove warning, assigning to `this' in structures
24501         is 
24502
24503         (Invocation::Emit): Deal with invocation of
24504         methods on value types.  We need to pass the address to structure
24505         methods rather than the object itself.  (The equivalent code to
24506         emit "this" for structures leaves the entire structure on the
24507         stack instead of a pointer to it). 
24508
24509         (ParameterReference::DoResolve): Compute the real index for the
24510         argument based on whether the method takes or not a `this' pointer
24511         (ie, the method is static).
24512
24513         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24514         value types returned from functions when we need to invoke a
24515         method on the sturcture.
24516
24517
24518 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24519
24520         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24521         defining the type in the Modulebuilder or Typebuilder. This is to take
24522         care of nested types which need to be defined on the TypeBuilder using
24523         DefineNestedMethod.
24524
24525         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24526         methods in RootContext, only ported to be part of TypeContainer.
24527
24528         (TypeContainer::GetInterfaceOrClass): Ditto.
24529
24530         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24531
24532         * interface.cs (Interface::DefineInterface): New method. Does exactly
24533         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24534         too.
24535
24536         (Interface::GetInterfaces): Move from RootContext here and port.
24537
24538         (Interface::GetInterfaceByName): Same here.
24539
24540         * rootcontext.cs (ResolveTree): Re-write.
24541
24542         (PopulateTypes): Re-write.
24543
24544         * class.cs (TypeContainer::Populate): Populate nested types too.
24545         (TypeContainer::Emit): Emit nested members too.
24546
24547         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24548         instead just use the name argument passed in as it is already fully
24549         qualified.
24550
24551         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24552         to TypeContainer mapping to see if a type is user-defined.
24553
24554         * class.cs (TypeContainer::CloseType): Implement. 
24555
24556         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24557         the default constructor.
24558
24559         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24560         twice.
24561
24562         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24563
24564         * interface.cs (CloseType): Create the type here.
24565
24566         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24567         the hierarchy.
24568
24569         Remove all the methods which are now in TypeContainer.
24570
24571 2001-10-10  Ravi Pratap  <ravi@ximian.com>
24572
24573         * delegate.cs (Define): Re-write bits to define the delegate
24574         correctly.
24575
24576 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
24577
24578         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
24579
24580         * expression.cs (ImplicitReferenceConversion): handle null as well
24581         as a source to convert to any reference type.
24582
24583         * statement.cs (Return): Perform any implicit conversions to
24584         expected return type.  
24585
24586         Validate use of return statement.  
24587
24588         * codegen.cs (EmitContext): Pass the expected return type here.
24589
24590         * class.cs (Method, Constructor, Property): Pass expected return
24591         type to EmitContext.
24592
24593 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
24594
24595         * expression.cs: Make DoResolve take an EmitContext instead of a
24596         TypeContainer.
24597
24598         Replaced `l' and `location' for `loc', for consistency.
24599
24600         (Error, Warning): Remove unneeded Tc argument.
24601
24602         * assign.cs, literal.cs, constant.cs: Update to new calling
24603         convention. 
24604
24605         * codegen.cs: EmitContext now contains a flag indicating whether
24606         code is being generated in a static method or not.
24607
24608         * cs-parser.jay: DecomposeQI, new function that replaces the old
24609         QualifiedIdentifier.  Now we always decompose the assembled
24610         strings from qualified_identifier productions into a group of
24611         memberaccesses.
24612
24613 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
24614
24615         * rootcontext.cs: Deal with field-less struct types correctly now
24616         by passing the size option to Define Type.
24617
24618         * class.cs: Removed hack that created one static field. 
24619
24620 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24621
24622         * statement.cs: Moved most of the code generation here. 
24623
24624 2001-10-09  Ravi Pratap  <ravi@ximian.com>
24625
24626         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
24627         seem very right.
24628
24629         (ElementAccess): Remove useless bits for now - keep checks as the spec
24630         says.
24631
24632 2001-10-08  Ravi Pratap  <ravi@ximian.com>
24633
24634         * expression.cs (ElementAccess::DoResolve): Remove my crap code
24635         and start performing checks according to the spec.
24636
24637 2001-10-07  Ravi Pratap  <ravi@ximian.com>
24638
24639         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
24640         rank_specifiers instead.
24641
24642         (rank_specifiers): Change the order in which the rank specifiers are stored
24643
24644         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
24645
24646         * expression.cs (ElementAccess): Implement the LValue interface too.
24647
24648 2001-10-06  Ravi Pratap  <ravi@ximian.com>
24649
24650         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
24651         except that user defined conversions are not included.
24652
24653         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
24654         perform the conversion of the return type, if necessary.
24655
24656         (New::DoResolve): Check whether we are creating an array or an object
24657         and accordingly do the needful.
24658
24659         (New::Emit): Same here.
24660
24661         (New::DoResolve): Implement guts of array creation.
24662
24663         (New::FormLookupType): Helper function.
24664
24665 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24666
24667         * codegen.cs: Removed most of the code generation here, and move the
24668         corresponding code generation bits to the statement classes. 
24669
24670         Added support for try/catch/finalize and throw.
24671
24672         * cs-parser.jay: Added support for try/catch/finalize.
24673
24674         * class.cs: Catch static methods having the flags override,
24675         virtual or abstract.
24676
24677         * expression.cs (UserCast): This user cast was not really doing
24678         what it was supposed to do.  Which is to be born in fully resolved
24679         state.  Parts of the resolution were being performed at Emit time! 
24680
24681         Fixed this code.
24682
24683 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24684
24685         * expression.cs: Implicity convert the result from UserCast.
24686
24687 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24688
24689         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
24690         prevented it from working correctly. 
24691
24692         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
24693         merely ConvertImplicit.
24694
24695 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24696
24697         * typemanager.cs: Make the LookupTypeContainer function static,
24698         and not per-instance.  
24699
24700         * class.cs: Make static FindMembers (the one that takes a Type
24701         argument). 
24702
24703         * codegen.cs: Add EmitForeach here.
24704
24705         * cs-parser.jay: Make foreach a toplevel object instead of the
24706         inline expansion, as we need to perform semantic analysis on it. 
24707
24708 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24709
24710         * expression.cs (Expression::ImplicitUserConversion): Rename to
24711         UserDefinedConversion.
24712
24713         (Expression::UserDefinedConversion): Take an extra argument specifying 
24714         whether we look for explicit user conversions too.
24715
24716         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
24717
24718         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
24719
24720         (ExplicitUserConversion): Make it a call to UserDefinedConversion
24721         with the appropriate arguments.
24722
24723         * cs-parser.jay (cast_expression): Record location too.
24724
24725         * expression.cs (Cast): Record location info.
24726
24727         (Expression::ConvertExplicit): Take location argument.
24728
24729         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
24730         to determine if we are doing explicit conversions.
24731
24732         (UserCast::Emit): Update accordingly.
24733
24734         (Expression::ConvertExplicit): Report an error if everything fails.
24735
24736         * ../errors/cs0030.cs : Add.
24737
24738 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
24739
24740         * modifiers.cs: If the ABSTRACT keyword is present, also set the
24741         virtual and newslot bits. 
24742
24743         * class.cs (TypeContainer::RegisterRequiredImplementations):
24744         Record methods we need.
24745
24746         (TypeContainer::MakeKey): Helper function to make keys for
24747         MethodBases, since the Methodbase key is useless.
24748
24749         (TypeContainer::Populate): Call RegisterRequiredImplementations
24750         before defining the methods.   
24751
24752         Create a mapping for method_builders_to_methods ahead of time
24753         instead of inside a tight loop.
24754
24755         (::RequireMethods):  Accept an object as the data to set into the
24756         hashtable so we can report interface vs abstract method mismatch.
24757
24758 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24759
24760         * report.cs: Make all of it static.
24761
24762         * rootcontext.cs: Drop object_type and value_type computations, as
24763         we have those in the TypeManager anyways.
24764
24765         Drop report instance variable too, now it is a global.
24766
24767         * driver.cs: Use try/catch on command line handling.
24768
24769         Add --probe option to debug the error reporting system with a test
24770         suite. 
24771
24772         * report.cs: Add support for exiting program when a probe
24773         condition is reached.
24774
24775 2001-10-03  Ravi Pratap  <ravi@ximian.com>
24776
24777         * expression.cs (Binary::DoNumericPromotions): Fix the case when
24778         we do a forcible conversion regardless of type, to check if 
24779         ForceConversion returns a null.
24780
24781         (Binary::error19): Use location to report error.
24782
24783         (Unary::error23): Use location here too.
24784
24785         * ../errors/cs0019.cs : Check in.
24786
24787         * ../errors/cs0023.cs : Check in.
24788
24789         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
24790         case of a non-null MethodInfo object with a length of 0 !
24791
24792         (Binary::ResolveOperator): Flag error if overload resolution fails to find
24793         an applicable member - according to the spec :-)
24794         Also fix logic to find members in base types.
24795
24796         (Unary::ResolveOperator): Same here.
24797
24798         (Unary::report23): Change name to error23 and make first argument a TypeContainer
24799         as I was getting thoroughly confused between this and error19 :-)
24800
24801         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
24802         (::FindMostEncompassedType): Implement.
24803         (::FindMostEncompassingType): Implement.
24804         (::StandardConversionExists): Implement.
24805
24806         (UserImplicitCast): Re-vamp. We now need info about most specific
24807         source and target types so that we can do the necessary conversions.
24808
24809         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
24810         mathematical union with no duplicates.
24811
24812 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24813
24814         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
24815         in order from base classes to child classes, so that we can in
24816         child classes look up in our parent for method names and
24817         attributes (required for handling abstract, virtual, new, override
24818         constructs: we need to instrospect our base class, and if we dont
24819         populate the classes in order, the introspection might be
24820         incorrect.  For example, a method could query its parent before
24821         the parent has any methods and would determine that the parent has
24822         no abstract methods (while it could have had them)).
24823
24824         (RootContext::CreateType): Record the order in which we define the
24825         classes.
24826
24827 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
24828
24829         * class.cs (TypeContainer::Populate): Also method definitions can
24830         fail now, keep track of this.
24831
24832         (TypeContainer::FindMembers): Implement support for
24833         DeclaredOnly/noDeclaredOnly flag.
24834
24835         (Constructor::Emit) Return the ConstructorBuilder.
24836
24837         (Method::Emit) Return the MethodBuilder. 
24838         Check for abstract or virtual methods to be public.
24839
24840         * rootcontext.cs (RootContext::CreateType): Register all the
24841         abstract methods required for the class to be complete and the
24842         interface methods that must be implemented. 
24843
24844         * cs-parser.jay: Report error 501 (method requires body if it is
24845         not marked abstract or extern).
24846
24847         * expression.cs (TypeOf::Emit): Implement.
24848
24849         * typemanager.cs: runtime_handle_type, new global type.
24850
24851         * class.cs (Property::Emit): Generate code for properties.
24852
24853 2001-10-02  Ravi Pratap  <ravi@ximian.com>
24854
24855         * expression.cs (Unary::ResolveOperator): Find operators on base type
24856         too - we now conform exactly to the spec.
24857
24858         (Binary::ResolveOperator): Same here.
24859
24860         * class.cs (Operator::Define): Fix minor quirk in the tests.
24861
24862         * ../errors/cs0215.cs : Added.
24863
24864         * ../errors/cs0556.cs : Added.
24865
24866         * ../errors/cs0555.cs : Added.
24867
24868 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24869
24870         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
24871         single integer which is really efficient
24872
24873 2001-10-01  Ravi Pratap  <ravi@ximian.com>
24874
24875         *  expression.cs (Expression::ImplicitUserConversion): Use location
24876         even in the case when we are examining True operators.
24877  
24878         * class.cs (Operator::Define): Perform extensive checks to conform
24879         with the rules for operator overloading in the spec.
24880
24881         * expression.cs (Expression::ImplicitReferenceConversion): Implement
24882         some of the other conversions mentioned in the spec.
24883
24884         * typemanager.cs (array_type): New static member for the System.Array built-in
24885         type.
24886
24887         (cloneable_interface): For System.ICloneable interface.
24888
24889         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
24890         we start resolving the tree and populating types.
24891
24892         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
24893  
24894 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24895
24896         * expression.cs (Expression::ExprClassFromMemberInfo,
24897         Expression::Literalize): Create literal expressions from
24898         FieldInfos which are literals.
24899
24900         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
24901         type casts, because they were wrong.  The test suite in tests
24902         caught these ones.
24903
24904         (ImplicitNumericConversion): ushort to ulong requires a widening
24905         cast. 
24906
24907         Int32 constant to long requires widening cast as well.
24908
24909         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
24910         for integers because the type on the stack is not i4.
24911
24912 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
24913
24914         * expression.cs (report118): require location argument. 
24915
24916         * parameter.cs: Do not dereference potential null value.
24917
24918         * class.cs: Catch methods that lack the `new' keyword when
24919         overriding a name.  Report warnings when `new' is used without
24920         anything being there to override.
24921
24922         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
24923
24924         * class.cs: Only add constructor to hashtable if it is non-null
24925         (as now constructors can fail on define).
24926
24927         (TypeManager, Class, Struct): Take location arguments.
24928
24929         Catch field instance initialization in structs as errors.
24930
24931         accepting_filter: a new filter for FindMembers that is static so
24932         that we dont create an instance per invocation.
24933
24934         (Constructor::Define): Catch errors where a struct constructor is
24935         parameterless 
24936
24937         * cs-parser.jay: Pass location information for various new
24938         constructs. 
24939
24940         * delegate.cs (Delegate): take a location argument.
24941
24942         * driver.cs: Do not call EmitCode if there were problesm in the
24943         Definition of the types, as many Builders wont be there. 
24944
24945         * decl.cs (Decl::Decl): Require a location argument.
24946
24947         * cs-tokenizer.cs: Handle properly hex constants that can not fit
24948         into integers, and find the most appropiate integer for it.
24949
24950         * literal.cs: Implement ULongLiteral.
24951
24952         * rootcontext.cs: Provide better information about the location of
24953         failure when CreateType fails.
24954
24955 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
24956
24957         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
24958         as well.
24959
24960         * expression.cs (Binary::CheckShiftArguments): Add missing type
24961         computation.
24962         (Binary::ResolveOperator): Add type to the logical and and logical
24963         or, Bitwise And/Or and Exclusive Or code paths, it was missing
24964         before.
24965
24966         (Binary::DoNumericPromotions): In the case where either argument
24967         is ulong (and most signed types combined with ulong cause an
24968         error) perform implicit integer constant conversions as well.
24969
24970 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
24971
24972         * expression.cs (UserImplicitCast): Method should always be
24973         non-null. 
24974         (Invocation::BetterConversion): Simplified test for IntLiteral.
24975
24976         (Expression::ImplicitNumericConversion): Split this routine out.
24977         Put the code that performs implicit constant integer conversions
24978         here. 
24979
24980         (Expression::Resolve): Become a wrapper around DoResolve so we can
24981         check eclass and type being set after resolve.
24982
24983         (Invocation::Badness): Remove this dead function
24984
24985         (Binary::ResolveOperator): Do not compute the expensive argumnets
24986         unless we have a union for it.
24987
24988         (Probe::Emit): Is needs to do an isinst and then
24989         compare against null.
24990
24991         (::CanConvert): Added Location argument.  If the Location argument
24992         is null (Location.Null), then we do not report errors.  This is
24993         used by the `probe' mechanism of the Explicit conversion.  We do
24994         not want to generate an error for something that the user
24995         explicitly requested to be casted.  But the pipeline for an
24996         explicit cast first tests for potential implicit casts.
24997
24998         So for now, if the Location is null, it means `Probe only' to
24999         avoid adding another argument.   Might have to revise this
25000         strategy later.
25001
25002         (ClassCast): New class used to type cast objects into arbitrary
25003         classes (used in Explicit Reference Conversions).
25004
25005         Implement `as' as well.
25006
25007         Reverted all the patches from Ravi below: they were broken:
25008
25009                 * The use of `level' as a mechanism to stop recursive
25010                   invocations is wrong.  That was there just to catch the
25011                   bug with a strack trace but not as a way of addressing
25012                   the problem.
25013
25014                   To fix the problem we have to *understand* what is going
25015                   on and the interactions and come up with a plan, not
25016                   just get things going.
25017
25018                 * The use of the type conversion cache that I proposed
25019                   last night had an open topic: How does this work across
25020                   protection domains.  A user defined conversion might not
25021                   be public in the location where we are applying the
25022                   conversion, a different conversion might be selected
25023                   (ie, private A->B (better) but public B->A (worse),
25024                   inside A, A->B applies, but outside it, B->A will
25025                   apply).
25026
25027                 * On top of that (ie, even if the above is solved),
25028                   conversions in a cache need to be abstract.  Ie, `To
25029                   convert from an Int to a Short use an OpcodeCast', not
25030                   `To convert from an Int to a Short use the OpcodeCast on
25031                   the variable 5' (which is what this patch was doing).
25032
25033 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25034
25035         * expression.cs (Invocation::ConversionExists): Re-write to use
25036         the conversion cache
25037
25038         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
25039         cache all conversions done, not just user-defined ones.
25040
25041         (Invocation::BetterConversion): The real culprit. Use ConversionExists
25042         to determine if a conversion exists instead of acutually trying to 
25043         perform the conversion. It's faster too.
25044
25045         (Expression::ConvertExplicit): Modify to use ConversionExists to check
25046         and only then attempt the implicit conversion.
25047
25048 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25049
25050         * expression.cs (ConvertImplicit): Use a cache for conversions
25051         already found. Check level of recursion and bail out if necessary.
25052
25053 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25054
25055         * typemanager.cs (string_concat_string_string, string_concat_object_object):
25056         Export standard methods that we expect for string operations.
25057
25058         * statement.cs (Block::UsageWarning): Track usage of variables and
25059         report the errors for not used variables.
25060
25061         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
25062         operator. 
25063
25064 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25065
25066         * codegen.cs: remove unnneded code 
25067
25068         * expression.cs: Removed BuiltinTypeAccess class
25069
25070         Fix the order in which implicit conversions are
25071         done.  
25072
25073         The previous fixed dropped support for boxed conversions (adding a
25074         test to the test suite now)
25075
25076         (UserImplicitCast::CanConvert): Remove test for source being null,
25077         that code is broken.  We should not feed a null to begin with, if
25078         we do, then we should track the bug where the problem originates
25079         and not try to cover it up here.
25080
25081         Return a resolved expression of type UserImplicitCast on success
25082         rather than true/false.  Ravi: this is what I was talking about,
25083         the pattern is to use a static method as a "constructor" for
25084         objects. 
25085
25086         Also, do not create arguments until the very last minute,
25087         otherwise we always create the arguments even for lookups that
25088         will never be performed. 
25089
25090         (UserImplicitCast::Resolve): Eliminate, objects of type
25091         UserImplicitCast are born in a fully resolved state. 
25092
25093         * typemanager.cs (InitCoreTypes): Init also value_type
25094         (System.ValueType). 
25095
25096         * expression.cs (Cast::Resolve): First resolve the child expression.
25097
25098         (LValue): Add new method AddressOf to be used by
25099         the `&' operator.  
25100
25101         Change the argument of Store to take an EmitContext instead of an
25102         ILGenerator, because things like FieldExpr need to be able to call
25103         their children expression to generate the instance code. 
25104
25105         (Expression::Error, Expression::Warning): Sugar functions for
25106         reporting errors.
25107
25108         (Expression::MemberLookup): Accept a TypeContainer instead of a
25109         Report as the first argument.
25110
25111         (Expression::ResolvePrimary): Killed.  I still want to improve
25112         this as currently the code is just not right.
25113
25114         (Expression::ResolveMemberAccess): Simplify, but it is still
25115         wrong. 
25116
25117         (Unary::Resolve): Catch errors in AddressOf operators.
25118
25119         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
25120         index to a byte for the short-version, or the compiler will choose
25121         the wrong Emit call, which generates the wrong data.
25122
25123         (ParameterReference::Emit, ::Store): same.
25124
25125         (FieldExpr::AddressOf): Implement.
25126
25127         * typemanager.cs: TypeManager: made public variable instead of
25128         property.
25129
25130         * driver.cs: document --fatal.
25131
25132         * report.cs (ErrorMessage, WarningMessage): new names for the old
25133         Error and Warning classes.
25134
25135         * cs-parser.jay (member_access): Turn built-in access to types
25136         into a normal simplename
25137
25138 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25139
25140         * expression.cs (Invocation::BetterConversion): Fix to cope
25141         with q being null, since this was introducing a bug.
25142
25143         * expression.cs (ConvertImplicit): Do built-in conversions first.
25144
25145 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25146
25147         * expression.cs (UserImplicitCast::Resolve): Fix bug.
25148
25149 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25150
25151         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
25152         I had introduced long ago (what's new ?).
25153
25154         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
25155         the work of all the checking. 
25156         (ConvertImplicit): Call CanConvert and only then create object if necessary.
25157         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
25158
25159         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
25160         that is the right way. 
25161
25162         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
25163         overloading resolution. Use everywhere instead of cutting and pasting code.
25164
25165         (Binary::ResolveOperator): Use MakeUnionSet.
25166
25167         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
25168         we have to convert to bool types. Not complete yet.
25169
25170 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25171
25172         * typemanager.cs (TypeManager::CSharpName): support ushort.
25173
25174         * expression.cs (Expression::TryImplicitIntConversion): Attempts
25175         to provide an expression that performsn an implicit constant int
25176         conversion (section 6.1.6).
25177         (Expression::ConvertImplicitRequired): Reworked to include
25178         implicit constant expression conversions.
25179
25180         (Expression::ConvertNumericExplicit): Finished.
25181
25182         (Invocation::Emit): If InstanceExpression is null, then it means
25183         that we perform a call on this.
25184
25185 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25186
25187         * expression.cs (Unary::Emit): Remove some dead code.
25188         (Probe): Implement Resolve and Emit for `is'.
25189         (Expression::ConvertImplicitRequired): Attempt to do constant
25190         expression conversions here.  Maybe should be moved to
25191         ConvertImplicit, but I am not sure.
25192         (Expression::ImplicitLongConstantConversionPossible,
25193         Expression::ImplicitIntConstantConversionPossible): New functions
25194         that tell whether is it possible to apply an implicit constant
25195         expression conversion.
25196
25197         (ConvertNumericExplicit): Started work on explicit numeric
25198         conversions.
25199
25200         * cs-parser.jay: Update operator constants.
25201
25202         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
25203         (Parameters::GetSignature): Hook up VerifyArgs here.
25204         (Parameters::VerifyArgs): Verifies that no two arguments have the
25205         same name. 
25206
25207         * class.cs (Operator): Update the operator names to reflect the
25208         ones that the spec expects (as we are just stringizing the
25209         operator names).
25210
25211         * expression.cs (Unary::ResolveOperator): Fix bug: Use
25212         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
25213         previous usage did only work for our methods.
25214         (Expression::ConvertImplicit): Handle decimal implicit numeric
25215         conversions as well.
25216         (Expression::InternalTypeConstructor): Used to invoke constructors
25217         on internal types for default promotions.
25218
25219         (Unary::Emit): Implement special handling for the pre/post
25220         increment/decrement for overloaded operators, as they need to have
25221         the same semantics as the other operators.
25222
25223         (Binary::ResolveOperator): ditto.
25224         (Invocation::ConversionExists): ditto.
25225         (UserImplicitCast::Resolve): ditto.
25226
25227 2001-09-26  Ravi Pratap  <ravi@ximian.com>
25228
25229         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
25230         operator, return after emitting body. Regression tests pass again !
25231
25232         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
25233         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
25234         (Invocation::OverloadResolve): Ditto.
25235         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
25236
25237         * everywhere : update calls to the above methods accordingly.
25238
25239 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25240
25241         * assign.cs (Assign): Make it inherit from ExpressionStatement.
25242
25243         * expression.cs (ExpressionStatement): New base class used for
25244         expressions that can appear in statements, so that we can provide
25245         an alternate path to generate expression that do not leave a value
25246         on the stack.
25247
25248         (Expression::Emit, and all the derivatives): We no longer return
25249         whether a value is left on the stack or not.  Every expression
25250         after being emitted leaves a single value on the stack.
25251
25252         * codegen.cs (EmitContext::EmitStatementExpression): Use the
25253         facilties of ExpressionStatement if possible.
25254
25255         * cs-parser.jay: Update statement_expression.
25256
25257 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
25258
25259         * driver.cs: Change the wording of message
25260
25261 2001-09-25  Ravi Pratap  <ravi@ximian.com>
25262
25263         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
25264         the type of the expression to the return type of the method if
25265         we have an overloaded operator match ! The regression tests pass again !
25266         (Unary::ResolveOperator): Ditto.
25267
25268         * expression.cs (Invocation::ConversionExists): Correct the member lookup
25269         to find "op_Implicit", not "implicit" ;-)
25270         (UserImplicitCast): New class to take care of user-defined implicit conversions.
25271         (ConvertImplicit, ForceConversion): Take TypeContainer argument
25272
25273         * everywhere : Correct calls to the above accordingly.
25274
25275         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
25276         (ConvertImplicit): Do user-defined conversion if it exists.
25277
25278 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
25279
25280         * assign.cs: track location.
25281         (Resolve): Use implicit conversions on assignment.
25282
25283         * literal.cs: Oops.  Not good, Emit of short access values should
25284         pass (Bytes) or the wrong argument will be selected.
25285
25286         * expression.cs (Unary::Emit): Emit code for -expr.
25287
25288         (Unary::ResolveOperator): Handle `Substract' for non-constants
25289         (substract from zero from the non-constants).
25290         Deal with Doubles as well. 
25291
25292         (Expression::ConvertImplicitRequired): New routine that reports an
25293         error if no implicit conversion exists. 
25294
25295         (Invocation::OverloadResolve): Store the converted implicit
25296         expressions if we make them
25297
25298 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25299
25300         * class.cs (ConstructorInitializer): Take a Location argument.
25301         (ConstructorBaseInitializer): Same here.
25302         (ConstructorThisInitializer): Same here.
25303
25304         * cs-parser.jay : Update all calls accordingly.
25305
25306         * expression.cs (Unary, Binary, New): Take location argument.
25307         Update accordingly everywhere.
25308
25309         * cs-parser.jay : Update all calls to the above to take a location
25310         argument.
25311
25312         * class.cs : Ditto.
25313
25314 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25315
25316         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
25317         (Invocation::BetterConversion): Same here
25318         (Invocation::ConversionExists): Ditto.
25319
25320         (Invocation::ConversionExists): Implement.
25321
25322 2001-09-22  Ravi Pratap  <ravi@ximian.com>
25323
25324         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
25325         Also take an additional TypeContainer argument.
25326
25327         * All over : Pass in TypeContainer as argument to OverloadResolve.
25328
25329         * typemanager.cs (CSharpName): Update to check for the string type and return
25330         that too.
25331
25332         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
25333         a given method.
25334
25335 2001-09-21  Ravi Pratap  <ravi@ximian.com>
25336
25337         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
25338         (Invocation::BetterFunction): Implement.
25339         (Invocation::BetterConversion): Implement.
25340         (Invocation::ConversionExists): Skeleton, no implementation yet.
25341
25342         Okay, things work fine !
25343
25344 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
25345
25346         * typemanager.cs: declare and load enum_type, delegate_type and
25347         void_type. 
25348
25349         * expression.cs (Expression::Emit): Now emit returns a value that
25350         tells whether a value is left on the stack or not.  This strategy
25351         might be reveted tomorrow with a mechanism that would address
25352         multiple assignments.
25353         (Expression::report118): Utility routine to report mismatches on
25354         the ExprClass.
25355
25356         (Unary::Report23): Report impossible type/operator combination
25357         utility function.
25358
25359         (Unary::IsIncrementableNumber): Whether the type can be
25360         incremented or decremented with add.
25361         (Unary::ResolveOperator): Also allow enumerations to be bitwise
25362         complemented. 
25363         (Unary::ResolveOperator): Implement ++, !, ~,
25364
25365         (Invocation::Emit): Deal with new Emit convetion.
25366
25367         * All Expression derivatives: Updated their Emit method to return
25368         whether they leave values on the stack or not.
25369
25370         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
25371         stack for expressions that are statements. 
25372
25373 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25374
25375         * expression.cs (LValue): New interface.  Must be implemented by
25376         LValue objects.
25377         (LocalVariableReference, ParameterReference, FieldExpr): Implement
25378         LValue interface.
25379
25380         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
25381         interface for generating code, simplifies the code.
25382
25383 2001-09-20  Ravi Pratap  <ravi@ximian.com>
25384
25385         * expression.cs (everywhere): Comment out return statements in ::Resolve
25386         methods to avoid the warnings.
25387
25388 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25389
25390         * driver.cs (parse): Report error 2001 if we can not open the
25391         source file.
25392
25393         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
25394         not resolve it.
25395
25396         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
25397         object. 
25398
25399         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
25400         otherwise nested blocks end up with the same index.
25401
25402         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
25403
25404         * expression.cs:  Instead of having FIXMEs in the Resolve
25405         functions, throw exceptions so it is obvious that we are facing a
25406         bug. 
25407
25408         * cs-parser.jay (invocation_expression): Pass Location information.
25409
25410         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
25411         Use a basename for those routines because .NET does not like paths
25412         on them. 
25413
25414         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
25415         already defined.
25416
25417 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
25418
25419         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
25420         are loading the correct data types (throws an exception if not).
25421         (TypeManager::InitCoreTypes): Use CoreLookupType
25422
25423         * expression.cs (Unary::ResolveOperator): return the child
25424         expression for expressions which are just +expr.
25425         (Unary::ResolveOperator): Return negative literals for -LITERAL
25426         expressions (otherwise they are Unary {Literal}).
25427         (Invocation::Badness): Take into account `Implicit constant
25428         expression conversions'.
25429
25430         * literal.cs (LongLiteral): Implement long literal class.
25431         (IntLiteral): export the `Value' of the intliteral. 
25432
25433 2001-09-19  Ravi Pratap  <ravi@ximian.com>
25434
25435         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
25436
25437         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
25438         instead of 'Operator'
25439
25440         * expression.cs (Binary::ResolveOperator): Update accordingly.
25441         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
25442         and 'Minus'
25443
25444         * cs-parser.jay (unary_expression): Update to use the new names.
25445
25446         * gen-treedump.cs (GetUnary): Same here.
25447
25448         * expression.cs (Unary::Resolve): Implement.
25449         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25450         operators are found instead of making noise ;-)
25451         (Unary::ResolveOperator): New method to do precisely the same thing which
25452         Binary::ResolveOperator does for Binary expressions.
25453         (Unary.method, .Arguments): Add.
25454         (Unary::OperName): Implement.   
25455         (Unary::ForceConversion): Copy and Paste !
25456
25457         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25458         a unary operator.
25459
25460         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25461         for the inbuilt operators. Only overloading works for now ;-)
25462
25463 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25464
25465         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25466         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25467
25468         * expression.cs (This::Emit): Implement. 
25469         (This::Resolve): Implement.
25470         (TypeOf:Resolve): Implement.
25471         (Expression::ResolveSimpleName): Add an implicit this to instance
25472         field references. 
25473         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25474         Bind instance variable to Field expressions.
25475         (FieldExpr::Instance): New field used to track the expression that
25476         represents the object instance.
25477         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25478         binding 
25479         (FieldExpr::Emit): Implement.
25480
25481         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25482         the last instruction contains a return opcode to avoid generating
25483         the last `ret' instruction (this generates correct code, and it is
25484         nice to pass the peverify output).
25485
25486         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25487         initializer for static and instance variables.
25488         (Constructor::Emit): Allow initializer to be null in the case of
25489         static constructors.  Only emit initializer for instance
25490         constructors. 
25491
25492         (TypeContainer::FindMembers): Return a null array if there are no
25493         matches.
25494
25495         Also fix the code for the MemberTypes.Method branch, as it was not
25496         scanning that for operators (or tried to access null variables before).
25497
25498         * assign.cs (Assign::Emit): Handle instance and static fields. 
25499
25500         * TODO: Updated.
25501
25502         * driver.cs: Stop compilation if there are parse errors.
25503
25504         * cs-parser.jay (constructor_declaration): Provide default base
25505         initializer for non-static constructors.
25506         (constructor_declarator): Do not provide a default base
25507         initializers if none was specified.
25508         Catch the fact that constructors should not have parameters.
25509
25510         * class.cs: Do not emit parent class initializers for static
25511         constructors, that should be flagged as an error.
25512
25513 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25514
25515         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25516         Move back code into TypeContainer::Populate.
25517
25518 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25519
25520         * class.cs (TypeContainer::AddConstructor): Fix the check to
25521         compare against Name, not Basename. 
25522         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25523
25524         * cs-parser.jay : Update accordingly.
25525
25526         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25527         for methods, don't forget to look into the operators too.
25528         (RegisterMethodBuilder): Helper method to take care of this for
25529         methods, constructors and operators.
25530         (Operator::Define): Completely revamp.
25531         (Operator.OperatorMethod, MethodName): New fields.
25532         (TypeContainer::Populate): Move the registering of builders into
25533         RegisterMethodBuilder.
25534         (Operator::Emit): Re-write.
25535
25536         * expression.cs (Binary::Emit): Comment out code path to emit method
25537         invocation stuff for the case when we have a user defined operator. I am
25538         just not able to get it right !
25539
25540 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25541
25542         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25543         argument. 
25544
25545         (Expression::MemberLookup): Provide a version that allows to
25546         specify the MemberTypes and BindingFlags. 
25547
25548         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25549         so it was not fetching variable information from outer blocks.
25550
25551         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25552         Beforefieldinit as it was buggy.
25553
25554         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25555         that Ravi put here.  
25556
25557         * class.cs (Constructor::Emit): Only emit if block is not null.
25558         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25559         deal with this by semantically definining it as if the user had
25560         done it.
25561
25562         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25563         constructors as we now "emit" them at a higher level.
25564
25565         (TypeContainer::DefineDefaultConstructor): Used to define the
25566         default constructors if none was provided.
25567
25568         (ConstructorInitializer): Add methods Resolve and Emit. 
25569
25570         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25571
25572 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25573
25574         * class.cs (TypeContainer::EmitDefaultConstructor): Register
25575         the default constructor builder with our hashtable for methodbuilders
25576         to methodcores.
25577
25578         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
25579         and argument_count is 0 in which case we have a match.
25580         (Binary::ResolveOperator): More null checking and miscellaneous coding
25581         style cleanup.
25582
25583 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25584
25585         * rootcontext.cs (IsNameSpace): Compare against null.
25586
25587         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
25588
25589         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
25590         and Unary::Operator.
25591
25592         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
25593         accordingly.
25594
25595         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
25596         we have overloaded operators.
25597         (Binary::ResolveOperator): Implement the part which does the operator overload
25598         resolution.
25599
25600         * class.cs (Operator::Emit): Implement.
25601         (TypeContainer::Emit): Emit the operators we have too.
25602
25603         * expression.cs (Binary::Emit): Update to emit the appropriate code for
25604         the case when we have a user-defined operator.
25605
25606 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25607
25608         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
25609
25610 2001-09-16  Ravi Pratap  <ravi@ximian.com>
25611
25612         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
25613         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
25614         (Constructor::Emit): Implement.
25615         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
25616         if we have no work to do. 
25617         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
25618         Emit method.
25619
25620         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
25621         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
25622
25623         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
25624         of parent.parent.
25625
25626 2001-09-15  Ravi Pratap  <ravi@ximian.com>
25627
25628         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
25629         in the source.
25630         (Tree::RecordNamespace): Method to do what the name says ;-)
25631         (Tree::Namespaces): Property to get at the namespaces hashtable.
25632
25633         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
25634         keep track.
25635
25636         * rootcontext.cs (IsNamespace): Fixed it :-)
25637
25638 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25639
25640         * class.cs (TypeContainer::FindMembers): Add support for
25641         constructors. 
25642         (MethodCore): New class that encapsulates both the shared aspects
25643         of a Constructor and a Method.  
25644         (Method, Constructor): Factored pieces into MethodCore.
25645
25646         * driver.cs: Added --fatal which makes errors throw exceptions.
25647         Load System assembly as well as part of the standard library.
25648
25649         * report.cs: Allow throwing exceptions on errors for debugging.
25650
25651         * modifiers.cs: Do not use `parent', instead use the real type
25652         container to evaluate permission settings.
25653
25654         * class.cs: Put Ravi's patch back in.  He is right, and we will
25655         have to cope with the
25656
25657 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25658
25659         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
25660         FamORAssem, not FamANDAssem.
25661
25662 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25663
25664         * driver.cs: Added --parse option that only parses its input files
25665         and terminates.
25666
25667         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
25668         incorrect.  IsTopLevel is not used to tell whether an object is
25669         root_types or not (that can be achieved by testing this ==
25670         root_types).  But to see if this is a top-level *class* (not
25671         necessarly our "toplevel" container). 
25672
25673 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25674
25675         * enum.cs (Enum::Define): Modify to call the Lookup method on the
25676         parent instead of a direct call to GetType.
25677
25678 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25679
25680         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
25681         Modifiers.TypeAttr. This should just be a call to that method.
25682
25683         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
25684         object so that we can determine if we are top-level or not.
25685
25686         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
25687         TypeContainer too.
25688
25689         * enum.cs (Enum::Define): Ditto.
25690
25691         * modifiers.cs (FieldAttr): Re-write.
25692
25693         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
25694         (TypeContainer::HaveStaticConstructor): New property to provide access
25695         to precisely that info.
25696
25697         * modifiers.cs (MethodAttr): Re-write.
25698         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
25699
25700         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
25701         of top-level types as claimed.
25702
25703 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25704
25705         * expression.cs (MemberLookup): Fruitless attempt to lookup
25706         constructors.  Maybe I need to emit default constructors?  That
25707         might be it (currently .NET emits this for me automatically).
25708         (Invocation::OverloadResolve): Cope with Arguments == null.
25709         (Invocation::EmitArguments): new function, shared by the new
25710         constructor and us.
25711         (Invocation::Emit): Handle static and instance methods.  Emit
25712         proper call instruction for virtual or non-virtual invocations.
25713         (New::Emit): Implement.
25714         (New::Resolve): Implement.
25715         (MemberAccess:Resolve): Implement.
25716         (MethodGroupExpr::InstanceExpression): used conforming to the spec
25717         to track instances.
25718         (FieldExpr::Resolve): Set type.
25719
25720         * support.cs: Handle empty arguments.
25721                 
25722         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
25723         SimpleLookup): Auxiliary routines to help parse a qualifier
25724         identifier.  
25725
25726         Update qualifier_identifier rule.
25727
25728         * codegen.cs: Removed debugging messages.
25729
25730         * class.cs: Make this a global thing, this acts just as a "key" to
25731         objects that we might have around.
25732
25733         (Populate): Only initialize method_builders_to_methods once.
25734
25735         * expression.cs (PropertyExpr): Initialize type from the
25736         PropertyType. 
25737
25738         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
25739         Resolve pattern.  Attempt to implicitly convert value to boolean.
25740         Emit code.
25741
25742         * expression.cs: Set the type for the int32/int32 argument case.
25743         (Binary::ResolveOperator): Set the return type to boolean for
25744         comparission operators
25745
25746         * typemanager.cs: Remove debugging print code.
25747
25748         (Invocation::Resolve): resolve type.
25749
25750         * class.cs: Allocate a MemberInfo of the correct size, as the code
25751         elsewhere depends on the test to reflect the correct contents.
25752
25753         (Method::) Keep track of parameters, due to System.Reflection holes
25754
25755         (TypeContainer::Populate): Keep track of MethodBuilders to Method
25756         mapping here.
25757
25758         (TypeContainer::FindMembers): Use ArrayList and then copy an array
25759         of the exact size and return that.
25760
25761         (Class::LookupMethodByBuilder): New function that maps
25762         MethodBuilders to its methods.  Required to locate the information
25763         on methods because System.Reflection bit us again.
25764
25765         * support.cs: New file, contains an interface ParameterData and
25766         two implementations: ReflectionParameters and InternalParameters
25767         used to access Parameter information.  We will need to grow this
25768         as required.
25769
25770         * expression.cs (Invocation::GetParameterData): implement a cache
25771         and a wrapper around the ParameterData creation for methods. 
25772         (Invocation::OverloadResolve): Use new code.
25773
25774 2001-09-13  Ravi Pratap  <ravi@ximian.com>
25775
25776         * class.cs (TypeContainer::EmitField): Remove and move into 
25777         (Field::Define): here and modify accordingly.
25778         (Field.FieldBuilder): New member.
25779         (TypeContainer::Populate): Update accordingly.
25780         (TypeContainer::FindMembers): Implement.
25781
25782 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25783
25784         * statement.cs: (VariableInfo::VariableType): New field to be
25785         initialized with the full type once it is resolved. 
25786
25787 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
25788
25789         * parameter.cs (GetParameterInfo): Use a type cache to compute
25790         things only once, and to reuse this information
25791
25792         * expression.cs (LocalVariableReference::Emit): Implement.
25793         (OpcodeCast::Emit): fix.
25794
25795         (ParameterReference::Resolve): Implement.
25796         (ParameterReference::Emit): Implement.
25797
25798         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
25799         that are expressions need to stay as Expressions.
25800
25801         * typemanager.cs (CSharpName): Returns the C# name of a type if
25802         possible. 
25803
25804         * expression.cs (Expression::ConvertImplicit): New function that
25805         implements implicit type conversions.
25806
25807         (Expression::ImplicitReferenceConversion): Implements implicit
25808         reference conversions.
25809
25810         (EmptyCast): New type for transparent casts.
25811
25812         (OpcodeCast): New type for casts of types that are performed with
25813         a sequence of bytecodes.
25814
25815         (BoxedCast): New type used for casting value types into reference
25816         types.  Emits a box opcode.
25817
25818         (Binary::DoNumericPromotions): Implements numeric promotions of
25819         and computation of the Binary::Type.
25820
25821         (Binary::EmitBranchable): Optimization.
25822
25823         (Binary::Emit): Implement code emission for expressions.
25824
25825         * typemanager.cs (TypeManager): Added two new core types: sbyte
25826         and byte.
25827
25828 2001-09-12  Ravi Pratap  <ravi@ximian.com>
25829
25830         * class.cs (TypeContainer::FindMembers): Method which does exactly
25831         what Type.FindMembers does, only we don't have to use reflection. No
25832         implementation yet.
25833
25834         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
25835         typecontainer objects as we need to get at them.
25836         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
25837
25838         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
25839         typecontainer object.
25840
25841         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
25842         of just a Report object.
25843
25844 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25845
25846         * class.cs (Event::Define): Go back to using the prefixes "add_" and
25847         "remove_"
25848         (TypeContainer::Populate): Now define the delegates of the type too.
25849         (TypeContainer.Delegates): Property to access the list of delegates defined
25850         in the type.
25851
25852         * delegates.cs (Delegate::Define): Implement partially.
25853
25854         * modifiers.cs (TypeAttr): Handle more flags.
25855
25856 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25857
25858         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
25859         and not <=
25860         (Operator::Define): Re-write logic to get types by using the LookupType method
25861         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
25862         (Indexer::Define): Ditto.
25863         (Event::Define): Ditto.
25864         (Property::Define): Ditto.
25865
25866 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25867
25868         * class.cs (TypeContainer::Populate): Now define operators too. 
25869         (TypeContainer.Operators): New property to access the list of operators
25870         in a type.
25871         (Operator.OperatorMethodBuilder): New member to hold the method builder
25872         for the operator we are defining.
25873         (Operator::Define): Implement.
25874
25875 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25876
25877         * class.cs (Event::Define): Make the prefixes of the accessor methods
25878         addOn_ and removeOn_ 
25879
25880         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
25881         of the location being passed in too. Ideally, this should go later since all
25882         error reporting should be done through the Report object.
25883
25884         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
25885         (Populate): Iterate thru the indexers we have and define them too.
25886         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
25887         for the get and set accessors.
25888         (Indexer::Define): Implement.
25889
25890 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
25891
25892         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
25893         my previous implementation, did not work.
25894
25895         * typemanager.cs: Add a couple of missing types (the longs).
25896
25897         * literal.cs: Use TypeManager.bool_type instead of getting it.
25898
25899         * expression.cs (EventExpr): New kind of expressions.
25900         (Expressio::ExprClassFromMemberInfo): finish
25901
25902 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
25903
25904         * assign.cs: Emit stores to static fields differently.
25905
25906 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25907
25908         * Merge in changes and adjust code to tackle conflicts. Backed out my
25909         code in Assign::Resolve ;-) 
25910
25911 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25912
25913         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
25914         instead Report.Error and also pass in the location.
25915         (CSharpParser::Lexer): New readonly property to return the reference
25916         to the Tokenizer object.
25917         (declare_local_variables): Use Report.Error with location instead of plain 
25918         old error.
25919         (CheckDef): Ditto.
25920
25921         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
25922         (Operator.CheckBinaryOperator): Ditto.
25923
25924         * cs-parser.jay (operator_declarator): Update accordingly.
25925
25926         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
25927         (CheckBinaryOperator): Same here.
25928
25929         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
25930         on the name without any prefixes of namespace names etc. This is because we
25931         already might have something already fully qualified like 
25932         'System.Console.WriteLine'
25933
25934         * assign.cs (Resolve): Begin implementation. Stuck ;-)
25935
25936 2001-09-07  Ravi Pratap  <ravi@ximian.com>
25937
25938         * cs-tokenizer.cs (location): Return a string which also contains
25939         the file name.
25940
25941         * expression.cs (ElementAccess): New class for expressions of the
25942         type 'element access.'
25943         (BaseAccess): New class for expressions of the type 'base access.'
25944         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
25945         respectively.
25946
25947         * cs-parser.jay (element_access): Implement action.
25948         (base_access): Implement actions.
25949         (checked_expression, unchecked_expression): Implement.
25950
25951         * cs-parser.jay (local_variable_type): Correct and implement.
25952         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
25953
25954         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
25955
25956         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
25957         name and the specifiers.
25958
25959         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
25960
25961         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
25962         making them all public ;-)
25963
25964         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
25965         class anyways.
25966
25967 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
25968
25969         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
25970         PropertyExprs.
25971         (FieldExpr, PropertyExprs): New resolved expressions.
25972         (SimpleName::MemberStaticCheck): Perform static checks for access
25973         to non-static fields on static methods. Maybe this should be
25974         generalized for MemberAccesses. 
25975         (SimpleName::ResolveSimpleName): More work on simple name
25976         resolution. 
25977
25978         * cs-parser.jay (primary_expression/qualified_identifier): track
25979         the parameter index.
25980
25981         * codegen.cs (CodeGen::Save): Catch save exception, report error.
25982         (EmitContext::EmitBoolExpression): Chain to expression generation
25983         instead of temporary hack.
25984         (::EmitStatementExpression): Put generic expression code generation.
25985
25986         * assign.cs (Assign::Emit): Implement variable assignments to
25987         local variables, parameters and fields.
25988
25989 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
25990
25991         * statement.cs (Block::GetVariableInfo): New method, returns the
25992         VariableInfo for a variable name in a block.
25993         (Block::GetVariableType): Implement in terms of GetVariableInfo
25994
25995         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
25996         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
25997
25998 2001-09-06  Ravi Pratap  <ravi@ximian.com>
25999
26000         * cs-parser.jay (operator_declaration): Continue on my quest : update
26001         to take attributes argument.
26002         (event_declaration): Ditto.
26003         (enum_declaration): Ditto.
26004         (indexer_declaration): Ditto.
26005
26006         * class.cs (Operator::Operator): Update constructor accordingly.
26007         (Event::Event): Ditto.
26008
26009         * delegate.cs (Delegate::Delegate): Same here.
26010
26011         * enum.cs (Enum::Enum): Same here.
26012
26013 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26014
26015         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
26016
26017         * ../tests/cs0658.cs : New file to demonstrate error 0658.
26018
26019         * attribute.cs (Attributes): New class to encapsulate all attributes which were
26020         being passed around as an arraylist.
26021         (Attributes::AddAttribute): Method to add attribute sections.
26022
26023         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
26024         (struct_declaration): Update accordingly.
26025         (constant_declaration): Update.
26026         (field_declaration): Update.
26027         (method_header): Update.
26028         (fixed_parameter): Update.
26029         (parameter_array): Ditto.
26030         (property_declaration): Ditto.
26031         (destructor_declaration): Ditto.
26032
26033         * class.cs (Struct::Struct): Update constructors accordingly.
26034         (Class::Class): Ditto.
26035         (Field::Field): Ditto.
26036         (Method::Method): Ditto.
26037         (Property::Property): Ditto.
26038         (TypeContainer::OptAttribute): update property's return type.
26039
26040         * interface.cs (Interface.opt_attributes): New member.
26041         (Interface::Interface): Update to take the extra Attributes argument.
26042
26043         * parameter.cs (Parameter::Parameter): Ditto.
26044
26045         * constant.cs (Constant::Constant): Ditto.
26046
26047         * interface.cs (InterfaceMemberBase): New OptAttributes field.
26048         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
26049         the attributes as a parameter.
26050         (InterfaceProperty): Update constructor call.
26051         (InterfaceEvent): Ditto.
26052         (InterfaceMethod): Ditto.
26053         (InterfaceIndexer): Ditto.
26054
26055         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
26056         pass the attributes too.
26057         (interface_event_declaration): Ditto.
26058         (interface_property_declaration): Ditto.
26059         (interface_method_declaration): Ditto.
26060         (interface_declaration): Ditto.
26061
26062 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
26063
26064         * class.cs (Method::Define): Track the "static Main" definition to
26065         create an entry point. 
26066
26067         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
26068         EntryPoint if we find it. 
26069
26070         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
26071         (EmitContext::ig): Make this variable public.
26072
26073         * driver.cs: Make the default output file be the first file name
26074         with the .exe extension.  
26075
26076         Detect empty compilations
26077
26078         Handle various kinds of output targets.  Handle --target and
26079         rename -t to --dumper.
26080
26081         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
26082         methods inherited from Expression return now an Expression.  This
26083         will is used during the tree rewriting as we resolve them during
26084         semantic analysis.
26085
26086         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
26087         the spec.  Missing entirely is the information about
26088         accessability of elements of it.
26089
26090         (Expression::ExprClassFromMemberInfo): New constructor for
26091         Expressions that creates a fully initialized Expression based on
26092         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
26093         a Type.
26094
26095         (Invocation::Resolve): Begin implementing resolution of invocations.
26096
26097         * literal.cs (StringLiteral):  Implement Emit.
26098
26099 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26100
26101         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
26102         member.
26103
26104 2001-09-04  Ravi Pratap  <ravi@ximian.com>
26105
26106         * cs-parser.jay (attribute_arguments): Implement actions.
26107         (attribute): Fix bug in production. Implement action.
26108         (attribute_list): Implement.
26109         (attribute_target): Implement.
26110         (attribute_target_specifier, opt_target_specifier): Implement
26111         (CheckAttributeTarget): New method to check if the attribute target
26112         is valid.
26113         (attribute_section): Implement.
26114         (opt_attributes): Implement.
26115
26116         * attribute.cs : New file to handle attributes.
26117         (Attribute): Class to hold attribute info.
26118
26119         * cs-parser.jay (opt_attribute_target_specifier): Remove production
26120         (attribute_section): Modify production to use 2 different rules to 
26121         achieve the same thing. 1 s/r conflict down !
26122         Clean out commented, useless, non-reducing dimension_separator rules.
26123
26124         * class.cs (TypeContainer.attributes): New member to hold list
26125         of attributes for a type.
26126         (Struct::Struct): Modify to take one more argument, the attribute list.
26127         (Class::Class): Ditto.
26128         (Field::Field): Ditto.
26129         (Method::Method): Ditto.
26130         (Property::Property): Ditto.
26131
26132         * cs-parser.jay (struct_declaration): Update constructor call to
26133         pass in the attributes too.
26134         (class_declaration): Ditto.
26135         (constant_declaration): Ditto.
26136         (field_declaration): Ditto.
26137         (method_header): Ditto.
26138         (fixed_parameter): Ditto.
26139         (parameter_array): Ditto.
26140         (property_declaration): Ditto.
26141
26142         * constant.cs (Constant::Constant): Update constructor similarly.
26143         Use System.Collections.
26144
26145         * parameter.cs (Parameter::Parameter): Update as above.
26146
26147 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26148
26149         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
26150         (TypeContainer.delegates): New member to hold list of delegates.
26151
26152         * cs-parser.jay (delegate_declaration): Implement the action correctly 
26153         this time as I seem to be on crack ;-)
26154
26155 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
26156
26157         * rootcontext.cs (RootContext::IsNamespace): new function, used to
26158         tell whether an identifier represents a namespace.
26159
26160         * expression.cs (NamespaceExpr): A namespace expression, used only
26161         temporarly during expression resolution.
26162         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
26163         utility functions to resolve names on expressions.
26164
26165 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
26166
26167         * codegen.cs: Add hook for StatementExpressions. 
26168
26169         * class.cs: Fix inverted test for static flag in methods.
26170
26171 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26172
26173         * class.cs (Operator::CheckUnaryOperator): Correct error number used
26174         to make it coincide with MS' number.
26175         (Operator::CheckBinaryOperator): Ditto.
26176
26177         * ../errors/errors.txt : Remove error numbers added earlier.
26178
26179         * ../errors/cs1019.cs : Test case for error # 1019
26180
26181         * ../errros/cs1020.cs : Test case for error # 1020
26182
26183         * cs-parser.jay : Clean out commented cruft.
26184         (dimension_separators, dimension_separator): Comment out. Ostensibly not
26185         used anywhere - non-reducing rule.
26186         (namespace_declarations): Non-reducing rule - comment out.
26187
26188         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
26189         with TypeContainer::AddEnum.
26190
26191         * delegate.cs : New file for delegate handling classes.
26192         (Delegate): Class for declaring delegates.
26193
26194         * makefile : Update.
26195
26196         * cs-parser.jay (delegate_declaration): Implement.
26197
26198 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
26199
26200         * class.cs (Event::Define): Implement.
26201         (Event.EventBuilder): New member.
26202
26203         * class.cs (TypeContainer::Populate): Update to define all enums and events
26204         we have.
26205         (Events): New property for the events arraylist we hold. Shouldn't we move to using
26206         readonly fields for all these cases ?
26207
26208 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26209
26210         * class.cs (Property): Revamp to use the convention of making fields readonly.
26211         Accordingly modify code elsewhere.
26212
26213         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
26214         the Define method of the Property class.
26215
26216         * class.cs : Clean up applied patch and update references to variables etc. Fix 
26217         trivial bug.
26218         (TypeContainer::Populate): Update to define all the properties we have. Also
26219         define all enumerations.
26220
26221         * enum.cs (Define): Implement.
26222
26223 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26224
26225         * cs-parser.jay (overloadable_operator): The semantic value is an
26226         enum of the Operator class.
26227         (operator_declarator): Implement actions.
26228         (operator_declaration): Implement.
26229
26230         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
26231         validity of definitions.
26232         (Operator::CheckBinaryOperator): Static method to check for binary operators
26233         (TypeContainer::AddOperator): New method to add an operator to a type.
26234
26235         * cs-parser.jay (indexer_declaration): Added line to actually call the
26236         AddIndexer method so it gets added ;-)
26237
26238         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
26239         already taken care of by the MS compiler ?  
26240
26241 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26242
26243         * class.cs (Operator): New class for operator declarations.
26244         (Operator::OpType): Enum for the various operators.
26245
26246 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26247
26248         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
26249         ostensibly handle this in semantic analysis.
26250
26251         * cs-parser.jay (general_catch_clause): Comment out
26252         (specific_catch_clauses, specific_catch_clause): Ditto.
26253         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
26254         (catch_args, opt_catch_args): New productions.
26255         (catch_clause): Rewrite to use the new productions above
26256         (catch_clauses): Modify accordingly.
26257         (opt_catch_clauses): New production to use in try_statement
26258         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
26259         and re-write the code in the actions to extract the specific and
26260         general catch clauses by being a little smart ;-)
26261
26262         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
26263         Hooray, try and catch statements parse fine !
26264
26265 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26266
26267         * statement.cs (Block::GetVariableType): Fix logic to extract the type
26268         string from the hashtable of variables.
26269
26270         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
26271         I end up making that mistake ;-)
26272         (catch_clauses): Fixed gross error which made Key and Value of the 
26273         DictionaryEntry the same : $1 !!
26274
26275 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26276
26277         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
26278
26279         * cs-parser.jay (event_declaration): Correct to remove the semicolon
26280         when the add and remove accessors are specified. 
26281
26282 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26283
26284         * cs-parser.jay (IndexerDeclaration): New helper class to hold
26285         information about indexer_declarator.
26286         (indexer_declarator): Implement actions.
26287         (parsing_indexer): New local boolean used to keep track of whether
26288         we are parsing indexers or properties. This is necessary because 
26289         implicit_parameters come into picture even for the get accessor in the 
26290         case of an indexer.
26291         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
26292
26293         * class.cs (Indexer): New class for indexer declarations.
26294         (TypeContainer::AddIndexer): New method to add an indexer to a type.
26295         (TypeContainer::indexers): New member to hold list of indexers for the
26296         type.
26297
26298 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26299
26300         * cs-parser.jay (add_accessor_declaration): Implement action.
26301         (remove_accessor_declaration): Implement action.
26302         (event_accessors_declaration): Implement
26303         (variable_declarators): swap statements for first rule - trivial.
26304
26305         * class.cs (Event): New class to hold information about event
26306         declarations.
26307         (TypeContainer::AddEvent): New method to add an event to a type
26308         (TypeContainer::events): New member to hold list of events.
26309
26310         * cs-parser.jay (event_declaration): Implement actions.
26311
26312 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26313
26314         * cs-parser.jay (dim_separators): Implement. Make it a string
26315         concatenating all the commas together, just as they appear.
26316         (opt_dim_separators): Modify accordingly
26317         (rank_specifiers): Update accordingly. Basically do the same
26318         thing - instead, collect the brackets here.
26319         (opt_rank_sepcifiers): Modify accordingly.
26320         (array_type): Modify to actually return the complete type string
26321         instead of ignoring the rank_specifiers.
26322         (expression_list): Implement to collect the expressions
26323         (variable_initializer): Implement. We make it a list of expressions
26324         essentially so that we can handle the array_initializer case neatly too.
26325         (variable_initializer_list): Implement.
26326         (array_initializer): Make it a list of variable_initializers
26327         (opt_array_initializer): Modify accordingly.
26328
26329         * expression.cs (New::NType): Add enumeration to help us
26330         keep track of whether we have an object/delegate creation
26331         or an array creation.
26332         (New:NewType, New::Rank, New::Indices, New::Initializers): New
26333         members to hold data about array creation.
26334         (New:New): Modify to update NewType
26335         (New:New): New Overloaded contructor for the array creation
26336         case.
26337
26338         * cs-parser.jay (array_creation_expression): Implement to call
26339         the overloaded New constructor.
26340
26341 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
26342
26343         * class.cs (TypeContainer::Constructors): Return member
26344         constructors instead of returning null.
26345
26346 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
26347
26348         * typemanager.cs (InitCoreTypes): Initialize the various core
26349         types after we have populated the type manager with the user
26350         defined types (this distinction will be important later while
26351         compiling corlib.dll)
26352
26353         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
26354         on Expression Classification.  Now all expressions have a method
26355         `Resolve' and a method `Emit'.
26356
26357         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
26358         generation from working.     Also add some temporary debugging
26359         code. 
26360
26361 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
26362
26363         * codegen.cs: Lots of code generation pieces.  This is only the
26364         beginning, will continue tomorrow with more touches of polish.  We
26365         handle the fundamentals of if, while, do, for, return.  Others are
26366         trickier and I need to start working on invocations soon.
26367
26368         * gen-treedump.cs: Bug fix, use s.Increment here instead of
26369         s.InitStatement. 
26370
26371         * codegen.cs (EmitContext): New struct, used during code
26372         emission to keep a context.   Most of the code generation will be
26373         here. 
26374
26375         * cs-parser.jay: Add embedded blocks to the list of statements of
26376         this block.  So code generation proceeds in a top down fashion.
26377
26378 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
26379
26380         * statement.cs: Add support for multiple child blocks.
26381
26382 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
26383
26384         * codegen.cs (EmitCode): New function, will emit the code for a
26385         Block of code given a TypeContainer and its ILGenerator. 
26386
26387         * statement.cs (Block): Standard public readonly optimization.
26388         (Block::Block constructors): Link children. 
26389         (Block::Child): Child Linker.
26390         (Block::EmitVariables): Emits IL variable declarations.
26391
26392         * class.cs: Drop support for MethodGroups here, delay until
26393         Semantic Analysis.
26394         (Method::): Applied the same simplification that I did before, and
26395         move from Properties to public readonly fields.
26396         (Method::ParameterTypes): Returns the parameter types for the
26397         function, and implements a cache that will be useful later when I
26398         do error checking and the semantic analysis on the methods is
26399         performed.
26400         (Constructor::GetCallingConvention): Renamed from CallingConvetion
26401         and made a method, optional argument tells whether this is a class
26402         or a structure to apply the `has-this' bit.
26403         (Method::GetCallingConvention): Implement, returns the calling
26404         convention. 
26405         (Method::Define): Defines the type, a second pass is performed
26406         later to populate the methods.
26407
26408         (Constructor::ParameterTypes): implement a cache similar to the
26409         one on Method::ParameterTypes, useful later when we do semantic
26410         analysis. 
26411
26412         (TypeContainer::EmitMethod):  New method.  Emits methods.
26413
26414         * expression.cs: Removed MethodGroup class from here.
26415
26416         * parameter.cs (Parameters::GetCallingConvention): new method.
26417
26418 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
26419
26420         * class.cs (TypeContainer::Populate): Drop RootContext from the
26421         argument. 
26422
26423         (Constructor::CallingConvention): Returns the calling convention.
26424         (Constructor::ParameterTypes): Returns the constructor parameter
26425         types. 
26426
26427         (TypeContainer::AddConstructor): Keep track of default constructor
26428         and the default static constructor.
26429
26430         (Constructor::) Another class that starts using `public readonly'
26431         instead of properties. 
26432
26433         (Constructor::IsDefault): Whether this is a default constructor. 
26434
26435         (Field::) use readonly public fields instead of properties also.
26436
26437         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
26438         track of static constructors;  If none is used, turn on
26439         BeforeFieldInit in the TypeAttributes. 
26440
26441         * cs-parser.jay (opt_argument_list): now the return can be null
26442         for the cases where there are no arguments. 
26443
26444         (constructor_declarator): If there is no implicit `base' or
26445         `this', then invoke the default parent constructor. 
26446
26447         * modifiers.cs (MethodAttr): New static function maps a set of
26448         modifiers flags into a MethodAttributes enum
26449         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26450         MethodAttr, TypeAttr to represent the various mappings where the
26451         modifiers are used.
26452         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26453
26454 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26455
26456         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26457         method arguments.
26458
26459         * interface.cs (PopulateIndexer): Implemented the code generator
26460         for interface indexers.
26461
26462 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26463
26464         * interface.cs (InterfaceMemberBase): Now we track the new status
26465         here.  
26466
26467         (PopulateProperty): Implement property population.  Woohoo!  Got
26468         Methods and Properties going today. 
26469
26470         Removed all the properties for interfaces, and replaced them with
26471         `public readonly' fields. 
26472
26473 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26474
26475         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26476         initialize their hashtables/arraylists only when they are needed
26477         instead of doing this always.
26478
26479         * parameter.cs: Handle refs and out parameters.
26480
26481         * cs-parser.jay: Use an ArrayList to construct the arguments
26482         instead of the ParameterCollection, and then cast that to a
26483         Parameter[] array.
26484
26485         * parameter.cs: Drop the use of ParameterCollection and use
26486         instead arrays of Parameters.
26487
26488         (GetParameterInfo): Use the Type, not the Name when resolving
26489         types. 
26490
26491 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26492
26493         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26494         and instead use public readonly fields.
26495
26496         * class.cs: Put back walking code for type containers.
26497
26498 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26499
26500         * class.cs (MakeConstant): Code to define constants.
26501
26502         * rootcontext.cs (LookupType): New function.  Used to locate types 
26503
26504
26505 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26506
26507         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26508         this System.Reflection code is.  Kudos to Microsoft
26509
26510         * typemanager.cs: Implement a type cache and avoid loading all
26511         types at boot time.  Wrap in LookupType the internals.  This made
26512         the compiler so much faster.  Wow.  I rule!
26513
26514         * driver.cs: Make sure we always load mscorlib first (for
26515         debugging purposes, nothing really important).
26516
26517         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26518         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26519
26520         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26521         on namespaces that have been imported using the `using' keyword.
26522
26523         * class.cs (TypeContainer::TypeAttr): Virtualize.
26524         (Class::TypeAttr): Return attributes suitable for this bad boy.
26525         (Struct::TypeAttr): ditto.
26526         Handle nested classes.
26527         (TypeContainer::) Remove all the type visiting code, it is now
26528         replaced with the rootcontext.cs code
26529
26530         * rootcontext.cs (GetClassBases): Added support for structs. 
26531
26532 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26533
26534         * interface.cs, statement.cs, class.cs, parameter.cs,
26535         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26536         Drop use of TypeRefs, and use strings instead.
26537
26538 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26539
26540         * rootcontext.cs: 
26541
26542         * class.cs (Struct::Struct): set the SEALED flags after
26543         checking the modifiers.
26544         (TypeContainer::TypeAttr): new property, returns the
26545         TypeAttributes for a class.  
26546
26547         * cs-parser.jay (type_list): Oops, list production was creating a
26548         new list of base types.
26549
26550         * rootcontext.cs (StdLib): New property.
26551         (GetInterfaceTypeByName): returns an interface by type name, and
26552         encapsulates error handling here.
26553         (GetInterfaces): simplified.
26554         (ResolveTree): Encapsulated all the tree resolution here.
26555         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26556         types. 
26557
26558         * driver.cs: Add support for --nostdlib, to avoid loading the
26559         default assemblies.
26560         (Main): Do not put tree resolution here. 
26561
26562         * rootcontext.cs: Beginning of the class resolution.
26563
26564 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26565
26566         * rootcontext.cs: Provide better error reporting. 
26567
26568         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26569
26570         * rootcontext.cs (CreateInterface): Handle the case where there
26571         are no parent interfaces.
26572
26573         (CloseTypes): Routine to flush types at the end.
26574         (CreateInterface): Track types.
26575         (GetInterfaces): Returns an array of Types from the list of
26576         defined interfaces.
26577
26578         * typemanager.c (AddUserType): Mechanism to track user types (puts
26579         the type on the global type hash, and allows us to close it at the
26580         end). 
26581
26582 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
26583
26584         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
26585         RecordInterface instead.
26586
26587         * cs-parser.jay: Updated to reflect changes above.
26588
26589         * decl.cs (Definition): Keep track of the TypeBuilder type that
26590         represents this type here.  Not sure we will use it in the long
26591         run, but wont hurt for now.
26592
26593         * driver.cs: Smaller changes to accomodate the new code.
26594
26595         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
26596         when done. 
26597
26598         * rootcontext.cs (CreateInterface):  New method, used to create
26599         the System.TypeBuilder type for interfaces.
26600         (ResolveInterfaces): new entry point to resolve the interface
26601         hierarchy. 
26602         (CodeGen): Property, used to keep track of the code generator.
26603
26604 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
26605
26606         * cs-parser.jay: Add a second production for delegate_declaration
26607         with `VOID'.
26608
26609         (enum_body): Put an opt_comma here instead of putting it on
26610         enum_body or enum_member_declarations so we can handle trailing
26611         commas on enumeration members.  Gets rid of a shift/reduce.
26612
26613         (type_list): Need a COMMA in the middle.
26614
26615         (indexer_declaration): Tell tokenizer to recognize get/set
26616
26617         * Remove old targets.
26618
26619         * Re-add the parser target.
26620
26621 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26622
26623         * cs-parser.jay: Add precendence rules for a number of operators
26624         ot reduce the number of shift/reduce conflicts in the grammar.
26625
26626 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
26627
26628         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
26629         and put it here.
26630
26631         Get rid of old crufty code.
26632
26633         * rootcontext.cs: Use this to keep track of the parsed
26634         representation and the defined types available to the program. 
26635
26636         * gen-treedump.cs: adjust for new convention.
26637
26638         * type.cs: Split out the type manager, and the assembly builder
26639         from here. 
26640
26641         * typemanager.cs: the type manager will live here now.
26642
26643         * cil-codegen.cs: And the code generator here. 
26644
26645 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
26646
26647         * makefile: Fixed up for easy making.
26648
26649 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26650
26651         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
26652         the 
26653
26654         (unary_expression): Expand pre_increment_expression and
26655         post_decrement_expression to reduce a shift/reduce.
26656
26657 2001-07-11  Simon Cozens
26658
26659         * cs-tokenizer.cs: Hex numbers should begin with a 0.
26660
26661         Improve allow_keyword_as_indent name.
26662
26663 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
26664
26665         * Adjustments for Beta2. 
26666
26667 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
26668
26669         * decl.cs: Added `Define' abstract method.
26670         (InTransit): new property, used to catch recursive definitions. 
26671
26672         * interface.cs: Implement `Define'. 
26673
26674         * modifiers.cs: Map Modifiers.constants to
26675         System.Reflection.TypeAttribute flags.
26676
26677         * class.cs: Keep track of types and user-defined types.
26678         (BuilderInit): New method for creating an assembly
26679         (ResolveType): New function to launch the resolution process, only
26680         used by interfaces for now.
26681
26682         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
26683         that are inserted into the name space. 
26684
26685 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
26686
26687         * ARGH.  I have screwed up my tree so many times due to the use of
26688         rsync rather than using CVS.  Going to fix this at once. 
26689
26690         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
26691         load types.
26692
26693 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
26694
26695         * Experiment successful: Use System.Type rather that our own
26696         version of Type.  
26697
26698 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
26699
26700         * cs-parser.jay: Removed nsAliases from here.
26701
26702         Use new namespaces, handle `using XXX;' 
26703
26704         * namespace.cs: Reimplemented namespace handling, use a recursive
26705         definition of the class.  Now we can keep track of using clauses
26706         and catch invalid using clauses.
26707
26708 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
26709
26710         * gen-treedump.cs: Adapted for all the renaming.
26711
26712         * expression.cs (Expression): this class now has a Type property
26713         which returns an expression Type.
26714
26715         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
26716         `Type', as this has a different meaning now in the base
26717
26718 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
26719
26720         * interface.cs, class.cs: Removed from all the sources the
26721         references to signature computation, as we can not do method
26722         signature computation during the parsing time, as we are not
26723         trying to solve at that point distinguishing:
26724
26725         class X {
26726                 void a (Blah x) {}
26727                 void a (NS.Blah x) {}
26728         }
26729
26730         Which depending on the context might be valid or not, as we do not
26731         know if Blah is the same thing as NS.Blah at that point.
26732
26733         * Redid everything so the code uses TypeRefs now instead of
26734         Types.  TypeRefs are just temporary type placeholders, that need
26735         to be resolved.  They initially have a pointer to a string and the
26736         current scope in which they are used.  This is used later by the
26737         compiler to resolve the reference to an actual Type. 
26738
26739         * DeclSpace is no longer a CIR.Type, and neither are
26740         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
26741         are all DeclSpaces, but no Types. 
26742
26743         * type.cs (TypeRefManager): This implements the TypeRef manager,
26744         which keeps track of all the types that need to be resolved after
26745         the parsing has finished. 
26746
26747 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
26748
26749         * ARGH.  We are going to have to store `foreach' as a class rather
26750         than resolving it, as we need to verify error 1579 after name
26751         resolution.   *OR* we could keep a flag that says `This request to
26752         IEnumerator comes from a foreach statement' which we can then use
26753         to generate the error.
26754
26755 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
26756
26757         * class.cs (TypeContainer.AddMethod): we now add methods to the
26758         MethodGroup instead of the method hashtable.  
26759
26760         * expression.cs: Add MethodGroup abstraction, which gets us one
26761         step closer to the specification in the way we handle method
26762         declarations.  
26763
26764         * cs-parser.jay (primary_expression): qualified_identifier now
26765         tried to match up an identifier to a local variable reference or
26766         to a parameter reference.
26767
26768         current_local_parameters is now a parser global variable that
26769         points to the current parameters for the block, used during name
26770         lookup.
26771
26772         (property_declaration): Now creates an implicit `value' argument to
26773         the set accessor.
26774
26775 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
26776
26777         * parameter.cs: Do not use `param' arguments as part of the
26778         signature, per the spec.
26779
26780 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
26781
26782         * decl.cs: Base class for classes, structs and interfaces.  This
26783         is the "Declaration Space" 
26784
26785         * cs-parser.jay: Use CheckDef for checking declaration errors
26786         instead of having one on each function.
26787
26788         * class.cs: Factor out some code for handling error handling in
26789         accordance to the "Declarations" section in the "Basic Concepts"
26790         chapter in the ECMA C# spec.
26791
26792         * interface.cs: Make all interface member classes derive from
26793         InterfaceMemberBase.
26794
26795 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
26796
26797         * Many things: all interfaces are parsed and generated in
26798         gen-treedump.  Support for member variables, constructors,
26799         destructors, properties, constants is there.
26800
26801         Beginning of the IL backend, but very little done, just there for
26802         testing purposes. 
26803
26804 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
26805
26806         * cs-parser.jay: Fix labeled statement.
26807
26808         * cs-tokenizer.cs (escape): Escape " and ' always.
26809         ref_line, ref_name: keep track of the line/filename as instructed
26810         by #line by the compiler.
26811         Parse #line.
26812
26813 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
26814
26815         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
26816         to match the values in System.CodeDOM.
26817
26818         Divid renamed to Divide.
26819
26820         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
26821         statements. 
26822         (Statements.set): remove.
26823
26824         * System.CodeDOM/CodeCatchClause.cs: always have a valid
26825         statements. 
26826
26827         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
26828         falseStatements always have valid values. 
26829
26830         * cs-parser.jay: Use System.CodeDOM now.
26831