2007-01-28 Miguel de Icaza <miguel@novell.com>
[mono.git] / mcs / gmcs / ChangeLog
1 2007-01-28  Miguel de Icaza  <miguel@novell.com>
2
3         * cs-parser.jay (open_parens): Introduce new non-terminal that
4         abstracts OPEN_PARENS and OPEN_PARENS_LAMBDA as the later can now
5         be returned in places where types are followed by identifiers
6         (this is expected in declaration, fixed, using, foreach and catch
7         clauses). 
8         
9
10         Use open_parens in those places, keep OPEN_PARENS in the
11         expressions.  
12
13         cs-parser.jay: New grammar bits for parsing lambda expressions. 
14
15 2007-01-28  Raja R Harinath  <rharinath@novell.com>
16
17         Fix #80534, gtest-309.cs
18         * generic.cs (UnifyType): Rename from InferType.  Make unification
19         of generic insts simpler and don't insist on inferring all generic
20         parameters in a single generic inst unification.
21         (UnifyTypes): New.
22         (InferGenericInstance): Remove.
23         Analysis and initial patch by David Mitchell <dmitchell@logos.com>.
24
25 2007-01-20  Marek Safar  <marek.safar@gmail.com>
26
27         * cs-parser.jay: Better parameter error handling.
28
29 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
30             Raja R Harinath  <rharinath@novell.com>
31
32         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
33         Note the order in which accessors are declared in the source.
34
35 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
36
37         * generic.cs (TypeParameter.FindMembers): Use the generic
38         constraints, not the constraints to check for methods (first fix
39         of 80518).
40
41 2006-12-30  Marek Safar  <marek.safar@gmail.com>
42
43         * cs-parser.jay: Better syntax errors handling.
44
45 2006-11-21  Marek Safar  <marek.safar@gmail.com>
46
47         * cs-parser.jay: Tiny change to work with mcs tokenizer.
48
49         * cs-tokenizer.cs: Remove after unification with mcs.
50
51 2006-10-28  Marek Safar  <marek.safar@gmail.com>
52
53         A fix for bug #78998
54         * generic.cs (ConstructedType.AsAccessible): Check accessibility of type
55         arguments as well.
56
57 2006-10-26  Marek Safar  <marek.safar@gmail.com>
58
59         A fix for bug #76591
60         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous methods.
61
62 2006-10-25  Brian Crowell  <brian@fluggo.com>
63
64         Fix #79703
65         * generic.cs (CheckConstraints): Allow generic parameters with
66         inheritance constraints to satisfy reference type constraints.
67
68 2006-10-09  Martin Baulig  <martin@ximian.com>
69
70         * generic.cs
71         (NullCoalescingOperator.DoResolve): Fix #78964; added gtest-294.cs.
72
73 2006-09-25  Martin Baulig  <martin@ximian.com>
74
75         * class.cs: Remove after unification with mcs source.
76
77 2006-09-24  Raja R Harinath  <harinath@gmail.com>
78
79         * convert.cs: Remove after unification with mcs source.
80
81 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
82
83         * class.cs (MemberBase.VerifyClsCompliance): When method has type
84         parameters verify them as well.
85
86         * generic.cs (Constraints.VerifyClsCompliance): Verify CLS-Compliance of
87         the type parameter constraints.
88         (Generics.VerifyClsCompliance): Ditto.
89
90 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
91
92         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
93         for anonymous block with out argument.
94
95 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
96
97         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
98         not used private events only.
99
100 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
101
102         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
103
104         * cs-parser.jay: Parse correctly cast of default (T).
105
106         * generic.cs (DefaultValueExpression.DoResolve): Check for void type.
107         Store original type via EmptyConstantCast.
108
109 2006-09-22  Martin Baulig  <martin@ximian.com>
110
111         * delegate.cs: Removed; this file is now shared with mcs.
112
113         * attribute.cs: Removed; this file is now shared with mcs.
114
115 2006-09-22  Martin Baulig  <martin@ximian.com>
116
117         * ecore.cs: Removed; this file is now shared with mcs.
118
119 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
120
121         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
122
123         * ecore.cs (NullCast): Derives from NullConstant.
124
125         * generic.cs (DefaultValueExpression): Fixed to cope with the constant
126         results.
127
128 2006-09-21  Martin Baulig  <martin@ximian.com>
129
130         * decl.cs: Removed; this file is now shared with mcs.
131
132 2006-09-21  Raja R Harinath  <rharinath@novell.com>
133
134         * rootcontext.cs: Remove after unification with mcs source.
135
136         * report.cs: Remove after unification with mcs source.
137         * generic.cs (AddTypeParameter, LookupTypeParameter): Move to
138         mcs/typemanager.cs.
139         (InitGenerics, CleanUpGenerics): Remove.
140
141         * support.cs: Remove after unification with mcs source.
142
143 2006-09-20  Raja R Harinath  <rharinath@novell.com>
144
145         * codegen.cs: Remove after unification with mcs source.
146
147 2006-09-19  Martin Baulig  <martin@ximian.com>
148
149         * expression.cs: Removed; this file is now shared with mcs.
150
151 2006-09-19  Martin Baulig  <martin@ximian.com>
152
153         * generic.cs
154         (TypeManager.IsEqual): Moved into ../mcs/typemanager.cs.
155         (TypeManager.DropGenericTypeArguments): Likewise.
156         (TypeManager.DropGenericMethodArguments): Likewise.
157         (TypeManager.GetTypeArguments): Likewise.
158         (TypeManager.HasGenericArguments): Likewise.
159
160 2006-09-19  Martin Baulig  <martin@ximian.com>
161
162         * ecore.cs (PropertyExpr.InstanceResolve): Fix the CS1540 check.
163
164 2006-09-19  Martin Baulig  <martin@ximian.com>
165
166         * typemanager.cs: Removed; this file is now shared with mcs.
167
168 2006-09-16  Raja R Harinath  <rharinath@novell.com>
169
170         * Makefile (LOCAL_MCS_FLAGS): Use instead of PROFILE_MCS_FLAGS.
171         * AssemblyInfo.cs, driver.cs: Remove after unification with mcs source.
172
173 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
174
175         A fix for #79401
176         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
177         only if parent type is class.
178         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
179         update.
180
181 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
182
183         * cs-parser.jay,
184         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
185         keywords are used.
186         * typemanager.cs(CSharpName): Converts NullType to null.
187
188 2006-09-15  Martin Baulig  <martin@ximian.com>
189
190         * pending.cs: Removed; this file is now shared with mcs.
191
192 2006-09-15  Martin Baulig  <martin@ximian.com>
193
194         * statement.cs: Removed; this file is now shared with mcs.
195
196 2006-09-15  Martin Baulig  <martin@ximian.com>
197
198         * rootcontext.cs (RootContext.BrokenCircularDeps): Removed.
199
200         * driver.cs: Removed the `--broken-cycles' argument.
201
202 2006-09-15  Martin Baulig  <martin@ximian.com>
203
204         * namespace.cs: Removed; this file is now shared with mcs.
205
206 2006-09-15  Martin Baulig  <martin@ximian.com>
207
208         * decl.cs (MemberName): Minor code cleanups.
209
210 2006-09-15  Martin Baulig  <martin@ximian.com>
211
212         * parameter.cs: Removed; this file is now shared with mcs.
213
214 2006-09-15  Martin Baulig  <martin@ximian.com>
215
216         * enum.cs: Removed; this file is now shared with mcs.
217
218 2006-09-15  Martin Baulig  <martin@ximian.com>
219
220         * Makefile: Define `GMCS_SOURCE'.
221
222         * flowanalysis.cs: Removed; this file is now shared with mcs.
223
224 2006-09-15  Martin Baulig  <martin@ximian.com>
225
226         Removed modifiers.cs, literal.cs, location.cs, roottypes.cs,
227         assign.cs, const.cs, cfold.cs, constant.cs, symbolwriter.cs and
228         doc.cs - they are now shared with mcs.
229
230         * gmcs.exe.sources: Include these files from ../mcs/.
231
232 2006-09-15  Martin Baulig  <martin@ximian.com>
233
234         * old-code.cs, gen-il.cs, gen-treedump.cs: Removed old stuff.
235         * g1.cs, sample-hello.cs, sample-stack.il: Likewise.
236
237 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
238
239         * assign.cs, ecore.cs, expression.cs: Share error message text.
240         * class.cs (FieldMember.Define): Check for variable of static type.
241         * decl.cs (check_type_parameter): Report correct type name.
242         * driver.cs (LoadAssembly): Uses error output for errors.
243         * generic.cs (Constraints.Resolve): Add check for constraint accessibility
244         (TypeArguments.Resolve): Static class cannot be used as an argument.
245         * statement.cs (ResolveMeta): Constants cannot be generic types.
246
247 2006-09-12  Martin Baulig  <martin@ximian.com>
248
249         * generic.cs (TypeManager.IsIList): Moved into convert.cs.
250
251         * convert.cs (Convert.Array_To_IList): Moved here and correctly
252         implement it; fixes #79345.
253
254 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
255
256         * decl.cs (DeclSpace.SetParameterInfo): Check for nonexistent type
257         parameter.
258         * expression.cs (TypeOf.GetAttributableValue): Check for open generic
259         types.
260         * generic.cs: Improved error messages.
261         * typemanager.cs (RemoveGenericArity): Made public.
262
263 2006-09-08  Martin Baulig  <martin@ximian.com>
264
265         * typemanager.cs (TypeManager.interlocked_type): New public field.
266         (TypeManager.int_interlocked_compare-exchange): New public field.
267         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
268         enumerator types here and call InitGenericCoreTypes().
269         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
270         after calling InitEnumUnderlyingTypes().
271
272         * rootcontext.cs
273         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
274         `classes_second_stage'. 
275
276 2006-09-07  Marek Safar  <marek.safar@seznam.cz>
277  
278         * class.cs, generic.cs (GenericMethod.Define): Check for type parameter
279         collisions.
280         * statement.cs (Block.Variables): Made public.
281
282 2006-09-07  Martin Baulig  <martin@ximian.com>
283
284         * driver.cs
285         (MainDriver): Revert r62663 from Marek; see #70506 for details.
286
287 2006-09-01  Martin Baulig  <martin@ximian.com>
288
289         * generic.cs
290         (TypeManager.IsIList): Also handle base classes and interfaces. 
291
292 2006-09-01  Raja R Harinath  <rharinath@novell.com>
293
294         Fix #79238
295         * expression.cs (Invocation.MoreSpecific): Check for reference
296         types earlier.
297
298 2006-08-29  Miguel de Icaza  <miguel@novell.com>
299
300         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
301
302 2006-08-17  Miguel de Icaza  <miguel@novell.com>
303
304         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
305         #52019 and #79064, the use of the \uXXXX sequence in source code
306         to represent unicode characters.
307
308 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
309  
310         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
311         support.
312         * class.cs, ecore.cs, statement.cs: Merged to one error message.
313
314 2006-08-14  Raja R Harinath  <rharinath@novell.com>
315
316         Fix #79067
317         * cs-tokenizer.cs (parse_less_than): Allow '*' to appear in a type
318         parameter too.  This only avoids a parse error -- the semantic
319         error is caught elsewhere.
320
321 2006-08-13  Miguel de Icaza  <miguel@novell.com>
322
323         * assign.cs: Catch attempts to assign to a method groups in += and
324         report as 1656
325
326 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
327
328         A fix for #79056
329         * cs-parser.jay: Don't destroy current array type by typeof of array's.
330
331 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
332
333         * cs-parser.jay: Check whether a constraint clause has already been
334         specified for type parameter.
335         * generic.cs (Constraints): Exposed location.
336
337 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
338
339         * class.cs (Method.Define): Issue a warning when generic method looks like
340         an entry point.
341         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
342         as well.
343         * report.cs: New warning number.
344
345 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
346  
347         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
348         looking for ctor.
349         * decl.cs (MemberCache.FindMembers): When container is interface we need to
350         search all base interfaces as a member can be ambiguous.
351         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
352         Constructor member type filter. 
353         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
354         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
355         reporting for returned memberinfos.
356         * report.cs: Updated.
357         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
358         version to work on all runtimes.
359         (TypeManager.RealMemberLookup): Removed members filtering.
360
361 2006-08-08  Raja R Harinath  <rharinath@novell.com>
362
363         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
364         (PropertyExpr.EmitAssign): Likewise.
365         * expression.cs (Indirection.EmitAssign): Likewise.
366         (LocalVariableReference.EmitAssign): Likewise.
367         (ParameterReference.EmitAssign): Likewise.
368         (Invocation.EmitArguments): Likewise.
369         (ArrayAccess.EmitAssign): Likewise.
370         (IndexerAccess.EmitAssign): Likewise.
371         (This.EmitAssign): Likewise.
372         (ConditionalLogicalOperator.Emit): Likewise.
373
374         Fix #79026
375         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
376         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
377         leave it in after returning it.
378         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
379
380 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
381
382         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
383         message.
384
385 2006-08-05  Marek Safar  <marek.safar@seznam.cz>
386
387         * class.cs (TypeContainer.AddPartial): Add check for partial declarations
388         with different type names.
389         (TypeContainer.UpdateTypeParameterConstraints): Updated an error message.
390
391 2006-08-03  Raja R Harinath  <rharinath@novell.com>
392
393         Fix cs0146-3.cs and cs0146-4.cs.
394         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
395         enclosing types don't depend on the current type.
396
397 2006-08-02  Raja R Harinath  <rharinath@novell.com>
398
399         Fix #77963
400         * class.cs (TypeContainer.DoDefineMembers): Use
401         FindBaseMemberWithSameName on Parent, since we're interested in
402         whether we hide inherited members or not.
403         (FindBaseMemberWithSameName): Make slightly more robust.
404
405         Fix #77396
406         * codegen.cs (IResolveContext.GenericDeclContainer): New.
407         (EmitContext): Implement new interface requirement.
408         * namespace.cs (UsingEntry, LocalAliasEntry): Likewise.
409         * decl.cs (MemberCore): Likewise.
410         (DeclSpace.GenericDeclContainer): Rename from DeclContainer.
411         * ecore.cs (SimpleName.ResolveAsTypeTerminal): Use
412         ec.GenericDeclContainer to check for generic parameters.
413         (SimpleName.DoSimpleNameResolve): Likewise.
414         * generic.cs (TypeParameter.DeclContainer): Remove override.
415
416         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
417         declspaces for doppelgangers too.
418         (UsingEntry): Implement IResolveContext.
419         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
420         'this' as the resolve context.
421         (LocalAliasEntry): Likewise.
422
423         Implement parts of #77403
424         * roottypes.cs (RootDeclSpace): New.  Used to represent the
425         toplevel declaration space.  Each namespace declaration introduces
426         a "partial" root declaretion space.
427         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
428         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
429         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
430         from 'current_namespace.SlaveDeclSpace'.
431         (namespace_declaration): Likewise.
432         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
433         check.  It can't happen now.
434         * decl.cs (DeclSpace.LookupType): Likewise.
435         * driver.cs (MainDriver): Sanity check.
436
437 2006-08-01  Raja R Harinath  <rharinath@novell.com>
438
439         * decl.cs (DeclSpace.FindNestedType): Remove.
440         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
441         LookupTypeContainer to get the container of the nested type.
442         * class.cs (TypeContainer.FindNestedType): Make non-override.
443
444 2006-07-31  Raja R Harinath  <rharinath@novell.com>
445
446         * decl.cs (DeclSpace.PartialContainer): Move field from ...
447         * class.cs (TypeContainer.PartialContainer): ... here.
448         (TypeContainer.AddBasesForPart): New helper.
449         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
450         instead.
451         * cs-parser.jay (current_class): Convert to DeclSpace.
452         (struct_declaration, interface_declaration, class_declaration):
453         Use AddBasesForPart instead of .Bases directly.
454         * const.cs, iterators.cs: Update to changes.
455
456 2006-07-28  Raja R Harinath  <rharinath@novell.com>
457
458         * class.cs (TypeContainer.AddMemberType): Rename from
459         AddToTypeContainer.
460         (TypeContainer.AddMember): Rename from AddToMemberContainer.
461         (AddTypeContainer): New.  Combine AddClassOrStruct and
462         AddInterface.
463         (AddPartial): Update.  Add 'is_partial' argument.
464         * roottypes.cs: Update to changes.
465         * cs-parser.jay (push_current_class): New helper for handling
466         current_container and current_class.
467         (struct_declaration, interface_declaration, class_declaration):
468         Use it.
469
470 2006-07-26  Raja R Harinath  <rharinath@novell.com>
471
472         * roottypes.cs: Rename from tree.cs.
473
474         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
475         * tree.cs (Tree, ITreeDump): Remove types.
476         * rootcontext.cs (tree, Tree): Remove fields.
477         (root, ToplevelTypes): New.
478         * *.cs: Update to rename.
479
480         * tree.cs (Tree.RecordDecl): Remove.
481         (RootTypes.AddToTypeContainer): Record the toplevel type in its
482         namespace here.
483         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
484
485 2006-07-23  Raja R Harinath  <harinath@gmail.com>
486
487         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
488         DoFlowAnalysis and OmitStructFlowAnalysis here.
489         (ec.With): Rename from WithUnsafe and generalize.
490         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
491         (ec.WithFlowAnalyis): New.
492         * ecore.cs, expression.cs, statement.cs: Update.
493
494 2006-07-22  Raja R Harinath  <harinath@gmail.com>
495
496         * statement.cs (Block.ResolveMeta): Simplify slightly.
497
498         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
499         multiple boolean fields.  Convert InUnsafe, constant_check_state,
500         check_state to flags.
501         (CheckState, ConstantCheckState): Update.
502         (InUnsafe): New read-only property.
503         (FlagsHandle): Rename from CheckStateHandle and convert to handle
504         arbitrary flags.
505         (WithUnsafe): New helper similar to WithCheckState.
506         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
507         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
508
509 2006-07-21  Raja R Harinath  <rharinath@novell.com>
510
511         Make comparisons use the same IL irrespective of whether they're
512         in a 'checked' or 'unchecked' context: one of the issues in #78899
513         * codegen.cs (EmitContext.CheckState): Make read-only property.
514         (EmitContext.ConstantCheckState): Likewise.
515         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
516         helper that implement a save/restore stack for CheckState
517         values.  This is the only way to change check-state.
518         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
519         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
520         (CheckedExpr.EmitBranchable): New forwarding method.
521         (UnCheckedExpr): Likewise.
522         * statement.cs (Block.ResolveMeta): Use WithCheckState.
523         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
524         (Checked.Resolve, checked.DoEmit): Likewise.
525
526 2006-07-21  Martin Baulig  <martin@ximian.com>
527
528         * generic.cs (TypeManager.InferType): When inferring an array
529         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
530
531 2006-07-21  Martin Baulig  <martin@ximian.com>
532
533         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
534         and allow IList`1 and all its base interfaces.
535
536         * convert.cs (Convert.ImplicitReferenceConversion): Allow
537         converting from an array-type of T to IList<T>.
538
539 2006-07-21  Martin Baulig  <martin@ximian.com>
540
541         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
542
543 2006-07-20  Miguel de Icaza  <miguel@novell.com>
544
545         * anonymous.cs: Cache the resolved anonymous delegate, and return
546         this so that the ResolveTopBlock is only triggered once, not
547         twice.
548
549         Currently we trigger ResolvetopBlock twice due to a first pass of
550         argument check compatibility, and a second pass that does the
551         actual resolution.   
552
553 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
554
555         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
556         modifiers.
557         * rootcontext.cs (Reset): Add helper_classes.
558
559 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
560
561         A fix for #78860
562         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
563         correctly.
564
565 2006-07-13  Miguel de Icaza  <miguel@novell.com>
566
567         * statement.cs (Lock): Handle expressions of type
568         TypeManager.null_type specially.  Fixes #78770
569
570 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
571
572         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
573         to an event.
574
575 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
576
577         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
578         for accessors as well.
579         * ecore.cs (EventExpr): Add AccessorTable.
580
581 2006-07-03  Martin Baulig  <martin@ximian.com>
582
583         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
584         instances of value types.
585
586         * convert.cs (Convert.ExplicitConversion): Correctly handle
587         object->nullable conversions.   
588
589 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
590
591         A fix for #78738
592         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
593         for CS0122 where appropriate.
594         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
595         level attributes.
596         (Filter): Assembly can be null in the case of top level attributes.
597
598 2006-06-28  Raja R Harinath  <rharinath@novell.com>
599
600         Fix #78716
601         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
602         no arguments, return 'false': nothing can be inferred.
603
604 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
605
606         A fix for #78690
607
608         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
609         is done at global level.
610
611 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
612
613         A fix for #77002, Implemented TypeForwarder support.
614
615         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
616         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
617         attribute handling.
618         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
619         * typemanager.cs (): Add type_forwarder_attr_type.
620
621 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
622
623         * report.cs: Add CS0469 warning.
624
625 2006-06-22  Martin Baulig  <martin@ximian.com>
626
627         * class.cs
628         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
629         for interfaces; fixes #78686, which is a modification of #78380
630         with interfaces instead of classes.
631
632 2006-06-21  Martin Baulig  <martin@ximian.com>
633
634         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
635         the `try'-block, so we also report CS0016 etc. there.
636
637 2006-06-21  Martin Baulig  <martin@ximian.com>
638
639         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
640         handle SetAssigned() and SetMemberIsUsed() for generic types;
641         fixes #77545.
642
643 2006-06-21  Martin Baulig  <martin@ximian.com>
644
645         * delegate.cs
646         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
647
648 2006-06-21  Martin Baulig  <martin@ximian.com>
649
650         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
651         also report CS1686 for parameters.
652
653 2006-06-21  Martin Baulig  <martin@ximian.com>
654
655         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
656         instead of an error if the value is not implicitly convertible to
657         the switch types; fixes #77964.
658
659 2006-06-21  Raja R Harinath  <rharinath@novell.com>
660
661         Fix #78673
662         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
663         FieldBuilder is null.
664
665         Fix #78662
666         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
667         'left' and 'right' before error-checking.
668
669 2006-06-19  Martin Baulig  <martin@ximian.com>
670
671         * convert.cs
672         (Convert.ImplicitConversionStandard): Cleanup and correctly
673         implement nullable conversions.
674         (Convert.ImplicitStandardConversionExists): Likewise.
675         (Convert.ExplicitConversion): Likewise.
676
677 2006-06-19  Martin Baulig  <martin@ximian.com>
678
679         * generic.cs
680         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
681         methods; make the ctors protected.
682
683 2006-06-19  Martin Baulig  <martin@ximian.com>
684
685         Fixed #78380; added gtest-273.cs.
686
687         * ecore.cs
688         (Expression.ResolveAsBaseTerminal): Move the constraint checking
689         into ResolveAsTypeTerminal().
690
691         * generic.cs
692         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
693         TypeManager.FindMembers() to check for the default ctor.
694
695 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
696
697         * generic.cs: Fixed NullableInfo accessibility.
698
699 2006-06-16  Martin Baulig  <martin@ximian.com>
700
701         * generic.cs
702         (Constraints.InflatedConstraints.inflate): Correctly inflate
703         generic types; fixes #78400.
704
705 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
706
707         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
708         Fixed bug #78601.
709         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
710         (FieldExpr.DoResolve): likewise.
711         (PropertyExpr.InstanceResolve): likewise.
712         (EventExpr.InstanceResolve): likewise. 
713
714 2006-06-15  Martin Baulig  <martin@ximian.com>
715
716         * statement.cs
717         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
718         argument; always allow a `null' label if true.
719         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
720         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
721         we have a `null' label and mark the new `null_target' label;
722         default to the `default' label.
723         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
724
725 2006-06-15  Martin Baulig  <martin@ximian.com>
726
727         * class.cs (Operator.Define): Allow an implicit/explicit operator
728         to convert to/from a nullable value of the enclosing type.
729
730         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
731         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
732
733         * convert.cs
734         (Convert.ImplicitStandardConversionExists): Add support for lifted
735         implicit/explicit conversions.
736         (Convert.ImplicitConversionStandard): Likewise.
737
738 2006-06-13  Martin Baulig  <martin@ximian.com>
739
740         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
741         type arguments and create a ConstructedType if necessary.  Fixes #78400.
742
743 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
744
745         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
746         attribute applicable tests for attribute argument.
747
748 2006-06-02  Raja R Harinath  <rharinath@novell.com>
749
750         Fix #78079
751         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
752         (Binary.OverloadResolve_PredefinedIntegral): New.
753         (Binary.OverloadResolve_PredefinedFloating): New.
754         (Binary.OverloadResolve_PredefinedString): New.
755         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
756         Follow the standard more closely, and treat numeric promotions in
757         terms of overload resolution.
758         (Binary.CheckShiftArguments): Simplify.
759
760 2006-06-01  Raja R Harinath  <rharinath@novell.com>
761
762         * flowanalysis.cs (MyBitVector): Simplify representation.
763         (MyBitVector.Clone): Avoid allocating BitArray.
764         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
765         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
766         (*): Update.  Change all references to MyBitVector.And and
767         MyBitVector.Or to &= and |=.
768
769 2006-05-31  Raja R Harinath  <rharinath@novell.com>
770
771         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
772         Use bne.un instead of ceq+brfalse.
773
774         Fix cs0208-[23].cs
775         * typemanager.cs (IsUnmanagedType): Disallow generic types and
776         generic parameters.
777
778 2006-05-29  Raja R Harinath  <rharinath@novell.com>
779
780         Fix cs0231-[34].cs.
781         * cs-parser.jay (formal_parameter_list): Extend the pattern below
782         to param arguments too.
783
784 2006-05-26  Miguel de Icaza  <miguel@novell.com>
785
786         * cs-parser.jay: Catch another parsing form for arglist being
787         followed by other arguments.  Fixes #78313.
788
789 2006-05-25  Raja R Harinath  <rharinath@novell.com>
790
791         Fix #78324
792         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
793         also when one of the operands is a null literal.
794         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
795         to improve clarity, and generate slightly better code.
796
797 2006-05-24  Raja R Harinath  <rharinath@novell.com>
798
799         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
800         checking of out parameters to ...
801         (FlowBranchingToplevel.Merge): ... here.
802         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
803         set, propagate the origin upward, and only complain if there was
804         no other error.
805         (FlowBranchingException.AddContinueOrigin): Likewise.
806         (FlowBranchingException.AddReturnOrigin): Likewise.
807         (FlowBranchingException.AddGotoOrigin): Likewise.       
808
809 2006-05-23  Raja R Harinath  <rharinath@novell.com>
810
811         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
812         unreachable, skip it.
813         (FlowBranchingException.Merge): Always propagate jumps, even if
814         the finally block renders subsequent code unreachable.
815
816 2006-05-18  Raja R Harinath  <rharinath@novell.com>
817
818         Fix #77601
819         * statement.cs (Goto.Resolve): Move responsibility for resolving
820         'goto' to FlowBranching.AddGotoOrigin.
821         (Goto.SetResolvedTarget): New.  Callback to set the
822         LabeledStatement that's the target of the goto.
823         (Goto.DoEmit): Use Leave instead of Br when crossing an
824         unwind-protect boundary.
825         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
826         LookupLabel and adjust to new semantics.
827         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
828         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
829         Goto.SetResolvedTarget to update target.
830         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
831         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
832         AddBreakOrigin & co.  Delay propagation until ...
833         (FlowBranchingException.Merge): ... this.
834
835         * statement.cs (Block.Resolve): Always depend on flow-branching to
836         determine unreachability.  Kill workaround that originally emitted
837         only one statement after an "unreachable" label (see infloop in
838         test-515.cs).
839
840         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
841         This is still "wrong", but anything better would probably need a
842         multi-pass algorithm.
843         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
844         usage vector.  Force current usage vector to be reachable, to
845         optimistically signify backward jumps.
846         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
847         detected.
848         (FlowBranchingLabeled.Merge): New.  If no backward jump was
849         detected, return the original salted-away usage vector instead,
850         updated with appropriate changes.  Print unreachable warning if
851         necessary.
852         * statement.cs (Block.Resolve): Don't print unreachable warning on
853         a labeled statement.
854
855 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
856
857         * driver.cs: Pass filename without path to AssemblyBuilder's
858         AddResourceFile. Fixes bug #78407.
859
860 2006-05-17  Raja R Harinath  <rharinath@novell.com>
861
862         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
863         * flowanalysis.cs (FlowBranchingLabeled): ... here.
864         (FlowBranching.MergeChild): Overwrite
865         reachability information from Labeled branchings too.
866
867 2006-05-16  Raja R Harinath  <rharinath@novell.com>
868
869         * statement.cs (Goto.Resolve): Merge jump origins here ...
870         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
871
872         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
873         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
874         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
875         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
876         here, ...
877         * statement.cs (Goto.Resolve): ... not here.
878         (Goto.Emit): Remove CS1632 check.
879
880 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
881
882         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
883         error message.
884
885 2006-05-11  Raja R Harinath  <rharinath@novell.com>
886
887         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
888         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
889         (FlowBranchingException.Label): Likewise.
890
891         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
892         given value.
893         (MyBitVector.Or): Use it to avoid losing information (Count).
894         (FlowBranching.MergeOrigins): Likewise.
895
896         * flowanalysis.cs (UsageVector.IsDirty): Remove.
897         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
898         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
899         (UsageVector.ToString): Simplify.
900         (UsageVector.MergeSiblings): Move here from ...
901         (FlowBranching.Merge): ... here.
902         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
903         not a MyBitVector.
904
905 2006-05-10  Raja R Harinath  <rharinath@novell.com>
906
907         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
908         null bitvector is treated as all-true.
909
910         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
911         (MyBitVector): Rationalize invariants.  'vector != null' implies
912         that we have our own copy of the bitvector.  Otherwise,
913         'InheritsFrom == null' implies all inherited bits are true.
914
915 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
916
917         * statement.cs (LocalInfo): Add IsConstant.
918         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
919         local variable for constants.
920
921 2006-05-09  Raja R Harinath  <rharinath@novell.com>
922
923         * flowanalysis.cs (MyBitVector.Empty): New.
924         (MyBitVector): Don't allow InheritedFrom to be null.
925         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
926         (UsageVector, FlowBranching): Update to changes.
927
928         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
929         recursion.  The 'Parent == null' condition isn't sufficient for
930         anonymous methods.
931         (FlowBranching.AddBreakOrigin): Likewise.
932         (FlowBranching.AddContinueOrigin): Likewise.
933         (FlowBranching.AddReturnOrigin): Likewise.
934         (FlowBranching.StealFinallyClauses): Likewise.
935         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
936         (FlowBranching.CheckOutParameters): Likewise.
937         (FlowBranchingToplevel): Terminate all the above recursions here.
938         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
939         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
940
941         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
942         toplevel block.
943         (FlowBranchingToplevel): New.  Empty for now.
944         (FlowBranching.MergeTopBlock): Update.
945         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
946         branching for the anonymous delegate.
947         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
948
949         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
950         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
951         information at the start of the merge.  Reorganize.
952
953 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
954
955         * class.cs (MethodData.Define): Method cannot implement interface accessor.
956
957 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
958
959         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
960         to newly introduced ctor.
961
962         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
963         message to one place.
964         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
965         global namespace.
966
967 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
968
969         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
970
971         * ecore.cs (Expression.ResolveAsConstant): Updated.
972
973         * statement.cs (ResolveMeta): Updated.
974
975 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
976
977         * cs-parser.jay: __arglist cannot be used in initializer.
978
979 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
980
981         A fix for #77879
982         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
983         private types.
984
985 2006-05-05  Raja R Harinath  <rharinath@novell.com>
986
987         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
988         (LabeledStatement): Add 'name' parameter.
989         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
990         (Block.AddLabel): Update to changes.
991         * cs-parser.jay (labeled_statement): Likewise.
992
993         * flowanalysis.cs (BranchingType.Labeled): New.
994         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
995         (FlowBranchingLabeled): New.  Does nothing for now, but will
996         eventually handle 'goto' flows.
997         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
998         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
999         that's terminated ...
1000         (Block.Resolve): ... here.
1001
1002         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
1003         (UsageVector.MergeFinallyOrigins): Likewise.
1004         (FlowBranching.InTryOrCatch): Likewise.
1005         (FlowBranching.AddFinallyVector): Likewise.
1006         (FlowBranchingException): Update to changes.
1007
1008         Fix #78290
1009         * statement.cs (Return.Resolve): Move error checking to ...
1010         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
1011         (FlowBranchingException): Handle return origins like break and
1012         continue origins.
1013         (FlowBranching.UsageVector.CheckOutParameters): Remove.
1014
1015 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1016
1017         A fix for #76122
1018         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
1019         filter.
1020
1021 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
1022
1023         A fix for #77543
1024         * class.cs (MethodData.Define): Do public accessor check only when method
1025         implements an interface.
1026
1027 2006-05-04  Raja R Harinath  <rharinath@novell.com>
1028
1029         Remove special handling of 'break'
1030         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
1031         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
1032         (UsageVector.Break): Remove.
1033         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
1034         reachability.
1035         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
1036
1037         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
1038         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
1039
1040 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1041
1042         A fix for #75726
1043         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
1044         be the interface member.
1045
1046 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
1047
1048         A fix for #60069
1049         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
1050         for emitting small (int) values.
1051
1052 2006-05-03  Raja R Harinath  <rharinath@novell.com>
1053
1054         Fix #59427
1055         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
1056         control-flow passes through the 'finally' after merging-in all the
1057         control-flows from 'try' and the 'catch' clauses.
1058
1059         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
1060         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
1061         always true at the only non-recursive entry point.
1062         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
1063         FlowBranchingBreakable.
1064         (FlowBranchingLoop): Remove.
1065         * statement.cs (Return.DoResolve): Update to changes.
1066
1067         Fix #76471, #76665
1068         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
1069         (FlowBranching.CreateBranching): Handle it: create a
1070         FlowBranchingContinuable.
1071         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
1072         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
1073         except that it handles the 'continue' command.
1074         (FlowBranching.UsageVector.MergeOrigins): Rename from
1075         MergeBreakOrigins.
1076         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
1077         except that it overrides AddContinueOrigin.
1078         (FlowBranchingException): Override AddContinueOrigin, similar to
1079         AddBreakOrigin.
1080         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
1081         Create a new branching around the embedded statement.
1082         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
1083         control flow after the embedded statement.
1084         (Continue.Resolve): Move all error checking to AddContinueOrigin.
1085
1086         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
1087         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
1088         FlowBranchingBreakable.
1089         (FlowBranchingSwitch): Remove.
1090
1091         Fix test-503.cs
1092         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
1093         error reporting to ...
1094         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
1095         Rename from 'AddBreakVector'.  Add new location argument.  Return
1096         a bool indicating whether the 'break' crosses an unwind-protect.
1097         (FlowBranchingException.AddBreakOrigin): Add.
1098         (FlowBranchingException.Merge): Propagate 'break's to surrounding
1099         flowbranching after updating with the effects of the 'finally'
1100         clause.
1101         (FlowBranchingBreakable): New common base class for
1102         FlowBranchingLoop and FlowBranchingSwitch.
1103
1104         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
1105         embedded statement.
1106         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
1107
1108 2006-05-02  Raja R Harinath  <rharinath@novell.com>
1109
1110         * statement.cs (Do.Resolve): If the loop is infinite, set the
1111         barrier.
1112         (While.Resolve, For.Resolve): Set a barrier after the embedded
1113         statement.  There's no direct control flow that goes from the end
1114         of the embedded statement to the end of the loop.
1115         * flowanalysis.cs (FlowBranching.Infinite): Remove.
1116         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
1117         above ensure that the reachability is correctly computed.
1118
1119         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
1120         (UsageVector.MergeBreakOrigins): If the current path is
1121         unreachable, treat it as if all parameters/locals are initialized.
1122         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
1123         infinite loops before merging-in break origins.
1124
1125         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
1126         (Reachability.Reachable): Split part into ...
1127         (Reachability.Unreachable): ... this.  Simplify.
1128         (Reachability.IsUnreachable): Use 'Unreachable' instead.
1129
1130         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
1131         (Reachability.SetThrowsSometimes): Likewise.
1132         (FlowBranchingBlock.MergeTopBlock): Don't compare against
1133         TriState.Always, use corresponding property.
1134         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
1135         (Block.Resolve): Likewise.  Remove some redundant checks.
1136
1137 2006-05-02  Raja R Harinath  <harinath@gmail.com>
1138
1139         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
1140         (Reachability.Meet): Don't bother checking AlwaysThrows --
1141         barrier is always set.
1142         (FlowBranchingBlock.Merge): Likewise.
1143
1144 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
1145
1146         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
1147         defined, so it's references should also compile only for NET_2_0
1148         (as occurs in mcs version)
1149
1150 2006-05-01  Raja R Harinath  <harinath@gmail.com>
1151
1152         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
1153         checks for unreachable.
1154
1155 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
1156
1157         A fix for #77980
1158         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
1159
1160         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
1161         whether field is really assigned.
1162
1163 2006-04-30  Raja R Harinath  <harinath@gmail.com>
1164
1165         * flowanalysis.cs (Reachability): Make 4-argument constructor
1166         private.
1167         (Reachability.Meet): Rename from 'And'.  Remove static variant.
1168         (Reachability.Always): Rename from the highly misleading
1169         'Reachability.Never'.
1170         (FlowBranching.Merge): Update to changes.  Mark an impossible
1171         situation with a 'throw'.
1172         (*): Update to changes.
1173
1174 2006-04-29  Raja R Harinath  <harinath@gmail.com>
1175
1176         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
1177         Remove 'Undefined'.
1178         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
1179         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
1180         (*): Update to changes.
1181         * statement.cs: Update to changes.
1182
1183 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
1184
1185         A fix for #78049
1186         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
1187
1188 2006-04-28  Raja R Harinath  <harinath@gmail.com>
1189
1190         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
1191         dummy UsageVector.
1192
1193         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
1194         argument to two arguments: an usage-vector and a bool.  Move call
1195         to FlowBranching.Merge () ...
1196         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
1197
1198         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
1199         handling of loop and switch reachability to ...
1200         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
1201
1202 2006-04-27  Raja R Harinath  <harinath@gmail.com>
1203
1204         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
1205         handling to FlowBranchingLoop.InLoop.
1206         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
1207
1208 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
1209
1210         A fix for #78115
1211         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
1212         anonymous method is allowed from AnonymousContainer here.
1213
1214         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
1215
1216 2006-04-24  Raja R Harinath  <rharinath@novell.com>
1217
1218         Fix #78156
1219         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
1220
1221 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
1222
1223         A fix for #49011.
1224         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
1225         (DoubleConstant.Reduce): Ditto.
1226
1227 2006-04-23  Raja R Harinath  <rharinath@novell.com>
1228
1229         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
1230         Remove 'lvalue_right_side' argument.  Move parts to ...
1231         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
1232         (LocalVariable.DoResolveLValue): ... these.
1233
1234 2006-04-21  Raja R Harinath  <rharinath@novell.com>
1235
1236         Fix cs1655.cs
1237         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
1238         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
1239         (LocalVariableReference.DoResolveBase): Use it to implement new
1240         CS1655 check.
1241         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
1242         (Argument.Resolve): Simplify.  Move CS1510 check ...
1243         * ecore.cs (Expression.ResolveLValue): ... here.
1244         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
1245         (PropertyExpr.DoResolveLValue): Likewise.
1246         (FieldExpr.Report_AssignToReadonly): Likewise.
1247         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
1248         LValueMemberAccess or LValueMemberOutAccess on instance depending
1249         on it.
1250         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
1251         DoResolve as appropriate.
1252
1253 2006-04-20  Raja R Harinath  <rharinath@novell.com>
1254
1255         Fix #75800
1256         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
1257         implicit conversions on 'out' and 'ref' arguments.
1258
1259         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
1260         improve clarity.  Remove dead code.
1261
1262         Fix #66031
1263         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
1264         (Catch.Resolve): Resolve VarBlock if it exists.
1265
1266 2006-04-19  Miguel de Icaza  <miguel@novell.com>
1267
1268         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
1269         twice, this was some residual code, the enumerator was emitted
1270         properly in the two branche of if later.
1271
1272         Fixes #78031
1273         
1274         Thanks to Martin for finding the source of the problem
1275         
1276 2006-04-19  Raja R Harinath  <rharinath@novell.com>
1277
1278         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
1279         cast is never an lvalue.
1280         (Cast.DoResolve, Cast.ResolveRest): Combine.
1281         (Argument.Emit): Simplify slightly.  Move 'Expr is
1282         IMemoryLocation' check ...
1283         (Argument.Resolve): ... here.
1284         (Argument.Error_LValueRequired): Remove.  Inline into only user.
1285
1286         Simplifications.  Fix cs0191-2.cs
1287         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
1288         CS1649 and CS1651 to ...
1289         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
1290         the actual selection of the error code and message to a lookup
1291         table.  Add a dummy return value to simplify callsites.
1292         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
1293         readonly fields of other instances of the same type.  Move CS0197
1294         warning from ...
1295         * expression.cs (Argument.Resolve): ... here.  Simplify code.
1296         Ensure that ec.InRefOutArgumentResolving is only set during LValue
1297         resolution of an out or ref argument.  The code simplification
1298         above uses this invariant.
1299
1300 2006-04-18  Raja R Harinath  <rharinath@novell.com>
1301
1302         Possibly fix #77752.  Fix cs1690-[4-7].cs.
1303         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
1304         CheckMarshallByRefAccess.  Drop parameter.
1305         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
1306         warning.
1307         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
1308         InstanceExpression.
1309         * report.cs (AllWarnings): Add CS1690.
1310         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
1311         for ref access too.
1312         (LocalVariableReference.DoResolveBase): Update.
1313
1314 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1315
1316         * class.cs (MethodOrOperator): Moved common parts from method class.
1317         detect obsolete attributes.
1318         (Method.Define): Simplified as it reuses code from base.
1319         (Constructor.ValidAttributeTargets): Fixed issue found during
1320         refactoring.
1321         (Destructor.ValidAttributeTargets): Fixed issue found during
1322         refactoring.
1323         (Operator): Finished refactoring set off by #78020. Operator class is now
1324         ordinary method class.
1325
1326         * anonymous.cs: Updated.
1327
1328 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1329
1330         * class.cs (Constructor.Emit): Don't emit the attributes twice.
1331
1332 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1333
1334         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
1335         detect obsolete attributes.
1336         (Method.CreateEmitContext): Moved to MethodOrOperator.
1337
1338 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1339
1340         A fix for #78048.
1341         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
1342         customized exception to make crash detection easier.
1343         (MethodOrOperator): Started to work on new base class for methods and
1344         operators.
1345         (Method): Derives from MethodOrOperator.
1346         (Constructor.Emit): Emits its own attributes.
1347         (AbstractPropertyEventMethod.Emit): Ditto.
1348         (Operator): Derives from MethodOrOperator, will refactor fully in extra
1349         patch.
1350         (Operator.Emit): It's temporary more tricky than should be.
1351         
1352         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
1353
1354         * report.cs (InternalErrorException): Add ctor with inner exception.
1355
1356 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
1357
1358         A fix for #76744.
1359         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
1360         only not visible.
1361
1362 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
1363
1364         A fix for #77916.
1365         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
1366         array.
1367
1368 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1369
1370         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
1371         attribute is present and Guid not.
1372         (Interface.ApplyAttributeBuilder): Ditto.
1373
1374         * attribute.cs: Add error message.
1375
1376 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1377
1378         A fix for #78020.
1379
1380         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
1381         sources (it's composite) so hold them in extra array as they are used in
1382         Emit phase only. It worked in the previous versions by mistake.
1383         (Attribute.Emit): Emit attribute for more owners when exist.
1384
1385         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
1386         it has now different behaviour.
1387
1388 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
1389
1390         * constant.cs (Constant.IsDefaultInitializer): New method.
1391
1392         * class.cs: Updated.
1393
1394         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
1395         re-initialize default values. It saves KBs almost for every assembly.
1396         Thanks Zoltan for the idea.
1397         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
1398         (ArrayCreation.DoResolve): Resolve only once.
1399         (ArrayCreation.Emit): Emit static initializer only when it is faster.
1400         (ArrayCreation.GetAttributableValue): Cope with optimized values.
1401
1402 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
1403
1404         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
1405         From #77961.
1406
1407 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1408
1409         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
1410         in an embedded statement too.
1411
1412 2006-04-01  Raja R Harinath  <rharinath@novell.com>
1413
1414         Fix #77929
1415         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
1416         testing.
1417
1418         Fix #77958
1419         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
1420
1421         Fix #77962
1422         * report.cs (SymbolRelatedToPreviousError): Drop generic type
1423         arguments before checking whether a type is reflected or not.
1424
1425         Fix #77954
1426         * expression.cs (Invocation.IsApplicable): Ensure a generic method
1427         definition doesn't take part in overload resolution.
1428         (Invocation.IsParamsMethodApplicable): Likewise.
1429         (Invocation.OverloadResolve): When replacing a reflected override
1430         method with its base definition, ensure that type arguments are
1431         applied.
1432
1433 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1434
1435         A fix for #77966.
1436
1437         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
1438         was not specified.
1439
1440         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
1441
1442 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
1443
1444         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
1445         phase.
1446
1447         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
1448         LocalTemporary change.
1449
1450         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
1451         TypeContainer.
1452         (ClassOrStruct.DefineFieldInitializers): Implemented static field
1453         initializers optimization.
1454         (ClassOrStruct.TypeAttr): Moved from modifiers.
1455         (Constructor.CheckBase): Don't crash when static ctor has parameters.
1456         (FieldBase.ResolveInitializer): Resolves initializer.
1457         (FieldBase.HasDefaultInitializer): New property.
1458
1459         * cs-parser.jay: Removed message.
1460
1461         * expression.cs (CompilerGeneratedThis): New specialization.
1462
1463         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
1464
1465 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
1466
1467         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
1468
1469 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1470
1471         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
1472         be now EnumConstants only.
1473
1474 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1475
1476         * attribute.cs, driver.cs: Reset more caches.
1477
1478 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1479
1480         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
1481
1482 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1483
1484         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
1485         for easier reuse. Updated all overrides.
1486         (IntegralConstant): New base class for all integral constants.
1487         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1488         of the constant range, report custom error.
1489         (UIntConstant.Reduce): Fixed uint conversion.
1490
1491         * ecore.cs, literal.cs: Reduce updates.
1492
1493 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1494
1495         A fix for #75813.
1496
1497         * class.cs (Constructor.Define): Removed extra if for default ctors.
1498         A patch from Atsushi Enomoto.
1499
1500 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1501
1502         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1503         GetAttributableValue.
1504
1505         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1506         when required.
1507
1508         * convert.cs (ImplicitConversionRequired): Error message moved to
1509         DoubleLiteral.
1510
1511         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1512         automatic implicit conversion of an output value.
1513         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1514
1515         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1516         conversion.
1517         (TypeOf.GetAttributableValue): Add extra handling for object type.
1518
1519         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1520         special error message.
1521
1522 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1523
1524         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1525         InternalCall.
1526         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1527         compatible with MS runtime.
1528
1529 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1530
1531         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1532         attribute arguments here.
1533
1534         * class.cs (Indexer.Define): The check was moved to attribute class.
1535
1536 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1537
1538         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1539
1540 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1541
1542         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1543
1544         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1545         the blocks too.
1546
1547 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1548
1549         * doc-bootstrap.cs : fix build.
1550
1551 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1552
1553         * expression.cs (StringConcat.Append): Issue a warning when empty string
1554         is going to append.
1555
1556 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1557
1558         * assign.cs (CompoundAssign.ResolveSource): Removed.
1559
1560         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1561         clean up.
1562
1563         * class.cs (TypeContainer.FindMethods): Removed.
1564         (TypeContainer.CheckMemberUsage): Made static.
1565
1566         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1567
1568         * constant.cs (CheckRange): Removed unused type argument.
1569         (CheckUnsigned): Removed unused type argument.
1570
1571         * cs-parser.jay: Updated after MemberAccess clean up.
1572         Uses Length for empty string test.
1573
1574         * cs-tokenizer.cs: Uses Length for empty string test.
1575         (IsCastToken): Made static.
1576         (is_hex): Made static.
1577         (real_type_suffix): Made static.
1578
1579         * decl.cs (SetupCache): Made static.
1580         (OnGenerateDocComment): Removed unused ds argument.
1581
1582         * delegate.cs (VerifyDelegate): Removed unused argument.
1583
1584         * doc.cs: Uses Length for empty string test.
1585
1586         * driver.cs: Uses Length for empty string test.
1587
1588         * enum.cs (IsValidEnumType): Made static
1589
1590         * expression.cs (EnumLiftUp): Removed unused argument.
1591         (ResolveMethodGroup): Ditto.
1592         (BetterConversion): Ditto.
1593         (GetVarargsTypes): Ditto.
1594         (UpdateIndices): Ditto.
1595         (ValidateInitializers): Ditto.
1596         (MemberAccess.ctor): Ditto.
1597         (GetIndexersForType): Ditto.
1598
1599         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1600
1601         * iterators.cs: Updated after MemberAccess clean up.
1602
1603         * location.cs: Uses Length for empty string test.
1604
1605         * namespace.cs: Uses Length for empty string test.
1606
1607          * report.cs (CheckWarningCode): Made static.
1608
1609         * statement.cs (LabeledStatement): Removed unused argument.
1610
1611         * typemanager.cs (FilterNone): Removed.
1612
1613 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1614
1615         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
1616         obsolete.
1617
1618         * class.cs: Updated.
1619
1620 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1621
1622         * cs-parser.jay.cs: __arglist is not allowed for delegates.
1623
1624 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1625
1626         A fix for #77816.
1627
1628         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
1629         host container.
1630         (AnonymousMethod.ImplicitStandardConversionExists): New method.
1631         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
1632         Add more error reporting; Fixed issue with params.
1633
1634         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
1635
1636         * cs-parser.jay: AnonymousMethod requires host container.
1637
1638         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
1639
1640 2006-03-18  Raja R Harinath  <harinath@gmail.com>
1641
1642         * class.cs: Change 'TypeContainer ds' constructor argument to
1643         'DeclSpace parent'.  Some classes were missed below due to
1644         different naming convention.
1645
1646         * class.cs (MemberCore.Parent): Delete.  This makes the
1647         ParentContainer changes below enforceable by the compiler.
1648
1649         Treat pointers to enclosing declaration space as 'DeclSpace', not
1650         'TypeContainer'.
1651         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
1652         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
1653
1654         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
1655         of TypeContainer.
1656         (Block.AddThisVariable): Likewise.
1657         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
1658         (AbstractPropertyEventMethod.Emit): Likewise.
1659         (AbstractPropertyEventMethod.EmitMethod): Likewise.
1660         (GetMethod.Define, SetMethod.Define): Likewise.
1661         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
1662         (DelegateMethod.EmitMethod): Likewise.
1663
1664         Fix regression test-partial-13.cs.
1665         Rationalize use of PartialContainer.  Ensure that the partial
1666         class semantics can be tied to type-correctness, i.e., any
1667         violation will cause a compile error.
1668         * class.cs, const.cs: Access all fields that belong to class
1669         TypeContainer via ParentContainer.  Arguments of EmitContexts and
1670         Resolve()-like functions still use 'Parent'.
1671
1672         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
1673         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
1674         (PropertyMethod.CheckModifiers): Remove unused argument.
1675         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
1676         DeclSpace.
1677
1678 2006-03-28  Raja R Harinath  <rharinath@novell.com>
1679
1680         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
1681
1682 2006-03-17  Raja R Harinath  <harinath@gmail.com>
1683
1684         Make semantics of PartialContainer simpler.
1685         * decl.cs (DeclSpace.IsPartial): Remove.
1686         * class.cs (TypeContainer.IsPartial): Likewise.
1687         (TypeContainer..ctor): Set PartialContainer to point to self.
1688         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
1689         (TypeContainer.FindNestedType): Likewise.
1690         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
1691
1692 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
1693
1694         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
1695
1696 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1697
1698         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
1699         classes.
1700
1701 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1702
1703         * class.cs (Operator.Define): An error for base conversion was not
1704         reported correctly.
1705
1706 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
1707
1708         A fix for #77593, #77574.
1709
1710         * class.cs (MethodCore.CheckBase): Another if for operator.
1711
1712 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1713
1714         A fix for #77822.
1715
1716         * expression.cs (VerifyArgumentsCompat): Reverted to double error
1717         reporting, it's more tricky than I thought.
1718
1719 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
1720
1721         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
1722         were not resolved
1723
1724         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
1725         (DelegateCreation.ImplicitStandardConversionExists): New method for just
1726         conversion test.
1727         
1728         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
1729         not needed.
1730
1731 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
1732
1733         A fix for #77353.
1734
1735         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
1736         (Event.Define): ditto
1737         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
1738
1739         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
1740         Removed redundant code and set NewSlot for Invoke method too.
1741
1742         * parameter.cs (Parameters.ctor): Add custom, type ctor.
1743         (Parameters.MergeGenerated): New method. Use this method when you merge
1744         compiler generated argument with user arguments.
1745
1746 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
1747
1748         * attribute.cs (ResolveAsTypeTerminal): Removed.
1749
1750         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
1751         specialization for predefined types; 30% speed up.
1752         Finally placed obsolete check to right place.
1753         (Expression.ResolveType): Removed.
1754
1755         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
1756         Updated after ResolveType was removed.
1757
1758         * expression.cs (Cast.ctor): Check void cast.
1759         (Binary.ResolveAsTypeTerminal): Is never type.
1760         (Conditional.ResolveAsTypeTerminal): Is never type.
1761
1762         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
1763
1764 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1765
1766         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
1767
1768 2006-03-23  Martin Baulig  <martin@ximian.com>
1769
1770         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
1771         type check if either of the types is an open generic type.
1772
1773 2006-03-23  Martin Baulig  <martin@ximian.com>
1774
1775         * convert.cs
1776         (Convert.ExplicitTypeParameterConversion): New method; implement
1777         explicit type parameter conversions.
1778
1779 2006-03-23  Martin Baulig  <martin@ximian.com>
1780
1781         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
1782         blindly allow all conversions if we do not have any constraints.
1783
1784 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
1785
1786         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
1787         these two separated members to simplify the code.
1788         (Attribute.Resolve): Refactored to use new fields and methods.
1789         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
1790         implemented obsolete attribute checking.
1791         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
1792         implemented obsolete checking again. It look line never ending quest ;-)
1793         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
1794
1795         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
1796
1797         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
1798
1799         *class.cs (Property.Define): Add RegisterProperty call.
1800
1801         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
1802         argument groups (only 2).
1803
1804         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
1805         encoding expression to arguments.
1806         (Expression.ExprClassToResolveFlags): Just turned to property.
1807
1808         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
1809         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
1810         optimized as well as implemented support for zero-length attributes.
1811
1812         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
1813         Add caching of PropertyInfo's.
1814
1815 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1816
1817         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
1818         error multiple times.
1819
1820 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1821
1822         New partial class implementation.
1823         A fix for #77027, #77029, #77403
1824
1825         * attribute.cs (Attributable): Made attributes protected.
1826
1827         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
1828         the replacements of ClassPart and PartialContainer.
1829         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
1830         (TypeContainer.AddInterface): Ditto.
1831         (TypeContainer.AddPartial): The main method for partial classes. It checks
1832         for errors and merges ModFlags and attributes. At the end class is added to
1833         partial_parts list.
1834         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
1835         required here.
1836         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
1837         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
1838         from the rest of partial classes.
1839         (TypeContainer.GetClassBases): Simplified.
1840         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
1841         DefineType.
1842         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
1843         (TypeContainer.HasExplicitLayout): Uses Flags now.
1844         (PartialContainer): Removed.
1845         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
1846         (StaticClass): Was merged with Class.
1847         (Class.GetClassBases): class and static class bases are verified here.
1848         (Class.TypeAttr): Added static attributes when class is static.
1849         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
1850         (MemberBase): In some cases we need to call parent container for partial
1851         class. It should be eliminated but it's not easy now.
1852
1853         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
1854
1855         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
1856         partial classed to accumulate class comments.
1857         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
1858
1859         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
1860
1861         * driver.cs (MainDriver): Tree.GetDecl was removed.
1862
1863         * modifiers.cs (Modifiers): Add partial modifier.
1864
1865         * tree.cs (Tree.decl): Removed.
1866         (RootTypes): Started to use this class more often for root types
1867         specializations.
1868
1869 2006-03-23  Raja R Harinath  <rharinath@novell.com>
1870
1871         * generic.cs (TypeParameter.UpdateConstraints): Update
1872         'constraints' if null.
1873
1874 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1875
1876         A fix for #77615
1877
1878         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
1879         external interface does not have an attribute.
1880
1881 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1882
1883         Another prerequisites for new partial classs implementation.
1884         
1885         * attribute.cs (Attribute.Equal): Implemented.
1886         (Attribute.Emit): Changed as attributes can be applied more than twice.
1887         (Attributes.Emit): Check for duplicate attributes here.
1888
1889         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
1890         as a parameter, clean-up.
1891
1892 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1893
1894         A fix for #77485
1895
1896         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
1897         contains obsolete attribute check which can in some cases look for base
1898         type of current class which is not initialized yet.
1899         (TypeContainer.BaseType): Replacement of ptype.
1900
1901         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
1902
1903 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1904
1905         First of prerequisites for new partial classs implemention.
1906         
1907         * attribute.cs (Attributable): Extended by ResolveContext;
1908         Attributes finally have correct context for resolving in all cases.
1909         (AttachTo): Attribute owner is assigned here.
1910
1911         * codegen.cs (IResolveContext): Introduce new interface to hold
1912         all information needed in resolving phase.
1913         (EmitContext): Implements IResolveContext; more clean-up needed here.
1914         
1915         * decl.cs (MemberCore): Implemented IResolveContext.
1916
1917         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
1918         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
1919         parameter.cs, statement.cs, tree.cs, typemanager.cs:
1920         Refactored to use new IResolveContext instead of EmitContext; cleanup
1921
1922 2006-03-22  Raja R Harinath  <rharinath@novell.com>
1923
1924         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
1925         mcs to keep code differences small.
1926         * attribute.cs (Attribute.GetParameterDefaultValue): New.
1927         * typemanager.cs (parameter_default_value_attribute_type): New.
1928         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
1929         CS1908 check.
1930
1931 2006-03-22  Martin Baulig  <martin@ximian.com>
1932
1933         * generic.cs
1934         (Nullable.NullableLiteral): Derive from `NullLiteral'.
1935
1936         * convert.cs
1937         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
1938         instead of the normal `NullLiteral'.
1939
1940 2006-03-21  Martin Baulig  <martin@ximian.com>
1941
1942         Fix #77583.
1943         * generic.cs (TypeManager.InferType): If `pt' is a generic
1944         parameter, don't check whether `pt == at'.
1945
1946 2006-03-20  Raja R Harinath  <rharinath@novell.com>
1947
1948         Fix #77852
1949         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
1950         (TypeParameter.Resolve): Update to change.
1951         (ConstraintChecker.CheckConstraints): Resolve type-argument
1952         constraints before use.
1953
1954 2006-03-16  Martin Baulig  <martin@ximian.com>
1955
1956         * generic.cs
1957         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
1958         and don't have any instance constructors, also lookup in the base class.
1959         (TypeManager.IsNullableValueType): New public method.
1960
1961         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
1962         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
1963         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
1964
1965         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
1966         instead of just TypeManager.IsNullableType() to determine whether
1967         a lifted operator exists.
1968         (UnaryMutator.DoResolve): Likewise.
1969         (Conditional.DoResolve): Likewise.
1970         (Binary.DoResolve): A lifted operator only exists if both operands
1971         are valuetypes and at least one of them is a nullable type.
1972
1973 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
1974
1975         * iterator.cs : yield break is allowed in try statement which has
1976           catch clauses. Fixed bug #77767.
1977
1978 2006-03-12  Martin Baulig  <martin@ximian.com>
1979
1980         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
1981         private IsSignatureEqual() to compare types; see the comment in
1982         that method; fixes #77674.
1983
1984 2006-03-10  Raja R Harinath  <rharinath@novell.com>
1985
1986         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
1987         (Expression.ResolveAsTypeTerminal): Likewise.
1988         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
1989         * expression.cs, generic.cs, iterators.cs: Likewise.
1990         * parameter.cs, statement.cs, typemanager.cs: Likewise.
1991
1992 2006-03-09  Martin Baulig  <martin@ximian.com>
1993
1994         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
1995         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
1996
1997 2006-03-09  Martin Baulig  <martin@ximian.com>
1998
1999         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
2000         `prepared' flag is set.
2001
2002         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
2003         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
2004         issues; see gtest-254.cs.
2005
2006 2006-03-07  Martin Baulig  <martin@ximian.com>
2007
2008         * generic.cs (TypeManager.InferType): Allow infering
2009         `IEnumerable<T>' with an array of T; see gtest-251.cs.
2010
2011 2006-03-06  Martin Baulig  <martin@ximian.com>
2012
2013         * generic.cs
2014         (TypeManager.InferType): Fix gtest-250.cs.
2015
2016         * typemanager.cs
2017         (TypeManager.IsSubclassOf): Also check the base class.
2018
2019         * expression.cs
2020         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
2021         fixes gtest-249.cs.
2022
2023 2006-03-01  Raja R Harinath  <rharinath@novell.com>
2024
2025         Fix #77679.
2026         * expression.cs (ParameterReference.DoResolveBase): Change return
2027         type to bool.
2028         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
2029         Update.
2030
2031         Fix #77628.
2032         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
2033
2034         Fix #77642.
2035         * typemanager.cs (GetFullNameSignature): Don't nullref on
2036         protected accessors.
2037
2038 2006-02-16  Martin Baulig  <martin@ximian.com>
2039
2040         * generic.cs
2041         (TypeManager.GetGenericFieldDefinition): New public method; use it
2042         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
2043
2044 2006-02-14  Martin Baulig  <martin@ximian.com>
2045
2046         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
2047
2048 2006-02-14  Martin Baulig  <martin@ximian.com>
2049
2050         * generic.cs
2051         (TypeManager.DropGenericMethodArguments): New public method; don't
2052         use GetGenericMethodDefinition() on something which is not a
2053         generic method.
2054
2055 2006-02-14  Martin Baulig  <martin@ximian.com>
2056
2057         * generic.cs
2058         (ConstraintChecker.CheckConstraints): If a type parameter has the
2059         `struct' constraint, the type must be a non-nullable valuetype.
2060
2061 2006-02-10  Martin Baulig  <martin@ximian.com>
2062
2063         * typemanager.cs
2064         (TypeManager.IsOverride): Make this work for instantiated methods
2065         in a generic class; fixes #77509.
2066         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
2067         rather than calling it directly; fixes #77488.  
2068
2069 2006-02-08  Martin Baulig  <martin@ximian.com>
2070
2071         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
2072         reporting into CheckConstraint() so we can use the correctly
2073         instantiated type.
2074
2075 2006-02-08  Martin Baulig  <martin@ximian.com>
2076
2077         * expression.cs (BaseAccess): Add support for generic methods.
2078
2079         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
2080         the new MethodGroupExpr.
2081
2082 2006-02-07  Martin Baulig  <martin@ximian.com>
2083
2084         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
2085         also reference types; fixes #77483.
2086
2087 2006-02-07  Martin Baulig  <martin@ximian.com>
2088
2089         * generic.cs
2090         (TypeManager.IsGenericMethod): We now return whether something is
2091         an instantiated generic method (and not a generic method def).
2092         (TypeManager.IsGenericMethodDefinition): New public method.
2093
2094         * typemanager.cs
2095         (TypeManager.CSharpSignature): Only include type arguments for
2096         "real" generic methods, not for any instantiated method.
2097         (TypeManager.GetMethodName): Likewise, but also allow generic
2098         method definitions here.
2099
2100 2006-02-06  Miguel de Icaza  <miguel@novell.com>
2101
2102         * codegen.cs (EmitScopeInitFromBlock): check here the
2103         capture_context, there is no need to make two calls to the
2104         EmitContext. 
2105
2106         * anonymous.cs: Add some debugging messages that might help me
2107         track other instances of this problem in the future (the
2108         regression of test 467).
2109
2110         * cs-parser.jay: track the variable block, as we need to initalize
2111         any captured variables declared in this block for the "catch"
2112         portion of the "Try" statement.
2113
2114         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
2115         scope initialization for captured variables. 
2116
2117         Also, move the emit for the variables after the block location has
2118         been marked.
2119
2120 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
2121
2122        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
2123         
2124 2006-02-06  Martin Baulig  <martin@ximian.com>
2125
2126         * class.cs (TypeContainer.DefineType): If we're a struct, pass
2127         `TypeManager.value_type' as parent type to
2128         ModuleBuilder.DefineType().  Fixes #77358.      
2129
2130 2006-02-02  Miguel de Icaza  <miguel@novell.com>
2131
2132         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
2133         commit yesterday, the initialization for the roots is necessary.
2134         What is not necessary is the scope activation.
2135
2136 2006-02-02  Raja R Harinath  <rharinath@novell.com>
2137
2138         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
2139         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
2140         CS0206 checks.
2141         (Argument.Resolve): Remove CS0206 checks.
2142
2143 2006-02-01  Miguel de Icaza  <miguel@novell.com>
2144
2145         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
2146         scopes for all the roots, the scopes will now be emitted when the
2147         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
2148
2149         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
2150         code.  This reduces a lot of existing cruft.
2151         
2152         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
2153         that the ScopeInfo is generated as we enter the scope, not at the
2154         time of use, which is what we used to do before.
2155
2156         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
2157         every time a Block is about to be emitted if we have a
2158         CaptureContext. 
2159
2160 2006-02-01  Raja R Harinath  <rharinath@novell.com>
2161
2162         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
2163         attribute for mscorlib too.
2164
2165         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
2166         (Reset): Update.
2167         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
2168
2169         * typemanager.cs (cons_param_array_attribute): Make private.
2170         (Reset): Set it to null.
2171         (InitCoreHelpers): Don't initialize it.
2172         (ConsParamArrayAttribute): New.  Initialize it as needed.
2173         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
2174
2175 2006-01-31  Miguel de Icaza  <miguel@novell.com>
2176
2177         * expression.cs: There might be errors reported during the
2178         selection of applicable methods.  If there are errors, do not
2179         continue execution as it will lead the compiler to crash.
2180
2181 2006-01-30  Miguel de Icaza  <miguel@novell.com>
2182
2183         * expression.cs: Member access is not allowed on anonymous
2184         methods.  Fixes #77402.
2185
2186 2006-01-30  Raja R Harinath  <rharinath@novell.com>
2187
2188         Fix #77401
2189         * cs-parser.jay (VariableDeclaration): Don't set
2190         current_array_type to null.
2191         (field_declaration, event_declaration, declaration_statement):
2192         Set it to null here.
2193
2194 2006-01-29  Raja R Harinath  <harinath@gmail.com>
2195
2196         Fix part of #77397
2197         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
2198
2199 2006-01-28  Raja R Harinath  <harinath@gmail.com>
2200
2201         * typemanager.cs (GenericParameterPosition): New.
2202         * doc.cs: Use it.
2203
2204 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
2205
2206         * doc.cs : To process "include" elements, first we should create
2207           another list than XmlNodeList, because it could result in node
2208           removal, which could result in that the XmlNodeList gives up
2209           yielding next node.
2210
2211 2006-01-25  Miguel de Icaza  <miguel@novell.com>
2212
2213         * expression.cs: Introduce an error report that we were not
2214         catching before.   Gonzalo ran into it.
2215
2216 2006-01-23  Miguel de Icaza  <miguel@novell.com>
2217
2218         A fix for bug: #76957
2219         
2220         * iterators.cs (MoveNextMethod.CreateMethodHost): call
2221         ComputeMethodHost before creating the method, this is a new
2222         requirement. 
2223
2224         * anonymous.cs (AnonymousContainer): Now we track all the scopes
2225         that this method references (RegisterScope).  The actual scope
2226         where the method is hosted is computed with the ComputeMethodHost
2227         before we create the method.
2228
2229         Moved the Deepest routine here.
2230
2231         (AnonymousContainer.ComputeMethodHost): New routine used to
2232         compute the proper ScopeInfo that will host the anonymous method.
2233
2234         (ScopeInfo): Deal with multiple roots.  The problem was that we
2235         did not have a unique root where all ScopeInfos could be hanged
2236         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
2237         of roots.  
2238
2239         Remove AdjustMethodScope which is now computed at the end.  Remove
2240         LinkScope which did a partial link, instead link all ScopeInfos
2241         before code generation from the new "LinkScopes" routine. 
2242
2243         Simplify all the Add* routines as they no longer need to maintain
2244         the tree, they just need to record that they are using variables
2245         from a ScopeInfo.
2246
2247         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
2248         routines to produce the forest of ScopeInfo trees.
2249
2250         * class.cs (TypeContainer.AppendMethod): This is just like
2251         AddMethod, but ensures that an interface implementation method
2252         (IEnumerable.XXX) is not inserted at the beginning of the queue of
2253         methods, but at the end.
2254
2255         We use this functionality to ensure that the generated MoveNext
2256         method in the iterator class is resolved/emitted before the
2257         enumerator methods created.   
2258
2259         This is required because the MoveNext method computes the right
2260         ScopeInfo for the method.  And the other methods will eventually
2261         need to resolve and fetch information computed from the anonymous
2262         method. 
2263
2264         
2265 2006-01-23  Raja R Harinath  <rharinath@novell.com>
2266
2267         Improve implementation of section 14.4.2.2 (Better function member).
2268         * expression.cs (Invocation.MoreSpecific): Compare all type
2269         arguments before deciding if one type is more specific than
2270         another.  Handle array types too.  Return the more specific type.
2271         (Invocation.BetterFunction): Add more tie-breaking rules from
2272         section 14.4.2.2.  Perform "more specific" check after
2273         other tie-breaking rules.  Compare all parameter types before
2274         choosing the "more specific" method.
2275
2276 2006-01-21  Raja R Harinath  <harinath@gmail.com>
2277             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
2278
2279         Fix rest of #76995.
2280         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
2281         the 'aliases' hash.
2282         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
2283         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
2284
2285 2006-01-18  Martin Baulig  <martin@ximian.com>
2286
2287         * class.cs (TypeContainer.AddToMemberContainer): Use
2288         `symbol.MemberName.MethodName' instead of just `symbol.Name';
2289         fixes #77124.
2290
2291 2006-01-18  Martin Baulig  <martin@ximian.com>
2292
2293         Fix #76417: a generic class may now have methods which may unify
2294         for some type parameter substitutions.
2295
2296         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
2297         for methods which may unify anymore.
2298
2299         * expression.cs (Invocation.MoreSpecific): New private static
2300         method; checks whether one method is more specific than another
2301         according to 14.4.2.2 of the spec.
2302         (Invocation.BetterFunction): Implement the tie-breaking rules from
2303         14.4.2.2 of the spec: if two methods unify for some type parameter
2304         substitution, we need to pick the more specific one.
2305
2306 2006-01-18  Raja R Harinath  <rharinath@novell.com>
2307
2308         Fix #76656, cs0231-2.cs.
2309         * cs-parser.jay (formal_parameter_list): Make error case catch
2310         more issues.
2311         (parenthesized_expression_0): Add CS1026 check.
2312         (invocation_expression): Remove unused { $$ = lexer.Location }.
2313
2314 2006-01-17  Raja R Harinath  <rharinath@novell.com>
2315
2316         Fix #76824.
2317         * cs-parser.jay (statement_expression): Don't list out the
2318         individual statement-expressions.  Convert syntax error into
2319         CS0201 check.
2320
2321 2006-01-16  Raja R Harinath  <rharinath@novell.com>
2322
2323         Fix #76874.
2324         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
2325         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
2326         CheckIntermediateModification.
2327         (FieldExpr.DoResolve): Add new two-argument version that
2328         allows us to resolve the InstanceExpression as an lvalue.
2329         The one-argument variant is now just a wrapper.
2330         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
2331         Resolve the lhs as an lvalue if the it has a value type.
2332         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
2333         from Assign.DoResolve.
2334         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
2335         resolved as an lvalue.
2336         (PropertyExpr.DoResolve): Update.
2337         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
2338         has a value type.  Move CS1612 check here from
2339         CheckIntermediateModification.
2340         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
2341         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
2342         'right_side' of a ResolveLValue on an 'out' argument.
2343         (EmptyExpression.LValueMemberAccess): New.  Used as the
2344         'right_side' of a propagated ResolveLValue on a value type.
2345         (LocalVariableReference.DoResolveBase): Recognize
2346         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
2347         Add CS1654 check.
2348         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
2349         EmptyExpression.Null.
2350
2351 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
2352
2353         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
2354           Type.IsGenericParameter(). Fixed bug #77183.
2355         * doc.cs : it is now identical to doc.cs in mcs.
2356
2357 2006-01-16  Martin Baulig  <martin@ximian.com>
2358
2359         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
2360
2361 2006-01-16  Martin Baulig  <martin@ximian.com>
2362
2363         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
2364         ctors; fixes #77250.
2365
2366 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2367
2368         This fixes the problem where we used ldfld instead of ldflda to
2369         load the "THIS" pointer on captured parameters, when THIS is a
2370         value type.  See bug #77205.
2371         
2372         * iterators.cs (CapturedThisReference.Emit): Pass false to
2373         EmitThis (we do not need the address).
2374
2375         * codegen.cs (EmitThis): it needs to know whether we need the
2376         address of `this' or not.  This is used by value types.  
2377
2378         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
2379         every other call passes false.
2380
2381 2006-01-12  Raja R Harinath  <rharinath@novell.com>
2382
2383         Fix #77221.
2384         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
2385         GetOverride.
2386         * expression.cs (Invocation.OverloadResolve): Update.
2387         (Invocation.DoResolve): Avoid double resolution of invocation.
2388
2389 2006-01-11  Raja R Harinath  <rharinath@novell.com>
2390
2391         Fix #77180.
2392         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
2393         unary negation of floating point types as 0-expr; negation cannot
2394         overflow in floating point types.
2395
2396         Fix #77204.
2397         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
2398         on operands of 'void' type.
2399
2400         Fix #77200.
2401         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
2402         and ExclusiveOr for boolean constants too.
2403
2404 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
2405
2406         * expression.cs: Fix Console.WriteLine ((this = x).foo);
2407
2408 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2409
2410         * cs-tokenizer.cs (Position): New class used to save and restore
2411         the position state in the tokenizer.  Before this patch the save
2412         and restore was not complete enough so the line and columns would
2413         start to drift and the debugger and stack traces will get the
2414         wrong data.
2415
2416 2006-01-10  Martin Baulig  <martin@ximian.com>
2417
2418         * generic.cs
2419         (TypeParameter.InflateConstraints): New public method.
2420
2421         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
2422         constraints; fixes #77042.
2423
2424 2006-01-10  Martin Baulig  <martin@ximian.com>
2425
2426         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
2427         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
2428         #77061. 
2429
2430 2006-01-09  Raja R Harinath  <rharinath@novell.com>
2431
2432         Fix #75636.
2433         * expression.cs (Invocation.OverloadResolve): Replace reflected
2434         override methods with their base virtual methods, rather than
2435         skipping over them.
2436         * typemanager.cs (TypeManager.GetOverride): New.
2437
2438 2005-12-21  Miguel de Icaza  <miguel@novell.com>
2439
2440         * driver.cs: Report the case of no source files and no -out:
2441         argument provided.
2442
2443 2005-12-20  Raja R Harinath  <rharinath@novell.com>
2444
2445         Fix #77035.
2446         * expression.cs (ComposedCast.GetSignatureForError): Define.
2447
2448 2006-01-05  Jb Evain  <jbevain@gmail.com>
2449
2450         * class.cs (Property.Define, Indexer.Define): do not tag the
2451         properties as SpecialName | RTSpecialName.
2452
2453 2006-01-04  Miguel de Icaza  <miguel@novell.com>
2454
2455         * class.cs (MethodCore.IsDuplicateImplementation): This method was
2456         doing a low-level comparission of parameter types.  It was lacking
2457         a check for __argslist. 
2458
2459 2005-12-30  Miguel de Icaza  <miguel@novell.com>
2460
2461         * expression.cs (ParameterReference.DoResolveBase): Allow
2462         reference parameters if they are local to this block. 
2463
2464         This allows the ref and out parameters of a delegate to be used in
2465         an anonymous method, for example:
2466
2467         delegate void set (out int x);
2468
2469         set s = delegate (out int x){
2470                 x = 0;
2471         };
2472
2473         This is used by functionality introduced late in the C# language.
2474         
2475         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
2476         method that take ref and out parameters. 
2477
2478         Fixes #77119 which was a late change in the spec.
2479
2480 2005-12-23  Miguel de Icaza  <miguel@novell.com>
2481
2482         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
2483         parent if its the same scope.  Fixes #77060.
2484
2485 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
2486
2487         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2488
2489 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2490
2491         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2492         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2493         that doesn't contain the full public key. This is a update of the
2494         friend assemblies in .Net 2.0 release.
2495         
2496 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2497
2498         Fix #76995
2499
2500         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2501         ListDictionary, to contain the ExternAliasEntry entries (in
2502         addition to the NamespaceEntry.aliases hashtable). This field is
2503         shared between the original entry and its doppelganger (bodyless 
2504         copy of it).
2505         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2506         extern_aliases field.
2507         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2508         lookup in extern_aliases.
2509
2510 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2511
2512         Fix #77006.
2513         * class.cs (TypeContainer.Mark_HasEquals): New.
2514         (TypeContainer.Mark_HasGetHashCode): New.
2515         (ClassPart): Override them.
2516         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2517
2518         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2519         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2520         DeclSpace.
2521
2522         Fix #77008.
2523         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2524         'parent' argument to the base constructor.
2525
2526         Remove all mention of TypeContainer from decl.cs.
2527         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2528         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2529         (DeclSpace.DeclSpace): Likewise.
2530         (DeclSpace.DefineMembers): Remove unused argument.
2531         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2532         debugging check -- we don't care if the debug code throws an
2533         InvalidCastException instead of an InternalErrorException.
2534         * class.cs (TypeContainer.DefineMembers): Update to changes.
2535         (TypeContainer.DoDefineMembers): Likewise.
2536         (TypeContainer.GetMethods): Likewise.
2537         (PropertyMember.Define): Likewise.
2538         (MemberBase.Parent): New property that forwards to
2539         MemberCore.Parent, but ensures that we get a TypeContainer.
2540         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2541         (RootContext.PopulateTypes): Likewise.  Remove special case code
2542         for !RootContext.StdLib: DefineMembers is idempotent.
2543
2544 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2545
2546         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2547
2548 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2549
2550         * doc.cs : The search for referenced namespace was insufficient to
2551           get global one as it used to do. Fixed bug #76965.
2552
2553 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2554
2555         * doc.cs : check name in cref in the last phase that whether it is
2556           namespace or not.
2557
2558 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2559
2560         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2561           Mono.C5.
2562
2563 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2564
2565         * doc.cs : so it turned out that we cannot skip override check for 
2566           interface members. Fixed bug #76954.
2567
2568 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2569
2570         * cs-tokenizer.cs : fixed bug #75984:
2571           - #warning and #error should not be handled when the source line
2572             is disabled.
2573           - #line is not checked strictly when the source line is disabled.
2574           - #define and #undef is on the other hand checked strictly at any
2575             state.
2576
2577 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2578
2579         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2580           CS1027 report.
2581
2582 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2583
2584         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2585
2586         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2587         nested types.
2588
2589 2005-12-14  Martin Baulig  <martin@ximian.com>
2590
2591         * typemanager.cs (TypeManager.GetFullName): Make this public;
2592         `Type.Fullname' now never returns null.
2593
2594         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2595         explicit interface implementations; we're now using the same
2596         naming convention than csc does.
2597
2598 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2599
2600         * convert.cs (ExplicitConversionCore): Check the return value from
2601         ExplicitConversionCore which can return null on failure.  Fixes #76914
2602
2603 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2604
2605         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2606         instead of IsGenericInstance.
2607         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2608         code that's now covered by the more general test.
2609         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2610
2611         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2612         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2613         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2614         * generic.cs, report.cs, typemanager.cs: Likewise.
2615
2616 2005-12-08  Martin Baulig  <martin@ximian.com>
2617
2618         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
2619
2620         * typemanager.cs (TypeManager.CSharpSignature): Include type
2621         arguments in the signature of a generic method.
2622
2623 2005-12-07  Martin Baulig  <martin@ximian.com>
2624
2625         Add support for custom attributes on type parameters.
2626
2627         * cs-parser.jay (type_arguments): Added `opt_attributes'.
2628
2629         * generic.cs (TypeParameterName): New public class; we use this
2630         instead of a `string' to store the name of a type parameter, so we
2631         can also have `Attributes'.
2632         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
2633         array instead of a `string[]' array.
2634         (TypeParameter.ctor): We now also take an `Attributes' argument.
2635         (TypeParameter.EmitAttributes): New public method; emit our
2636         `OptAttributes' here.
2637         (GenericMethod.EmitAttributes): New public method; emit the custom
2638         attributes on all our type parameters.
2639
2640         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
2641         our type parameters.
2642         (MethodData.Define): If we're a generic method, call
2643         EmitAttributes() on it.
2644
2645 2005-12-07  Martin Baulig  <martin@ximian.com>
2646
2647         * generic.cs
2648         (ConstraintChecker): New public abstract class; move the
2649         constraint checking here from `ConstructedType' and also do
2650         constraint checking for generic methods here.
2651
2652         * expression.cs (Invocation.OverloadResolve): Use
2653         ConstraintChecker.CheckConstraints() if we resolved to a generic
2654         method.  Fix #76806.
2655
2656 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2657
2658         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
2659
2660         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
2661         event initializers.
2662         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
2663         (FieldBase.Initializer): Initializer is now optional.
2664         (EventField.Define): Only event field can have initializer.
2665
2666         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
2667
2668         * const.cs (Const): Reuse initializer.
2669
2670         * cs-parser.jay: Updated after FieldBase changes.
2671         Added current_array_type to simplify array initializers.
2672
2673         * ecore.cs (NullCast.IsDefaultValue): Implemented.
2674
2675         * expression.cs, iterators.cs: Updated.
2676
2677         * namespace.cs (NamespaceEntry): Made UsingFound private.
2678
2679 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2680
2681         * parameterCollection.cs: Obsolete, removed.
2682         * parser.cs: Obsolete, removed.
2683
2684 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2685
2686         Fix #76849.
2687         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
2688
2689         * enum.cs (Enum.Define): Set obsolete context here.
2690
2691 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2692
2693         * doc.cs :
2694           - FindDocumentedMember() now expects 1) paramList as null
2695             when "we don't have to check the number of parameters" and
2696             2) Type.EmptyTypes when "there is no arguments".
2697           - Introduced FoundMember struct to hold the exact type which was
2698             used to find the documented member (the above change broke
2699             test-xml-044; it might be better just to use DeclaringType than
2700             what MS does, like this change does, but it depends on usage.)
2701
2702 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2703
2704         * doc.cs : documented member might be from DeclaringType for nested
2705           types. Fixed bug #76782.
2706
2707 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
2708
2709         * anonymous.cs: Have the param code handle leaving copies on the
2710         stack etc. Allows anonymous params to take part in the assignment
2711         code (++, +=, etc). Fixes bug #76550
2712
2713         * expression.cs: Handle the prepare_for_load/leave_copy by passing
2714         it down to the anon code.
2715
2716         * iterators.cs: Use dummy var here
2717
2718         * codegen.cs: Handle new vars
2719
2720 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2721
2722         Fix #76849.
2723         * class.cs (MethodData.Define): Set proper Obsolete context.
2724
2725         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
2726         obsolete context.
2727         (FieldExpr.DoResolve): Ditto.
2728
2729 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2730
2731         Fix #76849.
2732         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
2733         parent is not obsolete.
2734
2735 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
2736
2737         * doc.cs : (FindDocumentedMember) find parameterless members first
2738           and get CS0419 in the early stage. Fixed first case of bug #76727.
2739
2740 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
2741
2742         Fix #76859.
2743         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
2744         no error was reported.
2745
2746         *expression.cs (Binary.DoResolve): left can be null.
2747
2748 2005-12-06  Raja R Harinath  <rharinath@novell.com>
2749
2750         * class.cs (MethodCore.CheckGenericOverride): Delete unused
2751         abstract method and all overrides.
2752         * support.cs (ParameterData.GenericConstraints): Delete.
2753         (ReflectionParameters.type_params): Delete.
2754         (ReflectionParameters.ReflectionParameters): Make private.
2755         (ReflectionParameters.GetConstaints): New factory method.
2756         * generic.cs (TypeParameterDefineType): Use it.
2757         (TypeManager.GetTypeParameterConstraints): Likewise.
2758
2759 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
2760
2761         Fix #76783.
2762         * class.cs (MethodData.Emit): Parameters should be labeled first.
2763
2764 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
2765
2766         Fix #76761.
2767         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
2768
2769 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
2770
2771         * attribute.cs (AreParametersCompliant): Moved to Parameter.
2772
2773         * class.cs (MethodCore): Parameter clean up.
2774         (IMethodData): Added ParameterInfo.
2775         (MethodData): Parameter clean up.
2776         (Indexer.Define): Parameter clean up.
2777
2778         * anonymous.cs,
2779         * codegen.cs,
2780         * cs-parser.jay,
2781         * decl.cs,
2782         * doc.cs,
2783         * ecore.cs,
2784         * flowanalysis.cs,
2785         * iterators.cs,
2786         * pending.cs,
2787         * statement.cs,
2788         * typemanager.cs: Parameter clean up.
2789
2790         * delegate.cs (Define): Get rid of duplicated code.
2791
2792         * expression.cs (ParameterReference): Removed useless parameters
2793         and simplified.
2794         (Invocation): Ditto.
2795
2796         * parameter.cs (ParamsParameter): New class, params specialization.
2797         (ArglistParameter): Attemp to separate arglist.
2798         (Parameter): Refactored to be reusable and faster.
2799         (Parameter.Modifier): Made understandable.
2800         (Parameters): Changed to be used as a class for `this' assembly
2801         parameters. Refactored to use new specialized classes.
2802
2803         * support.cs (ParameterData): Added Types property.
2804         (InternalParameters): Deleted.
2805
2806 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2807
2808         * doc.cs : the previous patch does not actually fix the bug.
2809           PropertyInfo override check is now implemented and really fixed it.
2810         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
2811
2812 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2813
2814         * doc.cs : apply "override filter" also to properties.
2815           Fixed bug #76730.
2816
2817 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2818
2819         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
2820           no need to check overrides. For classes, omit those results from 
2821           interfaces since they must exist in the class. Fixed bug #76726.
2822
2823 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2824
2825         * typemanager.cs : (GetFullNameSignature) differentiate indexers
2826           with different parameters. Fixed the second problem in #76685.
2827
2828 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2829
2830         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
2831           get expected 'protected' access in CheckValidFamilyAccess()).
2832           Fixed bug #76692.
2833
2834 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2835
2836         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
2837           Fixed bug #76705.  CS1569 was incorrectly commented out.
2838
2839 2005-11-23  Martin Baulig  <martin@ximian.com>
2840
2841         * generic.cs (Constraints.Define): Removed.
2842         (TypeParameter.DefineConstraints): Removed.
2843         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
2844         on the GenericTypeParameterBuilder here.
2845
2846 2005-11-23  Martin Baulig  <martin@ximian.com>
2847
2848         * typemanager.cs (TypeManager.GetProperty): Make this public.
2849
2850         * generic.cs (Nullable.NullableInfo.ctor): Use
2851         TypeManager.GetProperty() rather than using reflection directly.
2852
2853 2005-11-17  Martin Baulig  <martin@ximian.com>
2854
2855         * expression.cs (Indexers.GetIndexersForType): Added support for
2856         generic parameters; fixes #76587.
2857
2858 2005-11-17  Martin Baulig  <martin@ximian.com>
2859
2860         * anonymous.cs
2861         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
2862         inherit the scope from our parent.  Fixes #76653.
2863
2864 2005-11-15  Martin Baulig  <martin@ximian.com>
2865
2866         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
2867         instead of `ScopeTypeBuilder' to refer to the "current" type.
2868         (AnonymousMethod.CreateScopeType): Correctly create the helper
2869         class if we're inside a generic type definition.
2870
2871 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2872
2873         * doc.cs : use Invocation.IsOverride() to do real override check.
2874         * expression.cs : made Invocation.IsOverride() internal.
2875
2876 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2877
2878         * doc.cs : use TypeManager.FindMembers() instead of (possible)
2879           TypeBuilder.FindMembers() and filter overriden base members out.
2880           Fixed bug #76990.
2881
2882 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2883
2884         * doc.cs : ref/out parameters are represented as '@' (instead of
2885           '&' in type FullName). Fixed bug #76630 (additionally crefs).
2886
2887 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2888
2889         * doc.cs : when there was no '.' in cref to methods in doc comment,
2890           then parameters were missing in the output. Fixed bug #76691.
2891
2892 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2893
2894         * driver.cs : don't output docs when there is an error.
2895           Fixed bug #76693.
2896
2897 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2898
2899         * doc.cs :
2900           Now it should detect indexers. Fixed primary concern in bug #76685.
2901           Fixed CS0419 message to not show the identical member signature in
2902           the message.
2903
2904 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2905
2906         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
2907           instead of Type.FindMembers() since it does not handle events.
2908           Fixed bug #71604.
2909
2910 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
2911
2912         * codegen.cs: Fixed typo (speficied -> specified).
2913
2914 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2915
2916         Fix #76369.
2917         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
2918
2919 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2920
2921         * attribute.cs: Changed error message.
2922
2923         * cs-tokenizer.cs: One more check.
2924
2925 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2926
2927         * statement.cs (Block.Resolve): Ignore empty statement.
2928
2929 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2930
2931         * report.cs: Made error/warning methods more strict to avoid
2932         their misuse.
2933
2934         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
2935         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
2936         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
2937         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
2938
2939 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2940
2941         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
2942         Use the more explicit AssemblyName.FullName instead of 
2943         AssemblyName.Name to report errors.
2944         
2945 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2946
2947         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
2948         with mcs.
2949
2950 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2951
2952         * class.cs,
2953         * convert.cs,
2954         * cs-parser.jay,
2955         * decl.cs,
2956         * enum.cs,
2957         * expression.cs,
2958         * generic.cs,
2959         * pending.cs,
2960         * report.cs: Fixed error reporting and typos.
2961
2962         * generic.cs (TypeParameter.GetSignatureForError): New method.
2963         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
2964
2965         * typemanager.cs (GetFullName): Refactored.
2966
2967 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
2968
2969         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
2970         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
2971
2972         * class.cs (TypeContainer.IsComImport): New property.
2973         (Constructor.Define): Create proper ctor for ComImport types.
2974
2975         * expression.cs (New.CheckComImport): Fixed.
2976
2977 2005-11-07  Miguel de Icaza  <miguel@novell.com>
2978
2979         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
2980         that a parameter has been captured does not mean that we do not
2981         have to do the rest of the processing.  This fixes the second part
2982         of #76592.  If there was another anonymous method capturing
2983         values in the past, the Scope would never be set for the second
2984         method that captured the same parameter.
2985
2986         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
2987         properly manipulate the stack.   Second part of fix for #76592.
2988
2989         * expression.cs (New): Add support for invoking "new" on
2990         interfaces that have been flagged with the ComImport attribute and
2991         the CoClass.  Fixes #76637 
2992
2993         * statement.cs (Try.DoEmit): When a variable is captured, do not
2994         try to emit the vi.LocalBuilder variable as it has been captured.
2995         Create a temporary variable and store the results on the
2996         FieldBuilder.  Fixes #76642
2997
2998 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2999
3000         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
3001
3002         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
3003
3004         * expression.cs (Binary.DoResolve): Added && optimalization.
3005     
3006         * typemanager.cs (AddUserType): Removed useless argument.
3007
3008 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
3009
3010         * statement.cs (Block.variables): Uses ListDictionary.
3011
3012 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3013
3014         Fix #75969.
3015         * class.cs (PartialContainer.EmitType): Customized to emit
3016         security attributes.
3017         (ClassPart.ApplyAttributeBuilder): Transform security attribute
3018         for partial classes.
3019
3020 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
3021
3022         Fix #76599.
3023         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
3024         access has to be fixed.
3025         
3026         * typemanager.cs (IsUnmanagedType): Wrong common field type.
3027
3028 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
3029
3030         Fix #76590.
3031         * ecore.cs (NullCast.Reduce): Implemented.
3032
3033         * expression.cs (ArrayCreation.CheckIndices): Correcly check
3034         constant type.
3035         
3036         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
3037         properly.
3038         (Foreach.Resolve): Catch null properly.
3039
3040 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3041  
3042         * cs-tokenizer.cs: Warning text fix.
3043
3044         * driver.cs: AllWarningNumbers exposed on public interface.
3045
3046         * report.cs (): Reviewed warning numbers.
3047         (IsValidWarning): Use binary search.
3048
3049 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
3050  
3051         * driver.cs: Implemeted resource visibility.
3052         (Resources): New class for code sharing between /res: and
3053         /linkres:
3054  
3055 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3056
3057         decl.cs (CurrentTypeParameters): Fixed to be public.
3058
3059 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3060
3061         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
3062
3063 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
3064
3065         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
3066
3067 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
3068
3069         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
3070
3071 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3072
3073         Add friend assembly access support.
3074         * typemanager.cs: assembly_internals_vis_attrs
3075         cache for friend assembly access. 
3076         (TypeManager.IsFriendAssembly): New method for
3077         checking friend assembly access.
3078         (TypeManager.Error_FriendAccessNameNotMatching): New
3079         helper method.
3080         (TypeManager.CompareKeyTokens): Likewise.
3081         (TypeManager.Filter): Handle friend accessible
3082         members.
3083
3084         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
3085         friend accessible types.
3086
3087         * ecore.cs (Expression.IsAccessorAccessible): Handle
3088         friend accessible properties.
3089
3090         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
3091         accessible types.
3092         
3093 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
3094
3095         Fix #76568.
3096         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
3097         folding.
3098         
3099         * convert (Convert.ImplicitReferenceConversion): NullCast holds
3100         contants only.
3101         
3102         * ecore.cs (NullCast): Child is contant only.
3103         
3104         * literal.cs (NullLiteral.Reduce): null can be converted to any
3105         reference type.
3106
3107 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
3108
3109         * driver.cs: Use Encoding.Default as default code page instead
3110           of ISO-28591.
3111
3112 2005-10-27  Raja R Harinath  <rharinath@novell.com>
3113
3114         Fix #76085.
3115         * expression.cs (Invocation.Error_InvalidArguments): Handle
3116         __arglist parameters.
3117         (Invocation.VerifyArgumentsCompat): Likewise.
3118         * support.cs (ReflectionParameters.GetSignatureForError): Print
3119         __arglist parameters.
3120         (InternalParamters.GetSignatureForError): Likewise.
3121         * parameter.cs (Parameters.GetSignatureForError): Likewise.
3122
3123 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
3124
3125         * attribute.cs (GetPropertyValue): Made public.
3126
3127         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
3128         Resolve.
3129         Add new property WrapNonExceptionThrows to handle 2.0 assembly
3130         attribute.
3131         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
3132         is not defined.
3133         
3134         * driver.cs: Reflect method name change.
3135         
3136         * statement.cs (Try.Resolve): Warn when try has both general
3137         exception handlers.
3138         
3139         * typemanager.cs: runtime_compatibility_attr_type new predefined
3140         type.
3141
3142 2005-10-26  Raja R Harinath  <harinath@gmail.com>
3143
3144         Fix #76419.
3145         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
3146         treat it as an empty parameter list.
3147
3148 2005-10-26  Raja R Harinath  <rharinath@novell.com>
3149
3150         Fix #76271.     
3151         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
3152         ResolveAsTypeStep silent.
3153         * statement.cs (Block.AddConstant): Mark block as used.
3154         (Block.ResolveMeta): Avoid piling on error messages
3155         if a constant initializer resolution fails.
3156
3157 2005-10-25  Raja R Harinath  <rharinath@novell.com>
3158
3159         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
3160         Remove.
3161         (NamespaceEntry.VerifyAllUsing): New.
3162         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
3163         behaviour.  Delegates actual resolution of alias to ...
3164         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
3165         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
3166         Update.
3167         * driver.cs (Driver.MainDriver): Update.
3168         
3169         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
3170         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
3171         property.
3172         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
3173         Remove.
3174         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
3175         RootNamespace.DefineNamespacesForAll.
3176
3177 2005-10-24  Raja R Harinath  <harinath@gmail.com>
3178
3179         * typemanager.cs (assemblies, external_aliases, modules)
3180         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
3181         (ComputeNamespaces, GetRootNamespace): Remove extra staging
3182         overhead.  Move resposibility ...
3183         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
3184         * driver.cs, attribute.cs, codegen.cs: Update to changes.
3185
3186 2005-10-23  Raja R Harinath  <harinath@gmail.com>
3187
3188         * namespace.cs (RootNamespace.all_namespaces): Renamed from
3189         cached_namespaces.  Improve usage.
3190         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
3191         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
3192         Move from GlobalRootNamespace and simplify.
3193         (RootNamespace.Global): Make instance variable.
3194         (RootNamespace.RootNamespace): Add "alias name" parameter.
3195         (GlobalRootNamespace): Simplify drastically.
3196         (Namespace.Lookup): Don't use GetNamespace.
3197         * typemanager.cs (GetRootNamespace): Rename from
3198         ComputeNamespaceForAlias.
3199         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
3200
3201 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3202
3203         * anonymous.cs (AnonymousContainer): Don't crash when container
3204         doesn't exist.
3205
3206 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3207
3208         * expression.cs (Binary.DoResolve): Warn when comparing same
3209         values.
3210
3211 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3212
3213         Fix #76486.
3214         * expression.cs (Binary.DoResolve): It looks like there are no
3215         convetsion rules in enum context.
3216
3217 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3218
3219         Add support for extern alias qualifiers.
3220         * typemanager.cs: Move some LookupTypeReflection code
3221         to namespace.cs, to have cleaner code. Added some methods
3222         to help us keep track of the extern aliased references.
3223         * driver.cs: Add suport for extern alias assemblies on command
3224         line and check for their warnings/errors. Also keep track of the
3225         extern aliased assemblies.
3226         * namespace.cs: Move the global functionality of Namespace
3227         to GlobalRootNamespace/RootNamespace. Now the global namespace
3228         is GlobalRootNamespace.Globa. Also the code moved from 
3229         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
3230         Finally added LocalAliasEntry (AliasEntry before) and
3231         ExternAliasEntry, to handle alias statements.
3232         * cs-parser.jay: Add support in the grammar for extern alias
3233         statement.
3234         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
3235         Update callings to Namespace (now in GlobalRootNamespace).
3236
3237 2005-10-25  Martin Baulig  <martin@ximian.com>
3238
3239         * convert.cs (ImplicitTypeParameterConversion): Make base
3240         interfaces actually work; fixes #76557.
3241
3242 2005-10-25  Martin Baulig  <martin@ximian.com>
3243
3244         * generic.cs
3245         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
3246         all the type parameters; fixes #76551.
3247
3248 2005-10-25  Martin Baulig  <martin@ximian.com>
3249
3250         Fix #76472.
3251
3252         * generic.cs
3253         (GenericMethod.ctor): Added `Expression return_type' and
3254         `Parameters parameters' arguments.
3255         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
3256         parameter and return types to check their constraints if they're
3257         generic types.
3258
3259         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
3260         boolean field.
3261
3262         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
3263         constraints of a generic type if `ec.ResolvingGenericMethod'.
3264
3265         * class.cs (MethodCore.DoDefineParameters): Set
3266         `ec.ResolvingGenericMethod' if we're a generic method.
3267         (MemberBase.MemberType): Likewise.
3268
3269 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3270
3271         * typemanager.cs (TypeManager): Added 
3272         TypeManager.internals_visible_attr_type to cache
3273         S.R.CompilerServices.InternalsVisibleToAttribute.
3274
3275         * codegen.cs (AssemblyClass): Added checks for 
3276         InternalsVisibleToAttribute in new method 
3277         CheckInternalsVisibleAttribute () and also cache the
3278         AssemblyName in AssemblyClass.Name.
3279         
3280 2005-10-24  Martin Baulig  <martin@ximian.com>
3281
3282         * typemanager.cs
3283         (TypeManager.ExpandInterfaces): Added overloaded version which
3284         just takes a `Type[]' array.
3285
3286         * generic.cs
3287         (Constraints.Resolve): Don't expand the interfaces here; ie. we
3288         just use the interfaces which were explicitly specified and not
3289         the interfaces they inherit.  Fixes #76482.
3290         (TypeParameter.FindMembers): Expand the interfaces here.
3291
3292 2005-10-21  Martin Baulig  <martin@ximian.com>
3293
3294         * generic.cs
3295         (Constraints.Resolve): Also resolve the actual types here.
3296         (Constraints.ResolveTypes): Just check the constraints here.
3297         Fixes #76363; see gtest-218.cs.
3298
3299 2005-10-21  Martin Baulig  <martin@ximian.com>
3300
3301         * convert.cs
3302         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
3303         instead of a `BoxedCast'; fixes gtest-217.cs.
3304
3305 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
3306
3307         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
3308           1) "new()" is specified as generic parameter constraint and 2) the
3309           type is TypeBuilder and 3) the type is abstract even if it has a
3310           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
3311
3312 2005-10-20  Martin Baulig  <martin@ximian.com>
3313
3314         * generic.cs
3315         (GenericConstraints.TypeParameter): New public property.
3316         (TypeParameter.ctor): Also take a `DeclSpace' argument.
3317         (TypeParameter.DeclSpace): New public property.
3318         (TypeParameter.DefineType): Inflate the constraints if our
3319         `DeclSpace' is an `Iterator'.   
3320
3321 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
3322
3323         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
3324           GenericMethod argument to compare methods' generic type arguments.
3325           Fixed bug #76382.
3326
3327 2005-10-19  Martin Baulig  <martin@ximian.com>
3328
3329         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
3330         not ResolveType() when resolving the base type, so we're not
3331         checking the constraints here.
3332         (TypeContainer.ResolveType): Call ResolveType() on our base_type
3333         if we have any.
3334
3335 2005-10-19  Martin Baulig  <martin@ximian.com>
3336
3337         * generic.cs (ConstructedType.CheckConstraints): Committing
3338         untested fix for #76441.
3339
3340 2005-10-18  Raja R Harinath  <rharinath@novell.com>
3341
3342         Fix #76371.
3343         * class.cs (TypeContainer.DefineType): Move updating of
3344         topological sort earlier in the code.
3345         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
3346
3347 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
3348
3349         Fix #76273.
3350         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
3351         
3352         * constant.cs (Constant.TryReduce): Moved from Cast class.
3353         (Reduce): Made little bit more OO and fixed missing conversions.
3354         
3355         * ecore.cs (Reduce): Implemented.
3356         (Binary.EnumLiftUp): New method to upgrade values to enum values.
3357         
3358         * literal.cs (Reduce): Implemented.
3359         
3360         * class.cs: Reverted Miguel's wrong commit.
3361
3362 2005-10-14  Miguel de Icaza  <miguel@novell.com>
3363
3364         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
3365
3366 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
3367
3368         * cs-parser.jay, expression.cs : CS0214 was missing error location
3369           for constants. Fixed bug #76404.
3370
3371 2005-10-10  Raja R Harinath  <rharinath@novell.com>
3372
3373         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
3374         InstanceExpression.
3375         (PropertyExpr.EmitCall): Likewise.
3376         * expression.cs (Invocation.EmitArguments): Handle case where
3377         arguments == null.
3378         (Invocation.EmitCall): Avoid allocating temporary variable if
3379         there are no arguments.
3380
3381 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
3382
3383         Fix #76370.
3384         * convert.cs (ExplicitConversionCore): Fixed object->enum
3385         conversion.
3386
3387 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3388
3389         Fix #76323.
3390         * convert.cs (ImplicitConversionStandard): Move conversion of
3391         void* to arbitrary pointer types ...
3392         (ExplicitConversionStandard): .. here.
3393         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
3394         error to always print typenames.
3395
3396 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3397
3398         * convert.cs (GetConversionOperator): Rename from
3399         GetConversionOperators.  Move operator selection code from ...
3400         (UserDefinedConversion): ... here.
3401
3402 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
3403
3404         * convert.cs (ExplicitConversionCore): Removed duplicate enum
3405         conversion.
3406
3407 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
3408
3409         * assign.cs (Assign.DoResolve): Error method changed.
3410
3411         * cfold.cs (DoConstantNumericPromotions): Error method changed.
3412         
3413         * const.cs (ResolveValue): Reset in_transit immediately.
3414         
3415         * constant.cs: Error method changed.
3416         
3417         * convert.cs: Removed useless location parameter.
3418         (ExplicitNumericConversion): Don't do double enum check.
3419         (ExplicitConversionCore): Renamed from ExplicitConversion.
3420         (ExplicitUnsafe): Extracted from ExplicitConversion.
3421         (ExplicitConversion): Uses for error reporting.
3422         
3423         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
3424         error messages.
3425         (ResolveBoolean): Uses common error method.
3426         (CastToDecimal): Get rid of ec.
3427         (CastFromDecimal): Optimized.
3428         (ConvCast): Get rid of ec.
3429         
3430         * enum.cs (ResolveValue): Reset in_transit immediately.
3431         (Emit): Return after first error.
3432         
3433         * expression.cs: Convert changes.
3434         
3435         * literal.cs: Error method changed.
3436         
3437         * statement.cs: Error method changed.
3438
3439 2005-10-06  Raja R Harinath  <rharinath@novell.com>
3440
3441         Fix gtest-131.cs and gtest-211.cs.
3442         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
3443         Only emit code for a label if it is used.  Unreachable code can
3444         violate ECMA evaluation stack invariants.
3445
3446 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3447
3448         * anonymous.cs: Implemented ExprClassName.
3449         
3450         * assign.cs (Assign.DoResolve): Don't chrash when type is not
3451         delegate.
3452         
3453         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
3454         check.
3455         
3456         * class.cs (StaticClass.DefineContainerMembers): Report protected
3457         members as error.
3458         
3459         * codegen.cs: if(ed) PRODUCTION.
3460         
3461         * convert.cs (Error_CannotImplicitConversion): Better error
3462         distinction.
3463         
3464         * cs-parser.jay: More error checks.
3465         
3466         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
3467         
3468         * driver.cs (CSCParseOption): Enabled wrong option check.
3469         
3470         * ecore.cs (Expression.ExprClassName): Turned to property.
3471         (MemberExpr.CheckIntermediateModification): For checking boxed
3472         value types     modification.
3473         
3474         * statement.cs (Fixed.Resolve): Expression type must be
3475         convertible to fixed type.
3476         (CollectionForeach.GetEnumeratorFilter,TryType):
3477         Small refactoring for easier error checking.
3478
3479 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
3480
3481         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
3482         attributes.
3483         
3484         * class.cs (GeneratedBaseInitializer): New class for customization
3485         compiler generated initializers.
3486         (MemberBase.DoDefine): Check Obsolete attribute here.
3487         (FieldMember.DoDefine): Ditto.
3488         
3489         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3490         constants.
3491         
3492         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3493         (MemberCore.GetObsoleteAttribute): Removed argument.
3494         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3495         (MemberCore.CheckObsoleteType): New helper.
3496         
3497         * delegate.cs,
3498         * enum.cs,
3499         * statement.cs: Updates after MemberCore changes.
3500         
3501         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3502         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3503         
3504         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3505         obsolete attribute for compiler construct.
3506         (As.DoResolve): Cache result.
3507         
3508         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3509
3510 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3511
3512         * expression.cs (Probe): instead of having a "Type probe_type"
3513         keep the extra information as a TypeExpr probe_type_expr since the
3514         "As" operator needs to perform some type checks.
3515
3516         * (As.DoResolve): If the type is a type parameter, ensure that it
3517         is constrained by a class.
3518
3519 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3520
3521         * statement.cs (Lock): Use the TemporaryVariable class instead of
3522         manually using local variables as those do not work when variables
3523         are captured.
3524
3525         * ecore.cs: Moved the TemporaryVariable class from being a nested
3526         class inside Foreach to be a public class that can be employed in
3527         other places. 
3528
3529 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3530
3531         * cs-parser.jay: interface_accessors replaced by
3532         accessor_declarations.
3533
3534         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3535         location.
3536         
3537         * statement.cs (GotoCase.Resolve): Convert null constant to
3538         null case.
3539         (SwitchLabel.ResolveAndReduce): Ditto.
3540         (SwitchLabel.NullStringCase): Custom null stamp.
3541         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3542         
3543         typemanager.cs (CSharpSignature): Don't skip first argument
3544         for full names.
3545
3546 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3547
3548         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3549         expression.cs, iterators.cs, literal.cs: Store constants and
3550         literals location.
3551         
3552         * class.cs (MemberBase.ShortName): Pass location.
3553         
3554         * cs-parser.jay: Some location fixes.
3555         
3556         * ecore.cs (Expression.Location): Made virtual.
3557
3558 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3559
3560         Fix #72930.
3561         * const.cs (Const.ResolveValue): Check for assigning non-null
3562         value to reference type.
3563
3564 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3565
3566         Fix #76133.
3567         * expression.cs (This.VerifyFixed): In a value type T, the type of
3568         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3569         value type R, 'this' is treated as a value parameter.
3570
3571 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3572
3573         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3574         if the underlying types are the same, otherwise we need to produce
3575         code that will do the proper cast.
3576
3577         This was exposed by Marek's constant rewrite which produced
3578         invalid code for the call site:
3579
3580         enum X : long { a }
3581         void Method (X v) {}
3582
3583         Method ((X) 5)
3584
3585         This fixes test-49.cs
3586
3587 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3588
3589         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3590           Type/Object should be allowed as well. Fixed bug #75968.
3591
3592 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3593
3594         * expression.cs : (Binary.DoResolve): when one is enum constant and
3595           another is constant 0, then return enum one *as enum type*.
3596           Fixed bug 74846.
3597
3598 2005-10-04  Martin Baulig  <martin@ximian.com>
3599
3600         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3601         `SetMemberIsUsed()' work for generics, too.
3602
3603 2005-10-04  Martin Baulig  <martin@ximian.com>
3604
3605         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3606         for corlib.  Fixes #75691.
3607
3608 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3609
3610         Fix #76255.
3611         * driver.cs: Fix compilation files with full root path.
3612
3613 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3614
3615         * report.cs (SymbolRelatedToPreviousError): Format the output so
3616         it does not use an open parenthesis that is never closed. 
3617
3618         * driver.cs: Follow coding guidelines
3619
3620 2005-09-18  Miguel de Icaza  <miguel@novell.com>
3621
3622         * driver.cs: Set InEmacs based on the environment variable EMACS. 
3623
3624         * location.cs (InEmacs): in this mode, do not report column
3625         location as it confuses Emacs.
3626
3627 2005-10-03  Raja R Harinath  <rharinath@novell.com>
3628
3629         * support.cs (SeekableStreamReader.Position): Don't error out when
3630         the requested position is just beyond the end of the current
3631         buffered data.
3632
3633 2005-09-28  Raja R Harinath  <rharinath@novell.com>
3634
3635         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
3636         try to keep in sync with the byte count of the underlying Stream.
3637         However, this limits us to a window size of 2048 characters: i.e.,
3638         the maximum lookahead of our lexer/parser can be 2048 characters.
3639
3640 2005-09-22  Martin Baulig  <martin@ximian.com>
3641
3642         * driver.cs: Removed a debugging FIXME.
3643
3644 2005-09-21  Raja R Harinath  <rharinath@novell.com>
3645
3646         * cs-parser.jay (type_arguments): Add CS1644 check.
3647         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
3648
3649 2005-09-15  Raja R Harinath  <rharinath@novell.com>
3650
3651         * Makefile (PROGRAM): Make profile specific.
3652         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
3653         the current directory.
3654
3655         Fix test-455.cs.
3656         * expression.cs (Invocation.EmitCall): Remove optimization on
3657         this_call since it doesn't handle 'this' being a value type.
3658
3659 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
3660
3661         * driver.cs: Ensure file handles are closed after parsing
3662
3663 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3664
3665         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3666         if the underlying types are the same, otherwise we need to produce
3667         code that will do the proper cast.
3668
3669         This was exposed by Marek's constant rewrite which produced
3670         invalid code for the call site:
3671
3672         enum X : long { a }
3673         void Method (X v) {}
3674
3675         Method ((X) 5)
3676
3677         This fixes test-49.cs
3678
3679 2005-09-05  Martin Baulig  <martin@ximian.com>
3680
3681         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
3682         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
3683
3684         * cs-parser.jay (delegate_declaration): Small fix for #75852.
3685
3686 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3687
3688         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
3689           to be a pointer type due to the spec 25.2, so check if declaring
3690           type is generic type definition. Fixed bug #75772.
3691
3692 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3693
3694         Fixed bug #75957.
3695         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
3696           both types are not defined by methods.
3697         * expression.cs : (Invocation.IsApplicable): it should work when
3698           the argument type is equal to the parameter type, not only when
3699           ImplicitConversionExists() returns true.
3700
3701 2005-09-02  Raja R Harinath  <rharinath@novell.com>
3702
3703         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
3704         internal.
3705
3706         Fix #75941.
3707         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
3708         flow-branching for LocalVariableReferences in case we were invoked
3709         from a MemberAccess.
3710         * expression.cs (LocalVariableReference.VerifyAssigned): New.
3711         Carved out of ...
3712         (LocalVariableReference.DoResolveBase): ... this.
3713         (MemberAccess.Resolve): Do the check that was disabled during
3714         SimpleNameResolve.
3715
3716 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3717
3718         * class.cs :
3719           (PartialContainer.Create): check abstract/sealed/static strictly
3720           but abstract/sealed can exist only at one side. Fixed bug #75883.
3721
3722 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
3723
3724         Fix #75945.
3725         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
3726         specified, don't default to UnmanagedType.I4.
3727
3728 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3729
3730         * expression.cs : conditional operator should check possibly
3731           incorrect assign expression. Fixed bug #75946.
3732
3733 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3734
3735         Fix #75934.
3736         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
3737         (ScopeInfo.EmitScopeType): Use it to construct field names from
3738         names of captured locals.
3739
3740         Fix #75929.
3741         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
3742         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
3743         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
3744         (ExplicitConversion): Remove enum cases already handled by
3745         implicit conversion.  Move implicit conversion check to the beginning.
3746         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
3747         * expression.cs (ArrayCreation.EmitDynamicInitializers):
3748         Don't treat System.Enum as a struct.
3749
3750 2005-08-30  Jb Evain  <jbevain@gmail.com>
3751
3752         * attribute.cs: handles as expression in parameters.
3753
3754 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3755
3756         Fix #75802.
3757         * class.cs (TypeContainer.VerifyClsName): Don't use a
3758         PartialContainer when verifying CLS compliance.
3759         (AbstractPropertyEventMethod): Set Parent here, ...
3760         (PropertyMethod): ... not here.
3761
3762 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
3763
3764         * attribute.cs : escaped attribute name should not be allowed to be
3765           resolved (e.g. @class as classAttribute). Fixed bug #75930.
3766
3767 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3768
3769         Fix #75927.
3770         * convert.cs (ImplicitStandardConversionExists): Allow zero also
3771         when converting a long constant to unsigned long.
3772         * expression.cs (Invocation.OverloadResolve): Add sanity check to
3773         detect where IsApplicable and VerifyArgumentsCompat disagree.
3774
3775 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3776         and Carlos Alberto Cortez  <carlos@unixmexico.org>
3777
3778         Fix #75848.
3779         * class.cs (TypeContainer.CanElideInitializer): New helper.
3780         (TypeContainer.EmitFieldInitializers): Use it to determine if we
3781         can safely emitting the initializer of a field.
3782
3783 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3784
3785         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
3786           allowed inside a switch (without loop). Fixed bug #75433.
3787
3788 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
3789
3790         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
3791         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
3792
3793 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3794
3795         * driver.cs : kinda reverting the default encoding changes (not exact 
3796           revert since I noticed that "codepage:reset" might not work fine).
3797
3798 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3799
3800         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
3801           Location. Now getter and setter store location correctly.
3802           (errors/cs0111-12.cs now reports the expected location.)
3803
3804 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3805
3806         * driver.cs : Use default encoding on the environment.
3807           Removed (now that) extra parameter for SeekableStreamReader.
3808         * support.cs : (SeekableStreamReader) third .ctor() argument for
3809           StreamReader is not required (always true). preamble size could
3810           be acquired in simpler and safe way.
3811
3812 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
3813
3814         * cs-parser.jay: report CS0642 at warning level 3
3815           and report CS0642 for an if else statement also
3816           fixes bug #74745. Patch by John Luke (and a bit
3817           modified by me).
3818           Removed extra CS0642 warning check for "while",
3819           "for" and "fixed".
3820         * statement.cs: In Block.Resolve(), CS0642 check
3821           is reimplemented to check a sequence of an empty
3822           statement and a block.
3823
3824           Both fix bug #66777.
3825
3826 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
3827
3828         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
3829         detection until I fix it.
3830         
3831         * cs-tokenizer.cs: Changed error message.
3832         
3833         * cs-parser.jay: Fixed 2 error locations.
3834         
3835         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
3836         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
3837         properties.
3838         
3839         * enum.cs (GetSignatureForError): Fixed.
3840         
3841         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
3842         method detection.
3843         
3844         * class.cs,
3845         * typemanager.cs (RegisterProperty): Removed.
3846         
3847         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
3848
3849 2005-08-24  Raja R Harinath  <rharinath@novell.com>
3850
3851         Fix #75874.
3852         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
3853         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
3854
3855 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3856
3857         * expression.cs : tiny fix is required for not warning positive ulong.
3858           See test-441.cs.
3859
3860 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3861
3862         * expression.cs : add CS0652 check for constant and integral
3863           expression. Fixed bug #53974.
3864
3865 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3866
3867         * expression.cs : in DoNumericPromotions(), check if there is implicit
3868           conversion overload for string (to check CS0034). Fixed bug #52492.
3869
3870 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3871
3872         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
3873
3874 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3875
3876         * ecore.cs : report location when it is *not* Null.
3877
3878 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3879
3880         * codegen.cs,
3881           ecore.cs,
3882           flowanalysis.cs,
3883           expression.cs:
3884           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
3885           correctly. Fixed bug #75721.
3886
3887 2005-08-23  Raja R Harinath  <rharinath@novell.com>
3888
3889         * support.cs (SeekableStreamReader.Position): Avoid an expensive
3890         loop that performs 'min (pos, char_count)'.
3891
3892         Fix #75862.
3893         * expression.cs (Unary.ResolveOperator): Don't discard implicit
3894         converted value in Operator.OnesComplement.
3895
3896 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
3897
3898         * anonymous.cs: If the anon method is pulled into a helper class,
3899         it needs to be `internal' not `private'. Fixes runtime behavior on
3900         msft. bug #75704
3901
3902 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
3903
3904         Fix #75803
3905         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
3906         is a partial class.
3907
3908 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
3909
3910         The big constants rewrite
3911         Fix #75746, #75685 and more
3912         As a side effect saved 1MB for MWF ;-)
3913         
3914         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
3915         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
3916         enum based for corlib compilation.
3917         
3918         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
3919         subtractions.
3920         
3921         * class.cs (FixedField.Define): Use ResolveAsConstant.
3922         
3923         * const.cs (IConstant): Interface constants and enums.
3924         (Const.ResolveValue): New method for constant resolvning.
3925         (ExternalConstant): Constants from imported assemblies.
3926         
3927         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
3928         conversion; like enums.
3929         (Constant.ToType): Converts this constant to different type.
3930         (Constant.Increment): Adds 1.
3931         
3932         * convert.cs (ImplicitConversionRequired): Simplified.
3933         
3934         * cs-parser.jay: Create EnumMember directly.
3935         
3936         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
3937         
3938         * doc.cs (GenerateEnumDocComment): Removed.
3939         
3940         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
3941         (ConvertIntLiteral): Removed.
3942         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
3943         
3944         * enum.cs (EnumMember): Implement IConstant.
3945         (Enum.IsValidEnumConstant): Removed.
3946         (Enum.GetNextDefaultValue): Removed.
3947         (Enum.FindMembers): Updated.
3948         (Enum.GenerateDocComment): Iterate enum members.
3949         
3950         * expression.cs (Cast.TryReduce): Handle enums correctly.
3951         (New.Constantify): Made public.
3952         (MemberAccess.DoResolve): Removed contant specific if(s).
3953         
3954         * literal.cs (NullLiteral): Implement new abstract methods.
3955         
3956         * statement.cs (GotoCase.Resolve): Use new constant methods.
3957         (SwitchLabel.ResolveAndReduce): Use new constant methods.
3958         
3959         * typemanager.cs (LookupEnum): Removed.
3960         (IsEnumType): Fixed to work with corlib.
3961         (RegisterConstant): Removed.
3962         (LookupConstant): Removed.
3963         (GetConstant): Changed to work with IConstant.
3964
3965 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
3966
3967         * location.cs : Fixed overflown (>255) column number.
3968
3969 2005-08-03  Raja R Harinath  <rharinath@novell.com>
3970
3971         First cut of the qualified-alias-member feature.
3972         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
3973         token.
3974         * cs-parser.jay (DOUBLE_COLON): New token.
3975         (namespace_or_type_name): Add rule for recognizing
3976         qualified-alias-members.
3977         (primary_expression): Likewise.
3978         (element_access): Allow QualifiedAliasMember as a possible
3979         type-bearing expression.
3980         (local_variable_type, local_variable_pointer_type): Likewise.
3981         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
3982         aliases in the current and enclosing namespace declarations.
3983         (NamespaceEntry.UsingAlias): Add CS0440 warning.
3984         * decl.cs (MemberName.is_double_colon): New.
3985         (MemberName.MemberName): Add new constructor for alias-member.
3986         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
3987         * expression.cs (QualifiedAliasMember): New expression type.
3988
3989 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3990
3991         * location.cs : it borked when no argument was specified.
3992
3993 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3994
3995         * location.cs : tiny ToString() format fix.
3996
3997 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3998
3999         * statement.cs : oops, it was missing.
4000
4001 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
4002
4003         A set of fixes for precise line/column location.
4004
4005         * location.cs :
4006           "token" field now holds a file/line "delta", a line number offset 
4007           from the segment, and a column number. See also:
4008           http://lists.ximian.com/pipermail/mono-devel-list/2004-
4009           December/009508.html
4010           Removed static IsNull. Use instance IsNull property instead.
4011         * cs-tokenizer.cs :
4012           For some tokens it stores Location. For Identifier it stores
4013           LocatedToken which is a pair of string name and location.
4014           Column numbers are adjusted only at getChar().
4015         * report.cs :
4016           Use Location.ToString() for reporting (it now contains column).
4017         * cs-parser.jay :
4018           Largely modified to use LocatedToken instead of
4019           string (IDENTIFIER), and to acquire Location from some tokens.
4020         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
4021           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
4022           codegen.cs :
4023           Now MemberName holds Location. DeclSpace.ctor() receives Location
4024           as a parameter. Removed extra parameters to all derived classes.
4025           Replaced Location.IsNull() with instance property.
4026         * assign.cs, expression.cs :
4027           Added .ctor() overload that omits Location.
4028         * attribute.cs :
4029           Added "nameEscaped" flag that indicates the identifier was escaped
4030           in the source file. This fixes bug #57047.
4031
4032 2005-09-02  Martin Baulig  <martin@ximian.com>
4033
4034         * class.cs: Make CS3005 a warning, not an error.
4035
4036 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
4037
4038         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
4039         New method, looking for lo-case imported cls type.
4040
4041         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
4042         here.
4043
4044         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
4045
4046         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
4047
4048         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
4049         all_imported_types.
4050         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
4051
4052         Optimized to save 3.5 MB for SWF compilation.
4053
4054 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4055
4056         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
4057         (PartialContainer.Create): Moved logic AddToContainer.
4058         (PartialContainer.MarkForDuplicationCheck): Shares name.
4059         
4060         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
4061         place.
4062         
4063         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
4064         initialization.
4065         (Namespace.GetSignatureForError): New method.
4066         
4067         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
4068         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
4069
4070 2005-08-01  Raja R Harinath  <rharinath@novell.com>
4071
4072         Fix #75669.
4073         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
4074         member lookup rather than qualifier_type, since qualifier_type can
4075         be null.
4076
4077 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
4078
4079         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
4080         enum member.
4081
4082 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4083
4084         * statement.cs: Copy the local exception into the exception
4085         captured local.  Fixes 75674
4086
4087 2005-07-31  Raja R Harinath  <harinath@gmail.com>
4088
4089         Fix #75658.
4090         * expression.cs (Invocation.OverloadResolve): Don't report error
4091         CS1501 if error CS1502 has been reported.
4092         (New.DoResolve): Delegate CS1501 reporting to
4093         Invocation.OverloadResolve.
4094
4095         Fix #75656.
4096         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
4097         invariant-meaning-in-block property in an enclosing block if
4098         necessary.
4099
4100 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
4101
4102         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
4103         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
4104         (Switch.CheckSwitch): Just save 50kb for SWF.
4105
4106 2005-07-27  Martin Baulig  <martin@ximian.com>
4107
4108         * anonymous.cs (CaptureContext.AddField): Added
4109         `AnonymousContainer am' argument; compute its toplevel scope if
4110         it's not already computed.  Fixes #75649.
4111
4112 2005-07-26  Raja R Harinath  <rharinath@novell.com>
4113
4114         Fix #75628.
4115         * class.cs (Constructor.Emit): Reset block to null if the block
4116         resolve fails.
4117
4118 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4119
4120         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
4121
4122 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4123
4124         * class.cs (MethodData.Define): Check whether accessor implementing
4125         interface is public.
4126
4127         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
4128
4129 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
4130
4131         Fix #57245
4132         * namespace.cs (LookupType): Moved same type check to...
4133         
4134         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
4135         with the same name.
4136
4137 2005-07-21  Raja R Harinath  <rharinath@novell.com>
4138
4139         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
4140         already found a typebuilder.
4141         * class.cs (MethodCore.IsDuplicateImplementation): Compare
4142         MemberNames, not strings.
4143
4144         * const.cs (Error_ExpressionMustBeConst): 
4145         Rename from Error_EpressionMustBeConst.
4146         * const.cs, class.cs, statement.cd: Update.
4147
4148 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
4149
4150         Fix #65573
4151
4152         * const.cs (Const.LookupConstantValue): Report missing contant expression
4153         everytime.
4154         (Error_EpressionMustBeConstant): Only one error method.
4155
4156         * class.cs, statement.c: Updated.
4157
4158 2005-07-20  Raja R Harinath  <rharinath@novell.com>
4159
4160         * statement.cs (Block.Flags): Add back HasVarargs.
4161         (Block.flags): Make protected.
4162         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
4163
4164         * typemanager.cs (types, typecontainers, user_types): Remove.
4165         (UserTypes, TypeContainers): Likewise.
4166         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
4167         (CleanUp, Reset): Update.
4168         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
4169         (GetNestedType): Use Type.GetNestedType.
4170         (CoreLookupType): Take two arguments, the namespace and the
4171         basename of the type.  Update to use the Namespace.Lookup
4172         mechanism.
4173         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
4174         (RealMemberLookup): Use IsNestedChildOf instead of playing with
4175         string concatenation and substring matches.
4176         * class.cs, enum.cs, delegate.cs: Update to changes.
4177
4178 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
4179
4180         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
4181         Expression and made virtual.
4182
4183         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
4184         (ImplicitStandardConversionExists): Fixed `byte' typo ?
4185
4186         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
4187
4188         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
4189         error message.
4190
4191         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
4192         change.
4193
4194 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
4195
4196         Fix #57707
4197         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
4198         AssemblyCultureAttribute is not used on executable.
4199
4200         * rootcontext.cs,
4201         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
4202
4203 2005-07-16  Raja R Harinath  <rharinath@novell.com>
4204
4205         Fix #60638.
4206         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
4207         New.  Reports CS0252/CS0253.
4208         Mostly taken from preliminary patch by Duncak Mak.
4209         (Binary.DoResolveOperator): Store results of operator lookup.
4210         Use them to detect if we need to warn about unintended reference
4211         comparisons.
4212
4213 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4214
4215         Fix #72969.
4216         * namespace.cs (Namespace.Lookup): Add back location parameter.
4217         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
4218         * delegate.cs, ecore.cs, expression.cs: Update to changes.
4219
4220         * codegen.cs (EmitContext.DeclSpace): Make readonly.
4221         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
4222         (Namespace.LookupType): ... this.
4223         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
4224         of namespaces.
4225         * typemanager.cs (LookupTypeReflection): Remove buggy code that
4226         purported to handle pointers.
4227         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
4228         CoreLookupType.
4229
4230 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4231
4232         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4233         type as namespace.
4234
4235 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4236
4237         * namespace.cs (Namespace.Lookup): Drop location parameter.
4238         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
4239         (NamespaceEntry.Lookup): ... this.
4240         (NamespaceEntry.Error_AmbiguousTypeReference):
4241         Move here from DeclSpace.
4242         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
4243         names ...
4244         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
4245         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
4246         Move to NamespaceEntry.
4247         * delegate.cs, expression.cs: Update to changes.
4248
4249 2005-08-31  Martin Baulig  <martin@ximian.com>
4250
4251         Committing a patch from Atsushi Enomoto for #75850.
4252
4253         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
4254         Prefer a generic enumerator over a non-generic one.
4255
4256 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4257
4258         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4259         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4260
4261 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4262
4263         * driver.cs : reverting default encoding change as well as mcs.
4264
4265 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4266
4267         * driver.cs, support.cs : merged r48826.
4268           Marek Safer wrote:
4269           > could you integrate your mcs changes to gmcs otherwise
4270           > gmcs cannot compile some files.
4271
4272 2005-08-20  Martin Baulig  <martin@ximian.com>
4273
4274         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
4275         scope if we don't already have it.
4276
4277         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
4278         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
4279         fixes #75867.
4280
4281 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4282
4283         * statement.cs: Copy the local exception into the exception
4284         captured local.  Fixes 75674
4285
4286 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4287
4288         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4289         type as namespace.
4290
4291 2005-08-12  Martin Baulig  <martin@ximian.com>
4292
4293         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4294         for nested types here to avoid hitting the cache too early.
4295
4296 2005-08-09  Miguel de Icaza  <miguel@novell.com>
4297
4298         * enum.cs: On the new compiler CLS error 3005 is now a warning not
4299         an error. 
4300
4301 2005-08-03  Martin Baulig  <martin@ximian.com>
4302
4303         Make iterators in generic methods work; see gtest-191.cs.
4304
4305         * generic.cs
4306         (Constraints.Resolve): Protect against being called twice.
4307
4308         * class.cs
4309         (TypeContainer.GetClassBases): Make this `protected virtual'.
4310
4311         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
4312         (Iterator.GetClassBases): Override this and compute the base
4313         classes here.
4314         (Iterator.DefineNestedTypes): If we're a generic method, all our
4315         method type parameters become class type parameters on the proxy
4316         class.
4317
4318         * statement.cs
4319         (ToplevelBlock.Parameters): Make this a property, not a field.
4320         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
4321
4322 2005-08-03  Martin Baulig  <martin@ximian.com>
4323
4324         * typemanager.cs (TypeManager.IsSubclassOf): Use
4325         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
4326         (TypeManager.GetFullName_recursed): Improved.
4327
4328 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
4329
4330         Fix #75417
4331         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
4332         Private accessor case, using TypeManager.IsPrivateAccessible instead of
4333         invocation_type == mi.DeclaringType, since the first one also checks
4334         other condition used by generic instances.
4335         
4336 2005-07-27  Martin Baulig  <martin@ximian.com>
4337
4338         * anonymous.cs (CaptureContext.AddField): Added
4339         `AnonymousContainer am' argument; compute its toplevel scope if
4340         it's not already computed.  Fixes #75649.
4341
4342 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
4343
4344         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
4345         CheckAttributeType and refactored.
4346         (Attribute.ResolvePossibleAttributeType): Changed to reuse
4347         ResolveAsTypeTerminal error handling.
4348         (ResolveAsTypeTerminal): Introduced because of global attributes extra
4349         handling.
4350         (GetSignatureForError): Print errors in same way.
4351
4352         * class.cs,
4353         * codegen.cs: Reflect attribute GetSignatureForError change.
4354
4355         * ecore.cs,
4356         * expression.cs: Add silent parameter to ResolveAsTypeStep.
4357
4358         * namespace.cs (UsingEntry): Refactored to make fields private.
4359
4360         * assign.cs,
4361         statement.cs: Error_UnexpectedKind has extra parameter.
4362
4363 2005-07-14  Raja R Harinath  <rharinath@novell.com>
4364
4365         * ecore.cs (IAlias): Remove.
4366         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
4367         that implement the interface.
4368         * namespace.cs (Namespace): Likewise.
4369         (Namespace.declspaces): Renamed from 'defined_names'.
4370         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
4371         DeclSpace instead of an IAlias.
4372         * tree.cs (Tree.AddDecl): Update.
4373
4374 2005-07-12  Raja R Harinath  <rharinath@novell.com>
4375
4376         * statement.cs (Block.Flags); Remove HasVarargs.
4377         (Block.HasVarargs): Move to ToplevelBlock.
4378         (Block.ThisVariable, Block.AddThisVariable): Likewise.
4379         (Block.Variables): Make protected.  Initialize variable hashtable
4380         if necessary.
4381         (Block.AddVariable): Update.
4382         (Block.Resolve): Update to changes.
4383         (ToplevelBlock.HasVarargs): New boolean.
4384         (ToplevelBlock.ThisVariable): Move here from Block.
4385         (ToplevelBlock.AddThisVariable): Likewise.
4386         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
4387         * expression.cs (This.ResolveBase): Update to changes.
4388         (ArglistAccess.DoResolve): Likewise.
4389
4390 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4391
4392         Fix #75321
4393         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
4394
4395         * class.cs (TypeContainer.VerifyMembers): Distinguish between
4396         not used and not used & assigned.
4397         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
4398
4399 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4400
4401         Fix #75053
4402         * expression.cs (Is.DoResolve): null is never provided type.
4403
4404 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
4405
4406         Fix #52496
4407         * cs-parser.jay: Less strict event error rule to catch more errors.
4408
4409 2005-07-11  Martin Baulig  <martin@ximian.com>
4410
4411         * generic.cs (ConstructedType.CheckConstraints): Improve the check
4412         for the constructor constraint: we do not only have to check
4413         whether the class has a public constructor, but also ensure that
4414         it's parameterless.  Fixes #75492.
4415
4416 2005-07-11  Martin Baulig  <martin@ximian.com>
4417
4418         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
4419         between type parameters if they either have the reference type
4420         constraint or the class constraint.
4421
4422 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
4423
4424         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
4425
4426 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
4427
4428         Fix #74975
4429         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
4430         (ExtractSecurityPermissionSet): Cope with self referencing security
4431         attributes properly.
4432
4433         * driver.cs (SetOutputFile): Made public property OutputFile.
4434
4435 2005-07-07  Raja R Harinath  <rharinath@novell.com>
4436
4437         Fix #75486.
4438         * class.cs (TypeContainer.first_nonstatic_field): Rename from
4439         has_nonstatic_fields.  Make into a FieldBase pointer.
4440         (TypeContainer.AddField): Add CS0282 check.
4441         (TypeContainer.EmitType): Update.
4442
4443 2005-07-06  Miguel de Icaza  <miguel@novell.com>
4444
4445         * cs-tokenizer.cs (consume_identifier): Do not create strings to
4446         compare if they start with __.
4447
4448 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4449
4450         * statement.cs (Switch.SwitchGoverningType): Only look at
4451         UserCasts that don't need implicit standard conversions to one of
4452         the allowed switch types (Fixes test-322.cs).
4453         (LocalInfo.Resolve): Re-enable sanity-test.
4454
4455 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
4456
4457         * cs-tokenizer.cs (consume_identifier): Detect double undescores
4458         
4459         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
4460         
4461         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
4462
4463 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4464
4465         Fix #75472.
4466         * ecore.cs (SimpleName.GetSignatureForError): Add.
4467         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
4468         (MemberAccess.GetSignatureForError): Add.
4469
4470 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
4471  
4472         The big error and warning messages review.
4473         
4474         * anonymous.cs,
4475         * assign.cs,
4476         * attribute.cs,
4477         * class.cs,
4478         * codegen.cs,
4479         * convert.cs,
4480         * cs-parser.jay,
4481         * cs-tokenizer.cs,
4482         * decl.cs,
4483         * delegate.cs,
4484         * doc.cs,
4485         * driver.cs,
4486         * ecore.cs,
4487         * enum.cs,
4488         * expression.cs,
4489         * flowanalysis.cs,
4490         * iterators.cs,
4491         * literal.cs,
4492         * location.cs,
4493         * modifiers.cs,
4494         * namespace.cs,
4495         * parameter.cs,
4496         * pending.cs,
4497         * report.cs,
4498         * rootcontext.cs,
4499         * statement.cs,
4500         * support.cs,
4501         * tree.cs,
4502         * typemanager.cs: Updated.
4503         
4504         * class.cs: (MethodCore.SetYields): Moved here to share.
4505         (PropertyMethod.Define): Moved iterator setup here.
4506         
4507         * iterators.cs: Add orig_method to have full access to parent
4508         container.
4509
4510 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4511
4512         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4513         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4514         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4515         variable of struct type.
4516         * expression.cs (Unary.ResolveOperator): Update to change.
4517         (Indirection.VerifyFixed): Likewise.
4518         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4519         (ParameterReference.VerifyFixed): Value parameters are fixed.
4520         (This.VerifyFixed): Treat 'this' as a value parameter.
4521         * statement.cs (LocalInfo.IsFixed): Remove.
4522
4523 2005-07-01  Martin Baulig  <martin@ximian.com>
4524
4525         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4526         `ec.EmitThis ()' to get the correct scope.
4527
4528 2005-07-01  Martin Baulig  <martin@ximian.com>
4529
4530         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4531         instance is a ParameterReference; fixes #75299.
4532
4533 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4534
4535         Fix #75412.
4536         * expression.cs (Indexers.map): Remove.
4537         (Indexers.Append): Filter out inaccessible setters and getters.
4538         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4539
4540         Fix #75283.
4541         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4542         Refactored from ...
4543         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4544         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4545         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4546         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4547
4548 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4549
4550         Fix #75322
4551         * class.cs (FieldBase.GetInitializerExpression): One more field
4552         for backup.
4553
4554 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4555
4556         * pending.cs: Do not define a proxy if the base method is virtual,
4557         it will be picked up by the runtime (bug 75270).
4558
4559 2005-07-08  Martin Baulig  <martin@ximian.com>
4560
4561         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4562         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4563
4564 2005-07-07  Martin Baulig  <martin@ximian.com>
4565
4566         * generic.cs (ConstructedType.CheckConstraint): Use
4567         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4568         called recursively; fixes #75329.
4569
4570 2005-07-06  Martin Baulig  <martin@ximian.com>
4571
4572         * generic.cs (TypeManager.InferTypeArguments): Added support for
4573         anonymous methods; fixes #75461.
4574
4575 2005-07-01  Martin Baulig  <martin@ximian.com>
4576
4577         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4578         `ec.EmitThis ()' to get the correct scope.
4579
4580 2005-07-01  Martin Baulig  <martin@ximian.com>
4581
4582         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4583         instance is `This'; fixes #75299.
4584
4585 2005-06-30  Martin Baulig  <martin@ximian.com>
4586
4587         * class.cs (Indexer): Implement IIteratorContainer; added support
4588         for iterators in indexers.
4589
4590         * codegen.cs
4591         (EmitContext.CurrentIterator): Make this a property, not a field.
4592
4593         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4594
4595 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4596
4597         * pending.cs: Do not define a proxy if the base method is virtual,
4598         it will be picked up by the runtime (bug 75270).
4599
4600 2005-06-28  Martin Baulig  <martin@ximian.com>
4601
4602         * cs-parser.jay (interface_method_declaration): Avoid a
4603         reduce/reduce conflict by moving some of the code into a separate
4604         `interface_method_declaration_body' rule; fixes #75368.
4605
4606 2005-06-28  Martin Baulig  <martin@ximian.com>
4607
4608         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4609         array check after the check for TypeBuilder's.
4610
4611 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4612
4613         * convert.cs (FindMostEncompassedType): Add two trivial special
4614         cases (number_of_types == 0 || number_of_types == 1).
4615         (FindMostEncompasingType): Likewise.
4616
4617 2005-06-17  Raja R Harinath  <rharinath@novell.com>
4618
4619         Some cleanups preparing for the fix of #75283.
4620         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
4621         error testing.
4622         (EventExpr.InstanceResolve): Likewise.
4623         (EventExpr.DoResolve): Remove redundant checks.
4624
4625 2005-06-08  Miguel de Icaza  <miguel@novell.com>
4626
4627         * class.cs: Small fix.
4628
4629 2005-06-08  Raja R Harinath  <rharinath@novell.com>
4630
4631         Fix #75160.
4632         * class.cs (GetPartialBases): Fix return value check of
4633         part.GetClassBases.
4634
4635 2005-06-07  Raja R Harinath  <rharinath@novell.com>
4636
4637         Ensure that partial classes are registered in their enclosing
4638         namespace.  Initial part of fix of #75160.
4639         * tree.cs (Tree.RecordDecl): Add new namespace argument.
4640         Register declspace with namespace here, not in
4641         DeclSpace.RecordDecl.
4642         * cs-parser.jay: Pass namespace to RecordDecl.
4643         * class.cs (PartialContainer.Create): Likewise.
4644         (ClassPart.DefineType): New sanity-check.  Throws an exception if
4645         called.
4646         * decl.cs (Declspace.RecordDecl): Remove.
4647         * namespace.cs (NamespaceEntry.DefineName): Remove.
4648
4649 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4650
4651         * rootcontext.cs: Reset TargetExt as well.
4652
4653 2005-06-03  Raja R Harinath  <rharinath@novell.com>
4654
4655         * ecore.cs (Expression.Resolve): Emit CS0654 error when
4656         -langversion:ISO-1.
4657
4658 2005-06-02  Raja R Harinath  <rharinath@novell.com>
4659
4660         Fix #75080, cs0119.cs.
4661         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
4662         of ...
4663         (Expression.Resolve): ... this.  Use it.  Remove bogus code
4664         allowing ExprClass.Type and ExprClass.Namespace for
4665         ResolveFlags.VariableOrValue.
4666         (Expression.Resolve) [1-argument variant]: Change default resolve
4667         flags based on language version.
4668         (Expression.Error_UnexpectedKind): Use a simple string array
4669         rather than an ArrayList.
4670         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
4671         not ExprClass.Type.
4672         (TypeOfVoid.DoResolve): Likewise.
4673         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
4674         flags argument -- it always has the same value.
4675
4676 2005-05-31  Raja R Harinath  <rharinath@novell.com>
4677
4678         Fix #75081.
4679         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
4680         Use it in the error message.
4681         * assign.cs, expression.cs, statement.cs: Update.
4682
4683 2005-05-30  Raja R Harinath  <rharinath@novell.com>
4684
4685         Fix #75088.
4686         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
4687         the "almostMatchedMember" case too.
4688         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
4689         that failed the accessibility checks to 'almost_match'.
4690
4691 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
4692
4693         * attribute.cs: Use internal MethodBuilder methods to set
4694         ExactSpelling and SetLastError on PInvoke methods, instead
4695         of passing them via charset.  Fixes #75060.
4696
4697 2005-05-27  Raja R Harinath  <rharinath@novell.com>
4698
4699         * parameter.cs (Parameter): Remove TODO comment.
4700         (Parameter.DefineParameter): Remove Location parameter.
4701         (Parameters.LabelParameters): Likewise.
4702         * class.cs (Constructor.Emit): Update to change.
4703         (MethodData.Emit): Likewise.
4704         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
4705         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
4706
4707 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
4708
4709         * parameter.cs,
4710           Removed Parameters.Location and added Parameter.Location instead.
4711           Removed Location parameter from Emit() and GetSignature().
4712         * anonymous.cs,
4713           class.cs,
4714           cs-parser.jay,
4715           delegate.cs,
4716           iterators.cs,
4717           statement.cs :
4718           Modified all related calls.
4719
4720 2005-06-21  Martin Baulig  <martin@ximian.com>
4721
4722         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
4723         left-hand side is not a nullable type; fixes #75328.
4724
4725 2005-06-21  Martin Baulig  <martin@ximian.com>
4726
4727         * typemanager.cs
4728         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
4729         (TypeManager.GetFullNameSignature): Likewise.
4730
4731         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
4732         `source.FullName' and `target.FullName' to check whether there are
4733         two conflicting definitions.
4734
4735 2005-06-21  Martin Baulig  <martin@ximian.com>
4736
4737         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
4738         a BoxedCast - also for reference types - to be compatible with csc.
4739
4740 2005-06-21  Martin Baulig  <martin@ximian.com>
4741
4742         * expression.cs (MemberAccess.DoResolve): Add support for nested
4743         types in a generic instance; fixes #75320.
4744
4745 2005-06-20  Martin Baulig  <martin@ximian.com>
4746
4747         * generic.cs (TypeManager.InferType): Also walk the class
4748         hierarchy for generic instances; fixes #75261.
4749
4750 2005-06-17  Martin Baulig  <martin@ximian.com>
4751
4752         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
4753         to make things work for corlib.
4754
4755 2005-06-15  Martin Baulig  <martin@ximian.com>
4756
4757         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
4758         obsolete `SecurityAction' values.
4759
4760 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4761
4762         * rootcontext.cs: Reset TargetExt as well.
4763         
4764 2005-06-09  Martin Baulig  <martin@ximian.com>
4765
4766         * delegate.cs (Delegate.VerifyMethod): Added
4767         `MethodGroupExpr old_mg' argument; inherit its
4768         `HasTypeParameters'; fix #75085.
4769
4770 2005-06-09  Martin Baulig  <martin@ximian.com>
4771
4772         * expression.cs (Invocation.OverloadResolve): Correctly handle
4773         generic methods for the SetMemberIsUsed(); fix #75064.
4774
4775 2005-06-09  Martin Baulig  <martin@ximian.com>
4776
4777         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
4778         fixes #75062.
4779
4780 2005-06-08  Martin Baulig  <martin@ximian.com>
4781
4782         * cs-parser.jay (nullable_type_or_conditional): If we put the
4783         nullable back and our `type' is a `ComposedCast', remove the
4784         nullable from it.  Fixes #75156.
4785
4786         * expression.cs (ComposedCast.RemoveNullable): New public method.
4787
4788 2005-06-08  Martin Baulig  <martin@ximian.com>
4789
4790         The big Iterators rewrite :-)
4791
4792         * iterators.cs: Rewrite this to use the anonymous methods framework.
4793
4794         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
4795         before the TypeContainers; see 2test-21.cs.
4796
4797         * class.cs
4798         (TypeContainer.DefineType): Don't create a new EmitContext if we
4799         already have one (this only happens if we're an Iterator).
4800         (TypeContainer.Define): Also call Define() on all our iterators.
4801         (Method.CreateEmitContext): Added support for iterators.
4802
4803         * anonymous.cs
4804         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
4805         (AnonymousContainer.CreateMethodHost): Moved here from
4806         AnonymousMethod and made abstract.
4807         (AnonymousContainer.CreateScopeType): New abstract method.
4808         (AnonymousContainer.IsIterator): New public property.
4809         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
4810         get the ScopeTypeBuilder rather than manually defining it here. 
4811         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
4812         iterators here.
4813
4814         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
4815         before RootContext.DefineTypes().
4816
4817         * codegen.cs (EmitContext.RemapToProxy): Removed.
4818         (EmitContext.CurrentAnonymousMethod): Changed type from
4819         AnonymousMethod -> AnonymousContainer.
4820         (EmitContext.ResolveTopBlock): Protect from being called twice.
4821         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
4822         (EmitContext.EmitThis): Removed the iterators hacks; use the
4823         anonymous methods framework for that.
4824
4825         * statement.cs
4826         (ToplevelBlock.Container): Make this a property, not a field.
4827         (ToplevelBlock.ReParent): New public method; move the
4828         ToplevelBlock into a new container.
4829         (Foreach.TemporaryVariable): Simplify.
4830
4831 2005-06-05  Martin Baulig  <martin@ximian.com>
4832
4833         * statement.cs (LocalInfo.CompilerGenerated): New flag.
4834         (Block.AddTemporaryVariable): New public method; creates a new
4835         `LocalInfo' for a temporary variable.
4836         (Block.EmitMeta): Create the LocalBuilders for all the temporary
4837         variables here.
4838         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
4839         non-iterator variables.
4840
4841 2005-06-05  Martin Baulig  <martin@ximian.com>
4842
4843         * statement.cs (Foreach.TemporaryVariable): Create the
4844         LocalBuilder in the Emit phase and not in Resolve since in some
4845         situations, we don't have an ILGenerator during Resolve; see
4846         2test-19.cs for an example.
4847
4848 2005-06-04  Martin Baulig  <martin@ximian.com>
4849
4850         The big Foreach rewrite - Part II.
4851
4852         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
4853         with `PropertyInfo ienumerator_getcurrent'.
4854
4855         * codegen.cs (VariableStorage): Removed.
4856
4857         * statement.cs
4858         (Foreach): Derive from Statement, not ExceptionStatement.
4859         (Foreach.CollectionForeach): New nested class.  Moved all the code
4860         dealing with collection foreach here.
4861         (Foreach.ForeachHelperMethods): Removed.
4862         (Foreach.TemporaryVariable): Implement IMemoryLocation.
4863
4864 2005-05-23  Martin Baulig  <martin@ximian.com>
4865
4866         * statement.cs (Try.DoResolve): Don't create a `finally' if we
4867         don't need to.  Fix #75014.
4868
4869 2005-05-26  Raja R Harinath  <rharinath@novell.com>
4870
4871         Improve user-defined conversion handling.
4872         * convert.cs (GetConversionOperators): Rewrite.  Return only the
4873         applicable operators.
4874         (AddConversionOperators): New.  Helper for GetConversionOperators.
4875         (FindMostEncompassedType, FindMostEncompassingType): Verify that
4876         there is only one most encompassed/encompassing type.
4877         (FindMostSpecificSource, FindMostSpecificTarget): Remove
4878         "applicable operator" handling.
4879         (UserConversion): Move cache here from GetConversionOperators.
4880         Directly cache the chosen operator, rather than the whole
4881         MethodGroup.
4882         (ExplicitNumericConversion): Fix buggy implementation of Decimal
4883         case.  Allow conversion of decimal to sbyte and byte too.
4884         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4885         New static methods.  Used to avoid allocating EmptyExpressions in
4886         convert.cs.
4887
4888 2005-05-24  Duncan Mak  <duncan@novell.com>
4889
4890         * ecore.cs (CastFromDecimal): New class for casting a decimal to
4891         another class, used in Convert.ExplicitNumericConversion.
4892         (CastToDecimal): New class, similar to above, but casts to
4893         System.Decimal, used in Convert.ImplicitNumericConversion and also
4894         in explicit convesion from double/float to decimal.
4895
4896         * convert.cs (ImplicitNumericConversion): Handle implicit
4897         conversions to System.Decimal.
4898         (ExplicitNumericConversion): handle explicit conversions to
4899         System.Decimal.
4900
4901         This fixes #68711.
4902         
4903 2005-05-20  Miguel de Icaza  <miguel@novell.com>
4904
4905         * typemanager.cs: Do not throw an exception in the TypeBuilder
4906         case, we take care of it on the TypeCode.
4907
4908 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
4909         
4910         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
4911         is back.
4912         
4913         * cs-parser.jay: Catch more lexical errors.
4914         
4915         * report.cs: Add one more Error method.
4916         
4917         * rootcontext.cs,
4918         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
4919
4920 2005-05-20  Martin Baulig  <martin@ximian.com>
4921
4922         * class.cs (TypeContainer.CircularDepException): Removed.
4923         (TypeContainer.DefineType): Removed the `InTransit' stuff.
4924         (TypeContainer.CheckRecursiveDefinition): Check for circular class
4925         (CS0146) and interface (CS0529) dependencies here.
4926
4927 2005-05-20  Martin Baulig  <martin@ximian.com>
4928
4929         * expression.cs (New.DoResolve): Move the CS0712 check above the
4930         CS0144 check; otherwise it can never be reached.
4931
4932 2005-05-20  Martin Baulig  <martin@ximian.com>
4933
4934         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
4935
4936 2005-05-20  Martin Baulig  <martin@ximian.com>
4937
4938         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
4939
4940         * typemanager.cs (TypeManager.IsAttributeType): New public method.
4941
4942 2005-05-19  Martin Baulig  <martin@ximian.com>
4943
4944         * delegate.cs
4945         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
4946         to disable error reporting.
4947
4948         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
4949         here since we don't want to report an error; see the new test-336.cs.
4950
4951 2005-05-19  Raja R Harinath  <rharinath@novell.com>
4952
4953         * statement.cs (ToplevelBlock.GetParameterReference)
4954         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
4955         Move here from class Block.
4956         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
4957         * expression.cs (ParameterReference.DoResolveBase): Likewise.
4958
4959 2005-05-18  Martin Baulig  <martin@ximian.com>
4960
4961         Fix #74978.
4962
4963         * flowanalysis.cs
4964         (FlowBranching.Reachability): Add non-static public And() and Or()
4965         methods.
4966         (FlowBranchingSwitch): New class; do the `break_origins' thing
4967         like in FlowBranchingLoop.
4968         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
4969         reachability, not just locals and parameters.
4970         (FlowBranching.MergeChild): Remove some of the hacks for loop and
4971         switch; MergeBreakOrigins() now takes care of that.
4972
4973 2005-05-18  Martin Baulig  <martin@ximian.com>
4974
4975         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4976         a loop and may leave it, reset the barrier; fixes #74974.
4977
4978 2005-05-16  Raja R Harinath  <rharinath@novell.com>
4979
4980         Fix test-382.cs.  Emit values of decimal constants.
4981         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
4982         Carved out of ...
4983         (TypeContainer.AddField): ... this.
4984         (TypeContainer.EmitFieldInitializers): Allow the list of fields
4985         with initializers to include 'Const's.
4986         (ClassPart.RegisterFieldForInitialization): Forward to
4987         PartialContainer.
4988         * const.cs (Const.Const): Pass initializer to base class.
4989         (Const.Define): In case of decimal constants, register them for
4990         initialization in a static constructor.
4991
4992 2005-05-14  Martin Baulig  <martin@ximian.com>
4993
4994         * statement.cs (Block.Resolve): Correctly handle unreachable code;
4995         do not call ResolveUnreachable() on unreachable statements in
4996         here, see the comment in the source code.
4997
4998 2005-05-13  Raja R Harinath  <rharinath@novell.com>
4999
5000         Fix #74934.
5001         * expression.cs (BinaryResolveOperator): If one of the operands of
5002         an equality comparison is 'null' and the other is a pointer type,
5003         convert the null to a NullPointer.
5004         * convert.cs (ImplicitReferenceConversion): If the expression is a
5005         NullLiteral and the target type is a pointer type, return a
5006         NullPointer instead.
5007         (ImplicitConversionStandard): Likewise.
5008
5009 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
5010         
5011         * cs-parser.jay: Set readonly context based on special constructs.
5012         
5013         * expression.cs (LocalVariableReference.DoResolveBase): Improved
5014         readonly variable error handling.
5015         
5016         * rootcontext.cs (EmitCode): Don't verify members when error
5017         occurred.
5018         
5019         * statement.cs (LocalInfo): Add reaodnly context information.
5020         (SetReadOnlyContext, GetReadOnlyContext): New methods.
5021
5022 2005-05-17  Martin Baulig  <martin@ximian.com>
5023
5024         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
5025         #70970. 
5026
5027 2005-05-13  Martin Baulig  <martin@ximian.com>
5028
5029         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
5030         handle unreachable blocks.
5031
5032 2005-05-13  Martin Baulig  <martin@ximian.com>
5033
5034         * class.cs
5035         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
5036         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
5037         #74905. 
5038
5039 2005-05-13  Martin Baulig  <martin@ximian.com>
5040
5041         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
5042         instance variable, not a local.  Fix #74873.
5043         (Block.ResolveUnreachable): Set it to true here.
5044
5045 2005-05-12  Martin Baulig  <martin@ximian.com>
5046
5047         * cs-parser.jay (property_declaration): Pass the `current_class',
5048         not the `current_container' to Property's .ctor.  Fixes #74912.
5049
5050 2005-05-11  Martin Baulig  <martin@ximian.com>
5051
5052         * typemanager.cs (Closure): Copy this from MCS and merge all the
5053         GMCS-specific changes into it.
5054
5055 2005-05-12  Raja R Harinath  <harinath@gmail.com>
5056
5057         Fix #74920.
5058         * typemanager.cs (unmanaged_enclosing_types): New.
5059         (IsUnmanagedType): Avoid infloops by using
5060         'unmanaged_enclosing_types' to talk with recursive invocations.
5061
5062 2005-05-11  Duncan Mak  <duncan@novell.com>
5063
5064         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
5065         continuing to process for 'arg'.
5066         (handle_preprocessing_directive): Check the argument of the #endif
5067         directive and report error CS1025 if there are any trailing
5068         characters.
5069
5070         According to the C# spec, having even whitespace after the #endif
5071         directive is illegal; however, because we call arg.TrimEnd ()
5072         beforehand, we have the same behavior as csc, allowing whitespace
5073         after the directive.
5074
5075         Fixes #74892.
5076
5077 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
5078
5079         Fix #74863.
5080         
5081         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
5082         (Constructor.GetObsoleteAttribute): Implemented correctly.
5083
5084 2005-05-10  Martin Baulig  <martin@ximian.com>
5085
5086         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
5087         resolve the type; fixes #74864.
5088         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
5089         in DoResolve(); fixes #74862.
5090
5091 2005-05-10  Martin Baulig  <martin@ximian.com>
5092
5093         * support.cs (ReflectionParameters.ParameterModifier): Use
5094         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
5095         and `ParameterAttributes.In'.  Fixes #74884.
5096
5097 2005-05-10  Martin Baulig  <martin@ximian.com>
5098
5099         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
5100         the cache if we're just looking for `MemberTypes.NestedType' in a
5101         generic instance.
5102
5103         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
5104         constraints if we're still resolving the type tree.
5105         (Expression.MemberLookup): If we're resolving the type tree, only
5106         look for `MemberTypes.NestedType' since we're only interested in
5107         getting types.
5108
5109         * class.cs (TypeContainer.DefineType): Don't resolve the type
5110         parameters here; do this later in ResolveType() after the type
5111         tree has been resolved.
5112         (TypeContainer.ResolveType): New public method; this is called
5113         after the type tree is resolved and before the types are being
5114         populated.  We resolve the generic constraints here.
5115         (TypeContainer.DoDefineMember): Check the constraints on our base
5116         class and interfaces.
5117
5118         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
5119         set the `ResolvingTypeTree' flag on the EmitContext.
5120
5121         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
5122
5123 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
5124
5125         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
5126         
5127         * expression.cs (Argument.GetParameterModifier): Turned to property.
5128         (Invocation.Error_InvalidArguments): Add more descriptive errors.
5129         
5130         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
5131         its C# equivalent.
5132         
5133 2005-05-09  Raja R Harinath  <rharinath@novell.com>
5134
5135         Fix #74852.
5136         * decl.cs (MemberCache.AddMethods): Register override methods,
5137         rather than non-override methods.
5138         * typemanager.cs (RegisterOverride): New.
5139         (IsOverride): Update.
5140
5141 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5142
5143         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
5144
5145 2005-05-06  Martin Baulig  <martin@ximian.com>
5146
5147         * attribute.cs
5148         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
5149         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
5150
5151 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5152
5153         Fix #73105.
5154         
5155         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
5156         recursive declaration.
5157         
5158         * statement.cs (Block.ResolveMeta): Report any error in resolving.
5159         
5160 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
5161
5162         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
5163         
5164         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
5165
5166 2005-05-05  Raja R Harinath  <rharinath@novell.com>
5167
5168         Fix #74797.
5169         * decl.cs (DeclSpace.FamilyAccessible): 
5170         Use TypeManager.IsNestedFamilyAccessible.
5171
5172         Fix reopened #64812.
5173         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
5174         internal'.
5175
5176 2005-05-04  Raja R Harinath  <rharinath@novell.com>
5177             Abin Thomas  <projectmonokochi@rediffmail.com>
5178             Anoob V E  <projectmonokochi@rediffmail.com>
5179             Harilal P R  <projectmonokochi@rediffmail.com>
5180
5181         Fix #64812.
5182         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
5183         allow access to all static members.
5184
5185 2005-05-04  Martin Baulig  <martin@ximian.com>
5186
5187         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
5188
5189 2005-05-04  Martin Baulig  <martin@ximian.com>
5190
5191         Fix #74655.
5192
5193         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
5194         section at the end; make things work if `default' is not the last
5195         section.        
5196
5197 2005-05-04  Martin Baulig  <martin@ximian.com>
5198
5199         Fix #70400.
5200
5201         * statement.cs (Switch): Replaced the `got_default' field with a
5202         `default_section' one.
5203         (Switch.CheckSwitch): Set `default_section' here.
5204         (Switch.Resolve): If we're a constant switch and the constant is
5205         not found, use the default section.
5206
5207 2005-05-03  Martin Baulig  <martin@ximian.com>
5208
5209         * expression.cs (ArrayAccess.EmitGetLength): New public method.
5210
5211         * statement.cs (Foreach.ArrayForeach): New nested class.
5212         (Foreach.TemporaryVariable): New nested class.
5213         (Foreach.EmitArrayForeach): Removed; this is now in the new
5214         ArrayForeach class.
5215
5216 2005-05-03  Raja R Harinath  <rharinath@novell.com>
5217
5218         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
5219         more conservative.
5220         (VerifyPendingMethods): Revert change below.
5221
5222         * typemanager.cs (IsOverride, RegisterNonOverride): New.
5223         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
5224         that used to trigger warning -28.  Remove warning -28.
5225         * expression.cs (Invocation.OverloadResolve): Use
5226         TypeManager.IsOverride to distinguish override methods.
5227
5228         Fix #74773.
5229         * pending.cs (VerifyPendingMethods): If a base type implements the
5230         requested interface, don't bother checking individual methods of
5231         the base type.  As a side-effect, this prevents the creation of
5232         unnecessary proxies.
5233
5234 2005-05-02  Martin Baulig  <martin@ximian.com>
5235
5236         Fix #70182.
5237
5238         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
5239         Also `And' the locals if the old vector is null.
5240         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
5241         null; in this case we basically reset all the variables.        
5242
5243 2005-05-02  Martin Baulig  <martin@ximian.com>
5244
5245         Fix #74529.
5246
5247         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
5248         Added `FlowBranching branching' argument; always `and' the
5249         variables instead of `or'ing them unless we're an infinite loop.
5250
5251         * statement.cs (While.Resolve): Create a new sibling unless we're
5252         infinite.       
5253
5254 2005-05-02  Martin Baulig  <martin@ximian.com>
5255
5256         Fix #70140.
5257
5258         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
5259         arguments; use it instead of creating a new TopLevelBlock.
5260         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
5261         our ConstructorInitializer.
5262
5263         * statement.cs
5264         (TopLevelBlock.TopLevelBranching): New public property.
5265         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
5266         and create our `TopLevelBranching'.
5267
5268         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
5269         anonymous method host, use `block.TopLevelBranching' rather than
5270         creating a new branching.
5271
5272 2005-04-20  Miguel de Icaza  <miguel@novell.com>
5273
5274         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
5275         a ScopeInfo, if any of the current children is a child of the new
5276         entry, move those children there.
5277
5278 2005-04-30  Martin Baulig  <martin@ximian.com>
5279
5280         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
5281         at the beginning of a SwitchSection.  Fix #73335.
5282
5283 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
5284
5285         Fix #74378
5286         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
5287         
5288         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
5289         (FieldExpr.DoResolve): Obsolete members are ignored for field
5290         initializers.
5291         
5292 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
5293
5294         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
5295         of arrays detection.
5296
5297         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
5298         verification.
5299         (Field.VerifyClsCompliance): Volatile fields are not compliant.
5300
5301         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
5302         arrays report.
5303
5304 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
5305
5306         * cs-parser.jay: Use the prefered version of -unsafe in error
5307         message.
5308
5309 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
5310
5311         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
5312         circumstances.
5313
5314 2005-04-20  John Luke  <john.luke@gmail.com>
5315
5316         * driver.cs: fix typo in error message, --outout to --output
5317
5318 2005-04-30  Martin Baulig  <martin@ximian.com>
5319
5320         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
5321         handle the .NET 2.x security attributes.
5322
5323 2005-04-30  Martin Baulig  <martin@ximian.com>
5324
5325         * typemanager.cs
5326         (TypeManager.ExpandInterfaces): Don't add things twice.
5327
5328         * class.cs
5329         (TypeContainer.VerifyClsCompliance): Allow generic instances.
5330
5331 2005-04-29  Martin Baulig  <martin@ximian.com>
5332
5333         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
5334
5335         * anonymous.cs: Added support for anonymous generic methods.
5336
5337 2005-04-29  Martin Baulig  <martin@ximian.com>
5338
5339         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
5340         generic instances.
5341
5342 2005-04-29  Martin Baulig  <martin@ximian.com>
5343
5344         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
5345
5346         * expression.cs (New.DoResolve): Fix the CS0304 check.
5347
5348 2005-04-29  Martin Baulig  <martin@ximian.com>
5349
5350         * typemanager.cs (TypeManager.GetFullName): Updated to the new
5351         naming schema.
5352
5353         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
5354         explicit interface implementation, compare the interface types.
5355         (MethodData.Define): Use the new naming scheme from the latest
5356         .NET 2.x beta2.
5357         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
5358
5359         * decl.cs (MemberName.GetMemberName): Removed.
5360         (MemberName.MethodName, FullName): New properties.
5361
5362 2005-04-25  Raja R Harinath  <rharinath@novell.com>
5363
5364         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
5365
5366 2005-04-22  Martin Baulig  <martin@ximian.com>
5367
5368         * generic.cs (GenericMethod): Create the EmitContext in the
5369         `Define()'; in `Define(MethodBuilder)', create the type parameters
5370         before calling `Define()'.  Fixes #73933.
5371
5372 2005-04-22  Martin Baulig  <martin@ximian.com>
5373
5374         * generic.cs
5375         (Constraints.Resolve): Make things work wrt. the new type lookup system.
5376         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
5377
5378         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
5379         ConstructedType, check its constraints.
5380
5381 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
5382
5383         * codegen.cs (InRefOutArgumentResolving): New field.
5384         
5385         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
5386         fields outside contructor.
5387         
5388         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
5389         
5390 2005-04-19  Miguel de Icaza  <miguel@novell.com>
5391
5392         * anonymous.cs (CaptureContext.EmitParameterInstance): The
5393         parameter code was not completed ever, so it was not as up-to-date
5394         as local variables.  Must finish it.
5395
5396         The bug fix was to compare the Toplevel of the block, not the
5397         current block.  Thanks for Ben for pointing this out. 
5398
5399 2005-04-19  Raja R Harinath  <rharinath@novell.com>
5400
5401         * decl.cs (AddMethods): Use the declaring type of the problem
5402         method to determine if we want to squash a warning.
5403
5404 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
5405
5406         * attribute.cs: Removed debug output.
5407
5408         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
5409         
5410         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
5411         Report.Stderr.
5412         
5413 2005-04-18  Raja R Harinath  <rharinath@novell.com>
5414
5415         Fix #74481.
5416         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
5417         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
5418         all null comparisons against reference types.
5419
5420 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
5421
5422         Fix# 74565
5423         * class.cs (TypeContainer.CircularDepException) New nested
5424         exception class.
5425         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
5426         (TypeContainer.DefineType): Removed error, reset InTransit before
5427         exit.
5428         (Class.DefineType): Throw exception when is in Transit.
5429         Catch exception and report error.
5430         (Struct.DefineType): Throw exception when is in Transit.
5431         Catch exception and report error.
5432         (Interface.DefineType): Throw exception when is in Transit.
5433         Catch exception and report error.
5434
5435         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
5436         handle nested exception handlers.
5437
5438         * flowanalysis.cs (InTryWithCatch): New method, search for try with
5439         a catch.
5440
5441         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
5442         InFinally and InCatch storage.
5443
5444         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
5445         (Catch.Resolve): Set and Restore ec.InCatch.
5446         (Try.Resolve): Set and Restore ec.InFinally.
5447         (Try.HasCatch): True when try has catch.
5448
5449 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
5450
5451         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
5452           for the same event member, so exclude such cases from warning 419.
5453           Fixed bug #74633.
5454
5455 2005-04-16  Miguel de Icaza  <miguel@novell.com>
5456
5457         * expression.cs (Binary.ResolveOperator): Apply patch from John
5458         Luke to fix bug 59864: operators &, | and ^ on enumerations
5459         require that the same enum type on both sides.
5460
5461         * driver.cs: Add warnings to old flag usage, this is to assist
5462         people who produce Makefiles and hope that the Makefiles will be
5463         used on Windows.
5464
5465         * class.cs (TypeContainer.EmitType): Moved the definition of the
5466         special $PRIVATE$ field from the resolve phase to the Emit phase.
5467         During resolve we do not know if we are a struct with
5468         HasExplicitLayout, we know this only after the attributes for the
5469         type are emitted.
5470
5471         Set the FieldOffset to zero on the dummy field that we create for
5472         the class.   Fixes 74590.
5473
5474 2005-04-16  Raja R Harinath  <rharinath@novell.com>
5475
5476         Fix #73834.
5477         * ecore.cs (PropertyExpr.resolved): New.
5478         (DoResolve): Use it to handle a case of double resolution here.
5479         Handle a case of identical-name-and-type-name.
5480         * expression.cs (ArrayCreation.CheckIndices): Avoid double
5481         resolution by storing the results of expression resolution back
5482         into the "probes" array.
5483
5484 2005-04-15  Raja R Harinath  <rharinath@novell.com>
5485
5486         Fix cs0208-7.cs and cs0208-8.cs.
5487         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5488         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5489         error reporting to point out the reason a struct is not unmanaged.
5490
5491 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5492
5493         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5494           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5495
5496 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5497
5498         Fix #74528.
5499         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5500         IdenticalNameAndTypeName here.
5501         (EventExpr.InstanceResolve): Likewise.
5502
5503 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5504
5505         C# 2.0 DefaultCharSetAttribute implementation
5506         
5507         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5508         which allows us to set GlobalNamespace for every resolve.
5509         (Attribute.ResolveArguments): Cut from Resolve.
5510         (Attribute.GetCharSetValue): Returns CharSet named argument.
5511         (Attribute.DefinePInvokeMethod): Gets default charset from
5512         module settings.
5513         (GlobalAttribute.ResolveAsTypeStep): Override.
5514         (GlobalAttribute.ResolveArguments): Override.
5515         
5516         * class.cs (TypeAttr): Is protected.
5517         
5518         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5519         (ModuleClass.DefaultCharSetType): New memeber.
5520         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5521         
5522         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5523         charset from module.
5524         
5525         * delegate.cs (TypeAttr): Override.
5526         (Delegate.DefineType): Use this TypeAttr.
5527         
5528         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5529         at very early stage (before types are defined) to resolve model
5530         module attributes. It will probably not work with corlib but it
5531         should be ok.
5532         
5533         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5534         charset from module.
5535         
5536         * typemanager.cs (default_charset_type): New type.
5537
5538 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5539
5540         * decl.cs (MemberCache.AddMethods): Don't warn if
5541         System.Object.Finalize has buggy MethodAttributes.
5542
5543         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5544         removed below.
5545
5546 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5547
5548         * doc.cs : detect ambiguous reference to overloaded members.
5549           Fixed bug #71603. MS 1.1 csc does not detect it.
5550
5551 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5552
5553         * doc.cs : delegates must not be referenced with parameters.
5554           Fixed bug #71605.
5555
5556 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5557
5558         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5559
5560 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5561
5562         * driver.cs (MainDriver): Stop processing if the CLS stage found
5563         errors. 
5564
5565         (CompilerCallableEntryPoint.InvokeCompiler): Always
5566         reset after execution;   Take a TextWriter argument for the
5567         output.
5568
5569         * report.cs: Use the error stream instead of hardcoding stderr. 
5570
5571 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5572
5573         * class.cs: Reduce code paths to test, too small of an
5574         optimization to make it worth the extra testing.  Always perform
5575         it. 
5576
5577 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5578
5579         Fix #74510.
5580         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5581         operators that had errors reported on them.
5582
5583 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5584
5585         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5586         argument types.
5587         (Attribute.Resolve): Add named argument type checking.
5588         
5589         * class.cs (FixedField.Define): Use IsPrimitiveType
5590         
5591         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5592         
5593         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5594         unsafe parameter types.
5595         
5596         * statement.cs (Using.ResolveExpression): Add better error description.
5597         
5598         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5599         
5600 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5601
5602         Fix #74484.
5603         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5604         AttributeUsageAttribute in the emitcontext of the attribute class,
5605         not in the emitcontext of the attributable entity it was attached to.
5606         * cs-parser.jay: Use 'current_class', not 'current_container',
5607         when creating a GlobalAttribute.
5608
5609 2005-04-08  Alp Toker  <alp@atoker.com>
5610
5611         * pending.cs: The fix to #58413 failed to compile methods implementing
5612         interfaces with/without params modifiers and vice versa, even though
5613         params modifiers aren't part of the signature. Make the modifier check
5614         less strict as in csc.
5615
5616 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
5617             Anoob V E  <projectmonokochi@rediffmail.com>
5618             Harilal P R  <projectmonokochi@rediffmail.com>
5619
5620         Fix #58413.
5621         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
5622         modifiers of pending methods.
5623         (PendingImplementation.PendingImplementation): Initialize it.
5624         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
5625         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
5626         with ParameterData.  Add check for modifiers.
5627         * class.cs (MethodData.Define): Update to changes.
5628
5629 2005-04-07  Raja R Harinath  <rharinath@novell.com>
5630
5631         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
5632
5633 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
5634
5635         * class.cs (PropertyMethod.Define): Check private accessor in abstract
5636         property.
5637         
5638         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
5639         
5640         * rootcontext.cs,
5641         * typemanager.cs: Registered RequiredAttributeAttribute.
5642         
5643 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
5644
5645         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
5646         Warning CS0169 is back at level 3.
5647         (IMethodData.SetMemberIsUsed): New method.
5648         
5649         * decl.cs (IsUsed): New value; moved from FieldBase.Status
5650         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
5651         
5652         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
5653
5654         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
5655         contants.
5656         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
5657         is used.
5658         
5659         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
5660         is used.
5661         
5662         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
5663         to avoid the problems with nested types.
5664
5665 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
5666             Anoob V.E  <projectmonokochi@rediffmail.com>
5667             Harilal P.R  <projectmonokochi@rediffmail.com>
5668             Raja R Harinath  <rharinath@novell.com>
5669
5670         Fix #73820.
5671         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
5672         attribute.
5673         * typemanager (GetConstructor): Make public.
5674
5675 2005-04-05  John Luke  <john.luke@gmail.com>
5676             Raja R Harinath  <rharinath@novell.com>
5677
5678         Fix #62232.
5679         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
5680         struct too.  Return false quicker in a few cases.
5681         (VerifyUnManaged): Use it.
5682
5683 2005-04-05  Raja R Harinath  <rharinath@novell.com>
5684
5685         Fix #74041.
5686         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
5687         not 'unreachable_seen'.
5688
5689 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
5690
5691         * attribute.cs (Attribute.GetValue): Removed unused.
5692         
5693         * codegen.cs (CodeGen.TrimExt): Removed unused.
5694         
5695         * cs-parser.jay (output): Removed unused.
5696         
5697         * cs-tokenizer.cs (hex_digits): Removed unused.
5698         
5699         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
5700         
5701         * expression.cs (Indirection.LoadExprValue): Removed unused.
5702         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
5703         
5704         * iterators.cs (Iterator.param_types): Removed unused.
5705         
5706         * statement.cs (Goto.block): Removed unused.
5707         (ToplevelBlock.did): Removed unused.
5708         (Switch.ResolveConstantSwitch): Removed unused.
5709
5710 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
5711
5712         * rootcontext.cs: Allow mcs to bootstrap with the compilation
5713         resetting thingy.
5714
5715 2005-04-19  Martin Baulig  <martin@ximian.com>
5716
5717         Merged r42462 from MCS and made it work for GMCS.
5718
5719         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
5720
5721         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
5722
5723 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5724
5725         Fix #74232 and cs0208-3.cs.
5726         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
5727         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
5728         unmanaged type.  Don't use FieldBuilders when 't' is a
5729         TypeBuilder.  Use ModFlags and MemberType fields.
5730         * class.cs (MemberBase.member_type): Rename from MemberType.
5731         (MemberBase.MemberType): New property.  Determines member_type on
5732         demand.
5733         (MemberBase.DoDefine): Don't initialize MemberType here.
5734         (FieldMember.Define): Likewise.
5735
5736 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
5737
5738         Fix #74241
5739         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
5740         Attributes are emitted there.
5741         
5742 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5743
5744         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
5745         keyword in 'partial enum' too.
5746         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
5747         is not allowed).
5748         Report from Kamil Skalski <nazgul@omega.pl>.
5749
5750         Fix #74309.
5751         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
5752         have partial containers too.
5753
5754         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
5755         in block' checks to Block.CheckInvariantMeaningInBlock.
5756         * statement.cs (Block.GetKnownVariableInfo): Make private.
5757         (Block.IsVariableUsedInChildBlock): Remove.
5758         (Block.IsVariableUsedInBlock): Likewise.
5759         (Block.CheckInvariantMeaningInBlock): New.  Show location of
5760         conflicting declaration.
5761         (Block.AddVariable): Make error messages less long-winded and more
5762         specific.  Show location of conflicting declaration.
5763         * parameter.cs (Parameters.Location): New readonly property.
5764
5765 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5766
5767         Clean up semantics of invoking ResolveMemberAccess.
5768         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
5769         can have an instance, ensure that we pass in a non-TypeExpression
5770         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
5771         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
5772         argument.  Update to changes and simplify.
5773         (FieldExpr.Emitinstance): Remove CS0120 check.
5774         (PropertyExpr.EmitInstance): Likewise.
5775         * expression.cs (Argument.Resolve): Likewise.
5776         (Invocation.DoResolve): Update to changes in semantics of
5777         InstanceExpression.
5778
5779 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
5780
5781         Fix #74241
5782         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
5783         customization.
5784         
5785         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
5786
5787 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5788
5789         Fix difference in behaviour with commandline invocation.
5790         * driver.cs (Driver.Reset): New.
5791         (CompilerCallableEntryPoint): Call it.
5792
5793         * statement.cs (If.Resolve): Avoid spurious "uninitialized
5794         variable" warnings if the boolean expression failed to resolve.
5795
5796 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
5797
5798         * attribute.cs: Fix the union of several permissions when some of them
5799         are unrestricted (so the result isn't an unrestricted permission set).
5800         Fix #74036.
5801
5802 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5803
5804         * ecore.cs (MemberExpr): New class.  Convert from interface
5805         IMemberExpr.
5806         (MemberExpr.ResolveMemberAccess): Refactor and move here from
5807         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
5808         error checks.
5809         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
5810         (MethodGroupExpr.IsExplicitImpl): Remove.
5811         (Expression.GetFieldFromEvent): Remove.
5812         (SimpleName.MemberStaticCheck): Remove.
5813         (SimpleName.DoSimpleNameResolve): Update to changes.
5814         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
5815         (MemberAccess.IdenticalNameAndTypeName): Remove.
5816         (MemberAccess.error176): Move to MemberExpr.
5817         (MemberAccess.DoResolve): Update to changes.
5818         (BaseAccess.DoResolve): Likewise.
5819
5820 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
5821
5822         C# 2.0 Conditional attribute class implementation
5823         
5824         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
5825         Analyzes class whether it has attribute which has ConditionalAttribute
5826         and its condition is not defined.
5827         
5828         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
5829         (Class.IsExcluded): New method. Search for at least one defined
5830         condition in ConditionalAttribute of attribute class.
5831
5832 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5833
5834         * ecore.cs (PropertyExpr): Derive from Expression, not
5835         ExpressionStatement.
5836         (PropertyExpr.EmitStatement): Remove.
5837
5838 2005-03-29  Raja R Harinath  <rharinath@novell.com>
5839
5840         Fix #74060.
5841         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
5842         internal field "value__" of an enum be private.  The examples for
5843         "value__" that I found on MSDN all used FieldAttributes.Private.
5844
5845         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
5846         Don't mention IL method attribute names.
5847
5848         Fix #47991.  Remove a TODO.
5849         * statement.cs (Block.Toplevel): Make into a field.
5850         (Block.Parameters): Move into ToplevelBlock.
5851         (Block.known_variables): Rename from child_variable_names.
5852         (Block.Block): Remove variants that take Parameters.  Initialize
5853         'Toplevel' with the immediately surrounding toplevel block.
5854         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
5855         LocalInfo parameter.
5856         (Block.GetKnownVariableInfo): New.
5857         (Block.IsVariableNameUsedInChildBlock): Update.
5858         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
5859         the block, even though it may not be in scope.
5860         (Block.AddVariable): Remove Parameters parameter.  Use
5861         Toplevel.Parameters instead.
5862         (Block.AddConstant): Remove Parameters parameter.
5863         (Block.GetParameterReference): Update to use Toplevel.Parameters.
5864         (Block.IsParamaterReference): Likewise.
5865         (Block.IsLocalParameter): Likewise.  Simplify a lot.
5866         (ToplevelBlock.Parameters): New.  Moved from Block.
5867         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
5868         initialize Parameters to a non-null value.
5869         * cs-parser.jay: Update to changes.
5870         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
5871         simple names that mean different things in the same block.  Use
5872         Block.IsVariableNameUsedInBlock.
5873
5874 2005-03-28  Raja R Harinath  <rharinath@novell.com>
5875
5876         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
5877
5878 2005-03-26  Raja R Harinath  <harinath@acm.org>
5879
5880         Fix #73038.
5881         * assign.cs (Assign.DoResolve): When the RHS of an assignment
5882         fails to resolve, ensure that the LHS is still resolved as an
5883         lvalue.
5884
5885 2005-03-25  Raja R Harinath  <harinath@acm.org>
5886
5887         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
5888         ec.ContainerType.
5889         (Enum.current_ec): Remove.
5890         (Enum.LookupEnumValue): Remove EmitContext argument.
5891         Just uses the one created during DefineType.
5892         (Enum.FindMembers): Update.
5893         * expression.cs (MemberAccess.DoResolve): Update.
5894
5895 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
5896
5897         * assign.cs (Assign.DoResolve): Check for CS1717 when
5898         source and target are same (uses Equals).
5899
5900         * expression.cs (LocalVariableReference, ParameterReference,
5901         This): Implemented Equals, GetHashCode.
5902
5903         * statement.cs (Block.GetParameterReference): Removed useless
5904         local variable.
5905
5906 2005-03-22  Raja R Harinath  <rharinath@novell.com>
5907
5908         Fix cs0128.cs
5909         * statement.cs (Block.AddVariable): Ensure that we skip implicit
5910         blocks before deciding whether the error is cs0136 or cs0128.
5911
5912         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
5913         (using_alias_directive, using_namespace_directive): Pass
5914         MemberName, not an expression to Namespace.UsingAlias and
5915         Namespace.Using.
5916         (MakeName): Use the MemberName of the namespace.
5917         * namespace.cs (Namespace.MemberName): New.
5918         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
5919         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
5920         Likewise.
5921         * decl.cs (MemberName.Name): Make readonly.
5922         (MemberName.FromDotted): New "constructor".
5923         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
5924         (MemberCore.Name): Compute from MemberName on demand.
5925         (MemberCore.SetMemberName): Provide a way to change the
5926         MemberName.
5927         (MemberCore.AddToContainer): Don't take a fullname parameter.
5928         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
5929         fully qualified name of the container to the member name.
5930         (TypeContainer.AddToTypeContainer): Use a fully qualified name
5931         only if the type is a member of the root container.
5932         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
5933         MemberName.Left rather than searching for an embedded ".".
5934         (PartialContainer.CreatePart): Update to changes in RootContext.
5935         (MemberBase.ShortName): Turn into a property.  Use
5936         MemberCore.SetMemberName.
5937         (MemberBase.ExplicitInterfaceName): Remove.
5938         (MemberBase.UpdateMemberName): Remove.
5939         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
5940         (PropertyBase.SetMemberName): New override.
5941         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
5942         (Tree.GetDecl): New.
5943         (Tree.AllDecls): Rename from Decls.
5944         * attribute.cs, enum.cs, report.cs: Update to changes.
5945         * driver.cs (MainDriver): Use MemberName.FromDotted on
5946         RootContext.MainClass.
5947
5948 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
5949
5950         * class.cs (FixedField.Define): Check for CS1664 and more sanity
5951         checks.
5952
5953         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
5954
5955 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
5956
5957         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
5958         property accessor modifiers.
5959
5960         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
5961         fixed buffer attribute (CS1716).
5962         (PropertyMethod.HasCustomAccessModifier): When property accessor
5963         has custom modifier.
5964
5965         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
5966         modifiers.
5967         (PropertyExpr.DoResolveLValue): Add CS0272.
5968
5969 2005-03-17  Miguel de Icaza  <miguel@novell.com>
5970
5971         * convert.cs: When converting to a pointer, use the proper Conv.U
5972         or Conv.I depending on the source data type.
5973
5974         * cs-tokenizer.cs: Make the size for large decimal constants,
5975         fixes #72957.
5976
5977 2005-03-17  Martin Baulig  <martin@ximian.com>
5978
5979         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
5980         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
5981
5982 2005-03-17  Martin Baulig  <martin@ximian.com>
5983
5984         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
5985         to bool so we can return an error condition.
5986         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
5987         returned an error.
5988
5989 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
5990
5991         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
5992         attributes.
5993
5994 2005-03-16  Raja R Harinath  <rharinath@novell.com>
5995
5996         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
5997         Refactor to avoid traversing the list of assemblies, and to avoid
5998         string concatenation.
5999         * typemanager.cs (guid_attr_type): Remove.
6000         (negative_hits, pointers, references): Remove hashes.
6001         (type_hash): New.
6002         (GetConstructedType): New.  Uses type_hash to handle constructed
6003         types (arrays, references, pointers).
6004         (GetReferenceType, GetPointerType): Use it.
6005         (GetNestedType): New.  Uses type_hash to handle nested types of
6006         reflected types.
6007         (LookupType, LookupTypeDirect): Remove.
6008         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
6009         'types' hash and LookupTypeReflection directly.
6010         (params_string, params_object): Use GetConstructedType.
6011         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
6012         top-level types.
6013         (Namespace.Lookup): Use cached_types.
6014         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
6015         provided by old TypeManager.LookupType.
6016         * rootcontext.cs (MakeFQN): Remove.
6017         * decl.cs (DeclSpace.MakeFQN): Likewise.
6018         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
6019         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
6020         TypeManager.GetConstructedType.
6021         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
6022
6023 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
6024
6025         * cs-parser.jay: Fix build.
6026
6027 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
6028
6029         * class.cs (TypeContainer.CircularDepException) New nested
6030         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
6031
6032         * cs-parser.jay: Reports CS1527 for any namespace element.
6033
6034         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
6035         Added CS0407.
6036
6037         * expression.cs (ParameterReference.IsAssigned): Changed error to
6038         CS0269.
6039         (Error_WrongNumArguments): Moved CS0245 detection here.
6040
6041         * statement.cs (Return.Resolve): Add CS1622 report.
6042
6043 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
6044
6045         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
6046
6047 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
6048
6049         * attribute.cs expression.cs: Get rid of some allocations.
6050
6051 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
6052
6053         * doc.cs : just eliminate the latest change.
6054
6055 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6056
6057         * doc.cs : commented out the latest change. It breaks xml-030.cs
6058
6059 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6060
6061         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
6062           fail. So invoke CreateType() in FindDocumentedType().
6063
6064 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
6065
6066         * cs-tokenizer.cs : added IsKeyword().
6067         * doc.cs : Detect keyword incorrectly used as identifier.
6068           Allow identifiers prefixed by @.
6069
6070 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
6071
6072         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
6073         It caused exception in namespace resolving (again!).
6074         
6075         * class.cs (Class.ctor): Removed exit.
6076         (PropertyMethod.ctor): ditto.
6077         
6078         * codegen.cs (Codegen.Reset): Reset static data.
6079         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
6080         
6081         * cs-tokenizer.cs (Cleanup): Removed.
6082         
6083         * driver.cs (GetSystemDir): Rewrote to one line command.
6084         It caused problem with unloaded dynamic modules.
6085         (UnixParseOption): Removed Exit.
6086         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
6087         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
6088         Now can be mcs used as library.
6089         
6090         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
6091         empty location.
6092         
6093         * location.cs (Reset): Reset static data.
6094         
6095         * namespace.cs (Reset): Reset static data.
6096         
6097         * report.cs (Report.Reset): Reset static data.
6098         
6099         * rootcontext.cs (RootContext.Reset): Reset static data.
6100         
6101         * tree.cs (RootTypes.ctor): Use Location.Null
6102         
6103         * typemanager.cs (TypeManager.Reset): Reset static data.
6104         (CoreLookupType): Removed Exit.
6105         (TypeHandle.Reset): Reset static data.
6106         
6107 2005-03-10  Raja R Harinath  <rharinath@novell.com>
6108
6109         Fix #73516.
6110         * typemanager.cs (ComputeNamespaces): Import namespaces from
6111         referenced modules too.
6112
6113 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6114
6115         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
6116         than '.'.
6117
6118 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6119
6120         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
6121         enclosing DeclSpace.  This ensures that a name-lookup populates
6122         more caches and there are fewer 'TypeExpression's.  Carve out
6123         nested type lookup into ...
6124         (LookupNestedTypeInHierarchy): ... this.
6125
6126 2005-04-15  Martin Baulig  <martin@ximian.com>
6127
6128         Merged r41590 from MCS and make it work in the generics land.
6129
6130         * generic.cs (TypeParameter.UpdateConstraints): Removed the
6131         `check' argument.
6132
6133         * class.cs (PartialContainer.UpdateConstraints): Removed.
6134         (PartialContainer.CheckConstraints): Removed.
6135         (PartialContainer.SetParameterInfo): Store the constraints here.
6136         (PartialContainer.DefineTypeParameters): New public method;
6137         resolve the type parameter's constraints here.  Note that the
6138         PartialContainer doesn't have an EmitContext anymore, so we must
6139         do this in the ClassPart.
6140
6141 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6142
6143         Clean up a few partial-class semantics.  
6144         Fixes test-357.cs and cs1618-2.cs.
6145         * cs-parser.jay (struct_declaration): Use 'current_class' as
6146         parent of newly-created struct.  Remove call to Register ().
6147         Use 'pop_current_class' to complete handing the current struct.
6148         (interface_declaration): Likewise.
6149         (class_declaration): Likewise.
6150         (enum_declaration): Use 'current_class' as parent of newly created
6151         enum.
6152         (delegate_declaration): Likewise.
6153         (pop_current_class): New function.  This is used to handle closing
6154         up the 'current_class' and 'current_container', and pointing them
6155         to the enclosing class/container.
6156         (CSharpParser): Initialize 'current_class' too.
6157         * decl.cs (MemberCore): Add check for invariant: a partial
6158         container is not a parsed entity, and thus does not enclose any
6159         parsed members.
6160         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
6161         (DeclSpace.BaseTypeExpr): Use it.
6162         (DeclSpace.LookupType): Add check for invariant.
6163         * class.cs (TypeContainer): Add check for invariant: a nested
6164         class should have the same NamespaceEntry as its enclosing class.
6165         (TypeContainer.EmitFieldInitializers): Make virtual.
6166         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
6167         MemberCore.
6168         (TypeContainer.Register): Remove.
6169         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
6170         null.  Use TypeResolveEmitContext for resolving base types and
6171         interfaces.  Move initialization of Parts.TypeBuilder here from
6172         ...
6173         (TypeContainer.DefineNestedTypes): ... here.
6174         (PartialContainer): Take a Namespace not a NamespaceEntry.
6175         (PartialContainer.Create): Don't use Register.  Call the
6176         appropriate Add... function directly.
6177         (ClassPart): Take both the PartialContainer and the enclosing
6178         class as constructor arguments.
6179         (ClassPart.EmitFieldInitializers): Override.
6180         (ClassPart.PartFindNestedTypes): Remove.
6181         (FieldBase.GetInitializerExpression): Resolve the initializer
6182         expression in the emit context of the enclosing class.
6183         * tree.cs (RootTypes): Remove Register ().
6184         
6185 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
6186
6187         * cs-parser.jay: Removed CS0134.
6188         
6189         * driver.cs: Removed CS1901.
6190         
6191         * expression.cs (SizeOf.DoResolve): Don't report CS0233
6192         for predefined types.
6193
6194 2005-03-07  Duncan Mak  <duncan@novell.com>
6195
6196         * codegen.cs (Save):  Catch UnauthorizedAccessException as
6197         well. Fixes bug #73454.
6198
6199 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
6200
6201         * cs-tokenizer.cs (xtoken): Add CS1035.
6202         
6203         * class.cs (MethodData.Define): Add CS0683.
6204         (FieldMember.ctor): Add CS0681.
6205
6206 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6207
6208         * ecore.cs (SimpleName.DoResolve): Rename from
6209         SimpleName.DoResolveAllowStatic.
6210         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
6211         Pass 'intermediate' flag to MemberStaticCheck.
6212         (SimpleName.MemberStaticCheck): Skip "static check" only in case
6213         of "intermediate" lookups via MemberAccess.
6214         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
6215         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
6216
6217 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6218
6219         Fix #73394.
6220         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
6221         slipped in because of variable names that are identical to a
6222         builtin type's BCL equivalent ('string String;', 'int Int32;').
6223         (PropertyExpr.EmitInstance): Likewise.
6224
6225 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
6226
6227         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
6228         
6229         * report.cs (warning_ignore_table): Made public.
6230
6231 2005-03-04  Raja R Harinath  <rharinath@novell.com>
6232
6233         Fix #73282.
6234         * class.cs (MethodData.Emit): Pass 'container' to
6235         container.GetObsoleteAttribute instead of 'container.Parent'.
6236
6237 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
6238
6239         * cs-parser.jay: Add 1534 error test.
6240
6241         * iterators.cs (Yield.CheckContext): Add error 1629.
6242         (Iterator.ctor): Save unsafe modifier.
6243         (MoveNextMethod.DoEmit): Restore unsafe context.
6244
6245         * namespace.cs (UsingAlias): Better error message.
6246
6247 2005-03-03  Dan Winship  <danw@novell.com>
6248
6249         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
6250         the warning message [#73219]
6251
6252 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6253
6254         Fix compile with MCS 1.0.0.0.
6255         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
6256         w_restore to not depend on string constant folding.
6257
6258 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6259
6260         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
6261         CS0246 check to users who passed 'silent = false'.
6262         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
6263         check.
6264         (SimpleName.SimpleNameResolve): Update.
6265         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
6266         (MemberAccess.IdenticalNameAndTypeName): Update.
6267         * doc.cs (FindDocumentedTypeNonArray): Update.
6268
6269 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
6270
6271         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
6272         * parameters.cs (ComputeAndDefineParameters): Remove.
6273         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
6274         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
6275         Use GetParameterInfo.
6276
6277 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
6278
6279         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
6280
6281 2005-03-02  Raja R Harinath  <rharinath@novell.com>
6282
6283         Unify DeclSpace.LookupType and DeclSpace.FindType.
6284         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
6285         is in charge of defining nested types on demand.
6286         (DeclSpace.LookupType): Use it when the current_type is a
6287         TypeBuilder.  Use LookupTypeDirect for reflected types.
6288         (DeclSpace.FindType): Remove.
6289         (DeclSpace.LookupInterfaceOrClass): Likewise.
6290         (DeclSpace.DefineTypeAndParents): Likewise.
6291         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
6292         DeclSpace.LookupType.
6293         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
6294         * typemanager.cs (LookupType): Simplify.
6295         (AddUserType): Remove type from negative_hits.
6296         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
6297         * class.cs (TypeContainer.FindMembers): Move handling of nested
6298         types ...
6299         (TypeContainer.FindMembers_NestedTypes): ... here.
6300         (TypeContainer.FindNestedType): Implement override.
6301         (ClassPart.FindNestedType): Delegate to PartialContainer.
6302         (ClassPart.PartFindNestedType): Looks up the nested types of the
6303         part alone.
6304
6305 2005-04-14  Martin Baulig  <martin@ximian.com>
6306
6307         * generic.cs (ConstructedType): Moved all the type lookup and
6308         nested class logic into SimpleName.
6309         (ConstructedType.ResolveConstructedType): Our underlying type is
6310         already fully resolved; all the type lookup stuff is in
6311         SimpleName.
6312
6313         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
6314         constructed types here instead of in ConstructedType.
6315
6316         * decl.cs (MemberName.GetTypeExpression): Always create a
6317         SimpleName, not a ConstructedType.
6318         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
6319
6320 2005-03-02  Martin Baulig  <martin@ximian.com>
6321
6322         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6323         static constructor in static classes.
6324
6325 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
6326
6327         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
6328         sizeParamIndex is not specified.
6329
6330 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
6331
6332         Fix #73117
6333         * report.cs (WarningMessage.IsEnabled): Missing null check.
6334
6335 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6336
6337         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
6338         in the fields and not in the properties.
6339
6340 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
6341
6342         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
6343         fields as well.
6344
6345 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6346
6347         * attribute.cs: Small refactoring (improved robustness).
6348         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
6349         (ValidateGuid): Removed.
6350         (Resolve): Removed referenced to above mentioned.
6351         (GetAttributeUsage): Made private and changed to work without
6352         class assistance.
6353         (GetIndexerAttributeValue): Don't crash.
6354         (GetConditionalAttributeValue): Ditto.
6355         (GetClsCompliantAttributeValue): Ditto.
6356         (ExtractSecurityPermissionSet): All attributes exceptions are
6357         error 648.
6358         (GetPropertyValue): New helper.
6359         (GetMethodImplOptions): New method.
6360         (DefinePInvokeMethod): Reuse common code. Implemented handling of
6361         some missing properties.
6362         
6363         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
6364         (Method.ApplyAttributeBuilder): Updated.
6365         
6366         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
6367         exception.
6368
6369 2005-02-28  Raja R Harinath  <rharinath@novell.com>
6370
6371         Fix #73052.
6372         * report.cs (Report.SymbolRelatedToPreviousError): Handle
6373         non-simple types (array, pointer, reference).
6374
6375 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6376
6377         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
6378
6379         * class.cs (MethodCore.IsDuplicateImplementation): Special error
6380         for operators.
6381         (Method.CheckBase): Catch wrong destructor here.
6382         (MethodData.Define): Add errors 550, 668.
6383
6384         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
6385
6386         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
6387
6388         * pending.cs (VerifyPendingMethods): Add error 551.
6389
6390         * typemanager.cs (CSharpName): Next error report helper.
6391
6392 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
6393
6394         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
6395         attributes. Removed useless attribute double check.
6396         It saves almost 2MBs for corlib.
6397
6398 2005-02-25  Raja R Harinath  <rharinath@novell.com>
6399
6400         Fix #72924.
6401         * statement.cs (ExpressionStatement.Resolve): Make robust to being
6402         called twice in case of error.
6403
6404 2005-02-23  Chris Toshok  <toshok@ximian.com>
6405
6406         Fix compiler portions of #72827.
6407         * statement.cs (Block.Emit): call Begin/EndScope on the
6408         EmitContext instead of the ILGenerator.
6409
6410         * codegen.cs (EmitContext.BeginScope): new method, call
6411         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
6412         we have one.)
6413         (EmitContext.BeginScope): same, but EndScope and CloseScope
6414
6415         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
6416         offset and call the superclass's OpenScope(int) with it.
6417         (SymbolWriter.CloseScope): get the current il
6418         offset and call superclass's CloseScope(int) with it.
6419
6420 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
6421
6422         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
6423         CS1677 for out and ref as well.
6424
6425         * class.cs (Method.Define): Add error CS1599 detection.
6426         
6427         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
6428         
6429         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
6430         
6431         * delegate.cs (Delegate.Define): Add error CS1599 detection.
6432         
6433         * support.cs.cs (ModifierDesc): New helper method.
6434
6435 2005-02-23  Raja R Harinath  <rharinath@novell.com>
6436             Abin Thomas  <projectmonokochi@rediffmail.com>
6437             Anoob V E  <projectmonokochi@rediffmail.com>
6438             Harilal P R  <projectmonokochi@rediffmail.com>
6439
6440         Fix #57851, #72718.
6441         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
6442         MemberLookup (used for error reporting) actually returns a result.
6443         Fix error report number (122, not 112).
6444
6445 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
6446             Anoob V E  <projectmonokochi@rediffmail.com>
6447             Harilal P R  <projectmonokochi@rediffmail.com>
6448
6449         Fix #71134.
6450         * pending.cs (PendingImplementation.GetAbstractMethods):
6451         Find NonPublic members too.
6452
6453 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
6454
6455         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
6456         Fixed error 217.
6457         
6458         * class.cs (MethodCore.CheckMethodAgainstBase):
6459         Add error 239 report.
6460
6461 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6462
6463         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6464         
6465         * class.cs (Operator.Define): Add error 217 report.
6466         
6467 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6468
6469         Fix #68955.
6470         * expression.cs (Invocation.IsApplicable): Make public.
6471         (Invocation.IsParamsMethodApplicable): Likewise.
6472         * delegate.cs (Delegate.VerifyApplicability): Don't use
6473         Invocation.VerifyArgumentCompat for parameter applicability
6474         testing.  Use Invocation.IsApplicable and
6475         Invocation.IsParamsMethodApplicable.
6476
6477 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6478
6479         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6480         
6481         * class.cs (Operator.Define): Add error 217 report.
6482         
6483 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6484
6485         * namespace.cs (UsingEntry.Resolve): Undo change below.
6486
6487 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6488
6489         Fix #72756.
6490         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6491         disable the error message when the extended MemberLookup also
6492         fails.
6493         (Expression.MemberLookupFinal): Update.
6494         (SimpleName.DoSimpleNameResolve): Update.
6495         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6496         Don't use MemberLookupFinal.
6497         (New.DoResolve): Update.
6498         (BaseAccess.CommonResolve): Update.
6499
6500 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6501
6502         Fix #72732.
6503         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6504         occured previously, don't resolve again.
6505
6506 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6507
6508         Fix #69949
6509         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6510         argument. Call ResolveAttributeUsage for unresolved.
6511         when types doesn't match ctor arguments.
6512         
6513         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6514         for nested attribute classes.
6515         (Class.attribute_usage): Removed.
6516         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6517         for attribute class.
6518         
6519         * ecore.cs (IsAttribute): Removed.
6520         
6521         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6522         
6523         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6524         now normal types.
6525         (attribute_types): Removed.
6526         (EmitCode): Global attributes are emited as the latest.
6527
6528 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6529
6530         * class.cs (EmitFieldInitializers): Don't emit field initializer
6531         for default values when optimilization is on.
6532         
6533         * constant.cs (Constant.IsDefaultValue): New property.
6534         
6535         * driver.cs: Add /optimize handling.
6536         
6537         * constant.cs,
6538         * ecore.cs,
6539         * literal.cs: Implement new IsDefaultValue property.
6540         
6541         * rootcontext.cs (Optimize): New field, holds /optimize option.
6542
6543 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6544
6545         Fix crasher in re-opened #72347.
6546         * namespace.cs (Namespace.Lookup): Return null if
6547         DeclSpace.DefineType returns null.
6548
6549         Fix #72678.
6550         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6551
6552 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6553
6554         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6555         now returns null if it cannot resolve to an lvalue.
6556         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6557         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6558         returned null.  Remove check for SimpleName.
6559         (EventExpr.DoResolveLValue): New.
6560         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6561         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6562         error from ...
6563         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6564         avoid CS0131 error.
6565         (Unary.ResolveOperator): Move CS0211 check ...
6566         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6567         CS0131 error.
6568         (Unary.DoResolveLValue): Simplify.
6569         (AddressOf.DoResolveLValue): New.
6570         (ArrayAccess.DoResolveLValue): New.
6571
6572 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6573
6574         * attribute.cs (Attribute.Resolve): Add arguments casting for
6575         when types doesn't match ctor arguments.
6576
6577 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6578
6579         Fix parts of #63202.
6580         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6581         lookup of operator in base type.  Ensure that all checks happen
6582         when the operator resolves to an "op_..." method.
6583
6584 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6585
6586         Fix #71992.
6587         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6588         'ignore_cs0104' parameter.  Pass it to ...
6589         (NamespaceEntry.Lookup): ... this.
6590         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6591         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6592         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6593         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6594         Update.  Request that cs0104 errors be ignored.
6595         (ComposedCast.ResolveAsTypeStep): Update.
6596
6597 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6598
6599         Fix #59209.
6600         * expression.cs (Invocation.BetterFunction): Remove support for
6601         comparing virtual functions and their overrides.
6602         (Invocation.IsOverride): New.
6603         (Invocation.OverloadResolve): Don't consider 'override' functions
6604         during candidate selection.  Store them in a lookaside list.
6605         If the selected method is a 'virtual' function, use the list to
6606         find any overrides that are closer to the LHS type.
6607
6608 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6609
6610         * expression.cs (New.DoResolve): Add complex core type reduction.
6611         (New.Constantify): Converts complex core type syntax like 'new int ()'
6612         to simple constant.
6613         
6614 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6615
6616         * decl.cs (EntryType.EntryType): New constructor to create an
6617         updated copy of a cache entry.
6618         (MemberCache.AddMethods): Use it.
6619         (MemberCache.ClearDeclaredOnly): Remove.
6620         (MemberCache.MemberCache): Update.
6621
6622 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6623
6624         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
6625         variable.  This one is represents the actual low-level declaration
6626         of the method, as opposed to the semantic level `IsStatic'.   
6627
6628         An anonymous method which is hosted into a static method might be
6629         actually an instance method.  IsStatic would reflect the
6630         container, while MethodIsStatic represents the actual code
6631         generated.
6632
6633         * expression.cs (ParameterReference): Use the new MethodIsStatic
6634         instead of IsStatic.
6635
6636         * anonymous.cs (AnonymousMethod.Compatible): Pass the
6637         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
6638         set on the current EmitContext. 
6639
6640         * expression.cs (Cast): Overload DoResolveLValue so we can pass
6641         resolve our casted expression as an LValue.  This triggers the
6642         proper LValue processing that is later required by Assign.
6643
6644         This fixes 72347.
6645
6646         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
6647
6648 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
6649
6650         C# 2.0 Fixed buffer implementation
6651
6652         * anonymous.cs: Update after RegisterHelperClass renaming.
6653
6654         * attribute.cs (AttributeTester.fixed_buffer_cache):
6655         Cache of external fixed buffers.
6656         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
6657         implementation if field is fixed buffer else null.
6658
6659         * class.cs
6660         (TypeContainer.AddField): Accept FieldMember instead of Field.
6661         (FieldBase.IsFieldClsCompliant): Extracted code from
6662         VerifyClsCompliance descendant customization.
6663         (FixedField): New class handles fixed buffer fields.
6664         (FixedFieldExternal): Keeps information about imported fixed
6665         buffer.
6666         (IFixedField): Make access to internal or external fixed buffer
6667         same.
6668
6669         * cs-parser.jay: Add fixed buffer parsing.
6670
6671         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
6672         buffer.
6673
6674         * expression.cs (Indirection): Extended implementation to accept
6675         fixed buffer field.
6676         (PointerArithmetic.Emit): Get element from fixed buffer as well.
6677         (ElementAccess.MakePointerAccess): Get type as parameter.
6678         (DoResolve): Add fixed buffer field expression conversion.
6679         (DoResolveLValue): Ditto.
6680         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
6681         (ArrayPtr): Derives from FixedBufferPtr.
6682         (ArrayPtr.Emit): Add extra emit for array elements.
6683
6684         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
6685
6686         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
6687         for compiler generated types.
6688         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
6689
6690         * statement.cs (Fixed): Refactored to be easier add fixed buffer
6691         and consume less memory.
6692         (Fixed.Resolve): Add fixed buffer case.
6693
6694         * typemanager.cs (compiler_generated_attr_ctor,
6695         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
6696         (HasElementType): Add our own implementation to work on every
6697         runtime.
6698
6699 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6700
6701         * anonymous.cs (CaptureContext): Track whether `this' has been
6702         referenced.   
6703
6704         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
6705         only captured `this' if it was implicitly done (instance
6706         methods/variables were used). 
6707
6708         * codegen.cs (EmitContext.CaptureThis): New method to flag that
6709         `this' must be captured.
6710
6711 2005-01-30  Miguel de Icaza  <miguel@novell.com>
6712  
6713         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
6714         is null it means that there has been no need to capture anything,
6715         so we just create a sibling.
6716
6717         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
6718
6719         Just a partial fix.  The other half is fairly elusive.
6720         
6721 2005-02-10  Raja R Harinath  <rharinath@novell.com>
6722
6723         Fix #52586, cs0121-4.cs.
6724         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
6725         and return a hashtable.
6726         (MemberCache.ClearDeclaredOnly): New.
6727         (MemberCache.MemberCache): Update to change.  Make a deep copy of
6728         the method_hash of a base type too.
6729         (MemberCache.AddMethods): Adapt to having a deep copy of the base
6730         type methods.  Overwrite entries with the same MethodHandle so
6731         that the ReflectedType is correct.  The process leaves in base
6732         virtual functions and their overrides as distinct entries.
6733         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
6734         matters since it was boxed in a ArrayList before.
6735         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
6736         modifier.
6737         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
6738         case of a virtual function and its override (choose the overload
6739         as better).
6740         (Invocation.OverloadResolve): Avoid 'override' members during
6741         'applicable_type' calculation.
6742
6743 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6744
6745         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
6746         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
6747         GetTypeHandle.  It is possible for a reflected type to derive from
6748         a TypeBuilder (e.g., int[] derives from the TypeBuilder
6749         System.Array during mscorlib compilation).
6750         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
6751         contain a method_hash, don't create one either.  Don't create a
6752         deep copy of the base cache's method_hash.
6753         (MemberCache.SetupCache): Rename back from DeepCopy.
6754         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
6755         already initialized.  If we see an override function, add its
6756         underlying base virtual function to the member_hash too.
6757
6758 2005-02-09  Raja R Harinath  <rharinath@novell.com>
6759
6760         Combine two near-redundant caches.
6761         * typemanager.cs (method_params): Rename from method_internal_params.
6762         (TypeManager.GetParameterData): New.  Replace
6763         Invocation.GetParameterData.
6764         (TypeManager.LookupParametersByBuilder): Remove.
6765         * expression.cs (Invocation.method_parameter_cache): Remove.
6766         (Invocation.GetParameterData): Remove.
6767         Update to changes.
6768         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
6769         Update to changes.
6770
6771 2005-02-08  Raja R Harinath  <rharinath@novell.com>
6772
6773         Fix #72015.
6774         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
6775         TypeManager.multicast_delegate_type is null, resolve it by looking
6776         up "System.MulticastDelegate".
6777         * rootcontext.cs (RootContext.ResolveCore): Simplify.
6778
6779 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
6780             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
6781             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
6782
6783         Fix cs0164.cs.
6784         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
6785         (LabeledStatement.AddReference): New.  Set 'referenced'.
6786         (Goto.Resolve): Use it.
6787
6788 2005-02-05  John Luke  <john.luke@gmail.com>
6789
6790         * driver.cs: remove duplicate -doc line in Usage ()
6791
6792 2005-02-04  Raja R Harinath  <rharinath@novell.com>
6793
6794         * location.cs (Location.AddFile): Fix CS2002 error report.
6795
6796 2005-02-02  Martin Baulig  <martin@ximian.com>
6797
6798         * delegate.cs (Delegate.DefineType): Report an internal error if
6799         TypeManager.multicast_delegate_type is null.  See bug #72015 for
6800         details.        
6801
6802 2005-02-02  Raja R Harinath  <rharinath@novell.com>
6803
6804         Fix a crasher in a variant of #31984.
6805         * const.cs (Constant.CheckBase): New override that defers the
6806         new-or-override check in case the base type hasn't been populated
6807         yet.
6808         (Constant.Define): Ensure the new-or-override check is performed.
6809
6810 2005-02-01  Duncan Mak  <duncan@ximian.com>
6811
6812         * const.cs (LookupConstantValue): Check that `ce' is not null
6813         before calling GetValue ().
6814
6815 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6816
6817         Fix test-334.cs (#69519).
6818         * cs-parser.jay (using_alias_directive): Pass in an expression to
6819         NamespaceEntry.UsingAlias.
6820         (using_namespace_directive): Pass in an expression to
6821         NamespaceEntry.Using.
6822         (namespace_name): Don't flatten to a string.
6823         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
6824         (NamespaceEntry.AliasEntry.Resolve): Lookup using
6825         ResolveAsTypeStep.
6826         (NamespaceEntry.UsingEntry): Likewise.
6827         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
6828         changes.
6829         (NamespaceEntry.LookupForUsing): Remove.
6830         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
6831         names.
6832         (NamespaceEntry.Lookup): Remove support for dotted names.
6833
6834 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6835
6836         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
6837         split into two.
6838         (NamespaceEntry.ImplicitParent): Compute on demand.
6839         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
6840         parallels the current.
6841         (NamespaceEntry.LookupForUsing): Use it.
6842         (NamespaceEntry.Lookup): If the current namespace-entry is
6843         implicit, don't search aliases and using tables.
6844
6845 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6846
6847         Fix #31984.
6848         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
6849         BaseCache here.
6850         (TypeContainer.BaseCache): Compute on demand.
6851         (TypeContainer.FindMembers): Define constants and types if they're
6852         not already created.
6853         (FieldMember.Define): Move resetting of ec.InUnsafe before error
6854         check.
6855         * const.cs (Constant.Define): Make idempotent.
6856
6857 2005-01-29  Miguel de Icaza  <miguel@novell.com>
6858
6859         * pending.cs: Produce better code (no nops produced by using Ldarg
6860         + value).
6861         
6862         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
6863         i - 1' it should be arg + 1.
6864
6865         Fixes bug #71819.
6866
6867 2005-01-28  Raja R Harinath  <rharinath@novell.com>
6868
6869         * attribute.cs (Attribute.CheckAttributeType): Make private
6870         non-virtual.
6871         (Attribute.ResolveType): Make virtual.
6872         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
6873         handling of RootContext.Tree.Types.
6874
6875 2005-01-27  Raja R Harinath  <rharinath@novell.com>
6876
6877         Update attribute-handling to use the SimpleName/MemberAccess
6878         mechanisms.
6879         * cs-parser.jay (attribute): Pass in an expression to the
6880         constructors of Attribute and GlobalAttribute.
6881         * attribute.cs (Attribute): Take an expression for the name.
6882         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
6883         passed in attribute name expression.
6884         (Attribute.CheckAttributeType): Use it.
6885         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
6886         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
6887         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
6888         argument to prevent error messages if the lookup fails.
6889
6890 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
6891
6892         * expression.cs (Indirection): Implemented IVariable interface
6893         to support indirection in AddressOf operator.
6894         (PointerArithmetic.Emit): Add optimalization for case where
6895         result can be precomputed.
6896
6897 2005-01-26  Martin Baulig  <martin@ximian.com>
6898
6899         * class.cs (TypeContainer.AttributeTargets): Return the correct
6900         AttributeTargets depending on our `Kind' instead of throwing an
6901         exception; fixes #71632.
6902
6903 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
6904
6905         Fix #71257
6906         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
6907         constant members.
6908
6909 2005-03-17  Martin Baulig  <martin@ximian.com>
6910
6911         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6912         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6913
6914 2005-03-17  Martin Baulig  <martin@ximian.com>
6915
6916         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6917         to bool so we can return an error condition.
6918         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6919         returned an error.
6920
6921 2005-03-17  Martin Baulig  <martin@ximian.com>
6922
6923         * generic.cs (TypeMananager.IsIEnumerable): New public method.
6924
6925         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
6926         converting from an array-type of T to `IEnumerable<T>'.
6927
6928 2005-03-16  Martin Baulig  <martin@ximian.com>
6929
6930         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
6931         (Nullable.LiftedUnaryMutator): New public class.
6932
6933         * expression.cs (UnaryMutator.DoResolve): Added support for
6934         Nullable Types.
6935
6936 2005-03-14  Martin Baulig  <martin@ximian.com>
6937
6938         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
6939
6940 2005-03-14  Martin Baulig  <martin@ximian.com>
6941
6942         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
6943         the comparision operators `<', `>', `<=' and `>='.
6944
6945 2005-03-13  Martin Baulig  <martin@ximian.com>
6946
6947         * generic.cs
6948         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
6949         avoid confusion with the `NullLiteral'.
6950         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
6951
6952 2005-03-13  Martin Baulig  <martin@ximian.com>
6953
6954         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
6955         comparing arbitrary types with the null literal.
6956
6957 2005-03-13  Martin Baulig  <martin@ximian.com>
6958
6959         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
6960         boolean operators '&&', '||', '&' and '|'.
6961         (Nullable.OperatorTrueOrFalse): New public class.
6962
6963         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
6964         instead of a `StaticCallExpr'; added support for nullables.
6965
6966 2005-03-10  Martin Baulig  <martin@ximian.com>
6967
6968         * expression.cs
6969         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
6970         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
6971
6972 2005-03-07  Martin Baulig  <martin@ximian.com>
6973
6974         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
6975         it work if `expr' is not an IMemoryLocation.
6976         (Nullable.Lifted): Implement IMemoryLocation.
6977         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
6978         target type.
6979
6980 2005-03-05  Martin Baulig  <martin@ximian.com>
6981
6982         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
6983         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
6984         (Nullable): Added support for lifted unary and binary operators.
6985
6986         * expression.cs (Unary.DoResolve): Added support for nullable types.
6987         (Binary.DoResolve): Likewise.
6988         (Conditional.DoResolve): Likewise.
6989
6990 2005-03-02  Martin Baulig  <martin@ximian.com>
6991
6992         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
6993
6994         * class.cs (ClassPart.SetParameterInfo): Override this.
6995         (PartialContainer.SetParameterInfo): Override this.
6996         (TypeContainer.CheckConstraints): New protected method.
6997         (PartialContainer.CheckConstraints): Override this and check
6998         whether the same contraints were specified in all parts of a
6999         partial generic type definition.
7000         (PartialContainer.UpdateConstraints): New public method.
7001
7002         * generic.cs (TypeParameter.UpdateConstraints): New public method.
7003
7004 2005-03-02  Martin Baulig  <martin@ximian.com>
7005
7006         Committing a patch from Carlos Alberto Cortez to fix #72887.
7007
7008         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
7009         casts from `T []' to `int []'.
7010
7011 2005-03-02  Martin Baulig  <martin@ximian.com>
7012
7013         * generic.cs (TypeManager.IsEqual): Make this symmetric.
7014
7015         * expression.cs (Binary.ResolveOperator): When resolving a
7016         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
7017         `=='.  Fixes #71866.  See gen-127.cs.
7018
7019 2005-03-02  Martin Baulig  <martin@ximian.com>
7020
7021         * class.cs (TypeContainer.DoDefineMembers): We also need a default
7022         static constructor in static classes.
7023
7024 2005-03-02  Martin Baulig  <martin@ximian.com>
7025
7026         * generic.cs
7027         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
7028         (Nullable.LiftedConversion): Added support for user-defined
7029         conversions.
7030
7031         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
7032
7033         * cs-parser.jay: Use ComposedCast everywhere instead of
7034         NullableType, so we don't need to check for NullableType
7035         everywhere.
7036         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
7037         case where we'll be resolved into a `parenthesized_expression_0'
7038         afterwards.
7039
7040         * convert.cs
7041         (Convert.UserDefinedConversion): Added nullable conversions.
7042
7043 2005-02-28  Martin Baulig  <martin@ximian.com>
7044
7045         * generic.cs (TypeManager.IsNullableType): New static method.
7046         (Nullable): New abstract class.
7047         (Nullable.NullLiteral): New public class.
7048         (Nullable.LiftedConversion): New public class.
7049
7050         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
7051         `builtin_types opt_nullable'.
7052
7053         * convert.cs
7054         (Convert.ImplicitConversionStandard): Added nullable conversions.
7055         (Convert.ExplicitConversionStandard): Likewise.
7056         (Convert.ExplicitConversion): Likewise.
7057
7058 2005-02-26  Martin Baulig  <martin@ximian.com>
7059
7060         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
7061         begin with a "?", for instance "?[]".  Don't do a type lookup if
7062         `dim' is empty.
7063
7064 2005-02-25  Martin Baulig  <martin@ximian.com>
7065
7066         The first part of Nullable Types :-)
7067
7068         * generic.cs (NullableType): New public class.
7069         (NullCoalescingOperator): New public class.
7070         (TypeArguments.Resolve): Add a CS0306 check.
7071
7072         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
7073         (opt_nullable): New rule.
7074         (type): Added `opt_nullable' to `namespace_or_type_name',
7075         `builtin_types' and `pointer_type'.
7076         (array_type): Added `opt_nullable'.
7077         (opt_rank_specifier_or_nullable): New rule; this is the
7078         combination of `opt_rank_specifier' and `opt_nullable'.
7079         (opt_error): New rule; catch errors here.
7080         (nullable_type_or_conditional): New rule; we use this to check for
7081         nullable and still detect the conditional operator.
7082         (local_variable_type): Use `opt_rank_specifier_or_nullable'
7083         instead `opt_rank_specifier'.
7084
7085         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
7086         for nullables.
7087
7088 2005-02-24  Martin Baulig  <martin@ximian.com>
7089
7090         * README, README.Changes: Removed; they're old and obsolete.
7091
7092 2005-02-22  Martin Baulig  <martin@ximian.com>
7093
7094         * generic.cs (TypeParameter.Resolve): If resolving the constraints
7095         returned an error, set `constraints' to null to avoid a crash
7096         later on.
7097         (TypeParameter.ResolveType): Likewise.
7098
7099 2005-02-22  Martin Baulig  <martin@ximian.com>
7100
7101         * generic.cs
7102         (Constraints.ResolveTypes): Protect against being called twice.
7103         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
7104         (TypeParameter.ResolveType): New public method; calls
7105         constraints.ResolveTypes().
7106         (TypeParameter.DefineType): Moved constraints.ResolveType() out
7107         into the new ResolveType().
7108         (GenericMethod.Define): Call ResolveType() on all our
7109         TypeParameter's.        
7110
7111 2005-02-21  Martin Baulig  <martin@ximian.com>
7112
7113         * generic.cs
7114         (TypeManager.generic_nullable_type): New static public field.
7115         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
7116
7117         * rootcontext.cs
7118         (RootContext.ResolveCore): Resolve "System.Nullable`1".
7119
7120 2005-02-15  Martin Baulig  <martin@ximian.com>
7121
7122         * generic.cs (ConstructedType.Constraints): Correctly check
7123         constraints if the argument type is a type parameter; fixes
7124         #72326. 
7125
7126 2005-02-02  Martin Baulig  <martin@ximian.com>
7127
7128         * delegate.cs (Delegate.DefineType): Report an internal error if
7129         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7130         details.        
7131
7132 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7133
7134         * pending.cs: Produce better code (no nops produced by using Ldarg
7135         + value).
7136         
7137         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7138         i - 1' it should be arg + 1.
7139
7140         Fixes bug #71819.
7141         
7142 2005-01-26  Martin Baulig  <martin@ximian.com>
7143
7144         * cs-parser.jay (indexer_declarator): Don't report an error if we
7145         have type parameters since we can be an explicit interface
7146         implementation; fixes #71449.
7147
7148 2005-01-26  Martin Baulig  <martin@ximian.com>
7149
7150         * class.cs (TypeContainer.AttributeTargets): Return the correct
7151         AttributeTargets depending on our `Kind' instead of throwing an
7152         exception; fixes #71632.
7153
7154 2005-01-26  Martin Baulig  <martin@ximian.com>
7155
7156         * delegate.cs (Delegate.DefineType): Correctly define our type
7157         parameters.  Fixes #71483.
7158
7159 2005-01-25  Raja R Harinath  <rharinath@novell.com>
7160
7161         Fix #71602.
7162         * expression.cs (MemberAccess.DoResolve): Don't complain with
7163         cs0572 when the LHS of a member access has identical name and type
7164         name.
7165
7166 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
7167
7168         Fix #71651, #71675
7169         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
7170         CreatePermission.
7171         Create custom PermissionSet only for PermissionSetAttribute.
7172
7173 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
7174
7175         Fix #71649
7176         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
7177         delegates in static class.
7178
7179 2005-01-24  Martin Baulig  <martin@ximian.com>
7180
7181         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7182         merging an implicit block, just use its reachability.
7183
7184         * statement.cs (Block.Resolve): Make the unreachable code check
7185         work wrt. implicit blocks; see test-337 from #63842.
7186
7187 2005-01-21  Alp Toker  <alp@atoker.com>
7188  
7189         * cs-parser.jay: destructor_declaration's container is PartialContainer
7190         not Class when partial types are used, so use Kind prop instead of
7191         'is'.
7192         
7193 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
7194
7195         * cs-parser.jay: Improve error reporting when an interface
7196         declares new types.
7197
7198 2005-01-20  Dick Porter  <dick@ximian.com>
7199
7200         * support.cs: SeekableStreamReader fix from Sandor Dobos
7201         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
7202         chars are read.  Fixes bug 70369.
7203
7204 2005-01-20  Raja R Harinath  <rharinath@novell.com>
7205
7206         * cs-parser.jay (catch_clause): Simplify current_block handling
7207         somewhat.
7208
7209 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
7210
7211         * convert.cs (ImplicitStandardConversionExists): Synchronize the
7212         code with ImplicitStandardConversion to handle the implicit
7213         conversion of method groups into valid delegate invocations. 
7214
7215         The problem is that in parameter handling we were using this code
7216         path.  Fixes bug #64698
7217
7218 2005-01-19  Raja R Harinath  <rharinath@novell.com>
7219
7220         * cs-parser.jay: Fix several infelicities.
7221         - Avoid assigning to the parser value stack.  Code like 
7222           '$3 = null' is unclean.  Synthesize a value for the code block
7223           instead. 
7224         - Avoid using oob_stack for storing location information.  Use ...
7225         (_mark_): ... this.  New (empty) rule.  Saves the current location
7226         in $$.
7227         (foreach_statement): Avoid using oob_stack for current_block
7228         handling.  Use technique used in for_statement and
7229         using_statement.  Synthesize a value for the code block to store
7230         additional intermediate information.
7231
7232 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
7233
7234         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
7235         of a different type is only allowed to private fields of a
7236         containing type, not on fields of a base class.
7237
7238         See test-174.cs and error cs0122-9.cs
7239
7240 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7241
7242         Fix test-335.cs (bug #58126).
7243         * cs-parser.jay (argument): Split out non-expression parts of the
7244         rule into 'non_simple_argument'.
7245         (invocation_expression): Support parenthesized invocations with
7246         multiple arguments, and with single non-simple arguments.
7247
7248 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7249
7250         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
7251         places.
7252
7253 2005-01-12  Raja R Harinath  <rharinath@novell.com>
7254
7255         Fix cs0038-1.cs, cs1640-6.cs.
7256         * ecore.cs (Expression.Resolve): Remove special-case for
7257         SimpleName in error-handling.
7258         (Expression.almostMatchedMembers): Relax access permission to
7259         protected.
7260         (Expression.MemberLookupFailed): Handle duplicates in
7261         almostMatchedMembers list.
7262         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
7263         * expression.cs (New.DoResolve): Report CS1540 for more cases.
7264         * typemanager.cs (GetFullNameSignature): Use the MethodBase
7265         overload if the passed in MemberInfo is a MethodBase.
7266
7267 2005-01-25  Martin Baulig  <martin@ximian.com>
7268
7269         * doc.cs
7270         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
7271
7272 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
7273
7274         Fix #70749
7275         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
7276         for non-CAS & merge permission sets properly.
7277
7278 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7279
7280         Improve standard-compliance of simple name and member access 
7281         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
7282         * ecore.cs (FullNamedExpression): New abstract base class 
7283         for Namespaces and TypeExpressions.
7284         (ResolveFlags.SimpleName): Remove.
7285         (SimpleName): Remove support for dotted names.
7286         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
7287         DeclSpace.FindType and DeclSpace.LookupType.
7288         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
7289         (Expression.ExprClassName): Make member function.
7290         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
7291         a namespace.  Remove creation of dotted "SimpleName"s.
7292         (MemberAccess.DoResolve): Likewise.
7293         * decl.cs (DeclSpace.Cache): Make private.
7294         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
7295         (DeclSpace.FindType): Update.
7296         (DeclSpace.LookupType): Move here from RootContext.  Return a 
7297         FullNamedExpression.
7298         * namespace.cs (Namespace): Derive from FullNamedExpression
7299         so that it can be part of expression resolution.
7300         (Namespace.Lookup): Return an FullNamedExpression.
7301         (NamespaceEntry.LookupAlias): Lookup aliases only in current
7302         namespace.
7303         * rootcontext.cs (NamespaceLookup): Remove.
7304         (LookupType): Move to DeclSpace.
7305         * attribute.cs (CheckAttributeType): Update.
7306         * doc.cs (FindDocumentedType): Remove allowAlias argument.
7307         (FindDocumentedTypeNonArray): Likewise.
7308
7309 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7310
7311         Fix cs0509.cs, cs1632.cs.
7312         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
7313         is the same as IsInterface.
7314         (TypeContainer.GetClassBases): Likewise.
7315         * statement.cs (LabeledStatement.ig): New field.
7316         (LabeledStatement.LabelTarget): Save ILGenerator which created the
7317         label.
7318         (LabeledStatement.DoEmit): Check that the label was created with
7319         the same ILGenerator.
7320
7321 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7322
7323         Fix #71058
7324         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
7325         accessors to its properties.
7326
7327         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
7328         from accessors to property.
7329         
7330 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7331
7332         Fix #70722
7333         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
7334         only for overrides.
7335         
7336 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
7337
7338         * attribute.cs: Check for null and empty strings.  
7339
7340         I have lost another battle to Paolo.
7341
7342 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
7343
7344         Fix #70942
7345         * class.cs (PropertyMethod): Set Parent field in ctors.
7346         (SetMethod.InternalParameters): Add unsafe switch hack.
7347         Override MarkForDuplicationCheck where it is appropriate.
7348
7349         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
7350         It says whether container allows members with the same name.
7351         Base default is no.
7352         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
7353         Removed is_method parameter.
7354
7355 2005-01-06  Duncan Mak  <duncan@ximian.com>
7356
7357         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
7358         because the previous change led to incorrect reporting of CS1032
7359         ("Cannot define/undefine preprocessor symbols after first token in
7360         file"). Instead of using `tokens_seen' as the only flag that
7361         triggers CS1040, introduce `comments_seen'. This new flag is used
7362         to signify having seen comments on the current line, so it is
7363         unset after a newline.
7364
7365 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7366
7367         * doc.cs : When searching for a type, find nested type too.
7368           This fixes bug #71040.
7369
7370 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7371
7372         * doc.cs :
7373           - Warn missing member comment on those classes which also does not
7374             have doc comments. Fixed bug #71041.
7375           - Don't warn missing doc comment on default constructor.
7376             Fixed bug #71042.
7377
7378 2005-01-06  Duncan Mak  <duncan@ximian.com>
7379
7380         * cs-tokenizer.cs (xtoken): After handling traditional C-style
7381         comments, set `tokens_seen' to true. This allows us to detect
7382         misplaced preprocessor directives (i.e. not at the beginning of
7383         the a line, nor after whitespaces). In that case, report error
7384         CS1040. This fixes bug #56460.
7385
7386         * cs-parser.jay (interface_member_declaration): Add checks for
7387         IsExplicitImpl, and report CS0541 error if an interface member is
7388         defined as an explicit interface declaration.
7389
7390 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
7391
7392         Fix #70817
7393         * class.cs (PropertyMethod): Set Parent field in ctors.
7394         (SetMethod.InternalParameters): Add unsafe switch hack.
7395         
7396         * decl.cs (MemberCore.Parent): Cannot be readonly.
7397
7398 2005-01-06  Raja R Harinath  <rharinath@novell.com>
7399
7400         * decl.cs (DeclSpace.ResolveType): Remove.
7401         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
7402         Merge in code from ...
7403         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
7404         * class.cs, enum.cs: Update to changes.
7405
7406 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
7407
7408         * anonymous.cs: Ensure that we init the scope of our parent if it
7409         has not been initialized yet.
7410
7411 2004-12-30  Duncan Mak  <duncan@ximian.com>
7412
7413         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
7414         if field.FieldBuilder is null. Fixes #70758.
7415
7416         * convert.cs: Fixed some typos and updated some of the comments.
7417         (ImplicitStandardConversionExists):
7418         (TryImplicitIntConversion): If `target_type' is an interface and
7419         the type of `ic' implements this interface, return true or a new
7420         BoxedCast instead of null. This fixes #70468.
7421
7422 2004-12-29  Duncan Mak  <duncan@ximian.com>
7423
7424         * expression.cs (Argument.Emit): Check that Expr is
7425         IMemoryLocation before casting to it, and report CS1510 otherwise.
7426
7427         This fixes #70402.
7428
7429 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
7430
7431         * statement.cs (Block.ThisVariable): remove the recursion here, to
7432         make the --profile more sane.
7433
7434 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
7435
7436         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
7437         assembly, by JB Evain.
7438
7439 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7440
7441         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
7442           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
7443         "parent" refers to enclosing type/class.  "base" refers to superclass.
7444
7445 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7446
7447         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7448         Ensure that we only have GlobalAttributes.
7449         * attribute.cs (Attribute.Emit): Make non-virtual.
7450         (GlobalAttribute.Emit): Remove.
7451         (Attribute.Resolve): Make virtual.
7452         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
7453         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
7454         the argument. Don't create one.
7455         (Attribute.GetObsoleteAttribute): Likewise.
7456         (Attribute.GetClsCompliantAttributeValue): Likewise.
7457         * class.cs, decl.cs: Update to changes.
7458
7459 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
7460
7461         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
7462         
7463         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
7464         
7465         * statement.cs (Foreach.Resolve): Add error 186 report.
7466
7467 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
7468
7469         * expression.cs (Conditional.DoResolve): Add warning 429.
7470         
7471         * statement.cs (If.Resolve): Add warning 665.
7472
7473 2004-12-16  Raja R Harinath  <rharinath@novell.com>
7474
7475         New invariant: RootContext.Tree.Types.NamespaceEntry == null
7476         except when in the parser, and in GlobalAttribute.
7477         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
7478         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
7479         RootContext.Tree.Types.NamespaceEntry once work is done.
7480         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
7481         and resets RootContext.Tree.Types.NamespaceEntry.
7482
7483 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
7484
7485         * cs-parser.jay: Don't create a block for every variable.
7486
7487 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7488
7489         * location.cs: Provide extra information.
7490
7491         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7492         variables from the captured environment, it is the ldarg_0.
7493
7494 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7495
7496         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7497         find a conclusion.
7498         
7499         * class.cs: Changed warning level for 169 to avoid developer
7500         displeasure from warning flooding. It will be changed back when they
7501         fix most of current BCL warnings.
7502         
7503         * RootContext.cs: Pushed default WarningLevel to 3.
7504         
7505         * statement.cs: Removed unused variable.
7506
7507 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7508
7509         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7510         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7511         Add error 502 report.
7512         (StaticClass.DefineType): Add error 441 report.
7513         (Class.AllowedModifiersProp): New virtual property as temporary
7514         extension to AllowedModifiers.
7515         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7516         to share implementation with StaticClass and don't call virtual
7517         methods from ctor.
7518         
7519         * driver.cs (MainDriver): Add error 1558 test.
7520
7521         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7522         report. Moved error 36 test here.
7523
7524         * statement.cs (Throw.Resolve): Add error 724 report.
7525
7526         * typemanager.cs: Add out_attribute_type core type.
7527         
7528 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7529
7530         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7531         3018 report.
7532         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7533
7534         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7535         3017 report.
7536         
7537         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7538
7539         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7540         Add error 3023 report.
7541         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7542
7543         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7544         implementation.
7545
7546 2004-12-12  John Luke  <john.luke@gmail.com>
7547
7548         * driver.cs (AddArgs): take -- into account when
7549         adding arguments, fixes bug 65710 
7550
7551 2004-12-12  Martin Baulig  <martin@ximian.com>
7552
7553         * expression.cs (Unary.TryReduceNegative): Added support for
7554         SByteConstant and ByteConstant.
7555         (Unary.Reduce): Check error values from TryReduceNegative().
7556
7557 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7558
7559         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7560         and report exception as error 182.
7561
7562 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7563
7564         * driver.cs (Main): Fix message when there are warnings.
7565
7566 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7567
7568         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7569
7570 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7571
7572         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7573         Reduced number of warnings.
7574         
7575         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7576
7577 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7578
7579         * driver.cs: Removed message.
7580
7581         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7582
7583 2004-12-08    <vargaz@freemail.hu>
7584
7585         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7586
7587 2004-12-08  Martin Baulig  <martin@ximian.com>
7588
7589         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7590         instead of a CS3002 for properties and indexer.
7591
7592 2004-12-08  Martin Baulig  <martin@ximian.com>
7593
7594         * decl.cs (MemberName.ToString): Make this work again.
7595
7596 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7597
7598         * attribute.cs (Resolve): Add error 591 detection.
7599
7600         * class.cs (FieldMember.Define): Add error 1547 detection.
7601         (Indexer.Define): Add error 620 detection.
7602         (Operator.Define): Add error 590 detection.
7603
7604         * ecore.cs: Missing argument for error 79.
7605
7606         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7607         detection.
7608
7609 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7610
7611         Fix #70106
7612         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7613         only.
7614
7615 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7616
7617         * cs-parser.jay : handle doc comments on implicit/explicit operators.
7618           Some operator comments were suppressed.
7619         * doc.cs : Implicit/explicit operator name in doc comments are like
7620           "op_Explicit(type)~returnType", so added suffix handling.
7621
7622 2005-01-21  Alp Toker  <alp@atoker.com>
7623
7624         * cs-parser.jay: destructor_declaration's container is PartialContainer
7625         not Class when partial types are used, so use Kind prop instead of 'is'.
7626
7627 2004-12-12  Martin Baulig  <martin@ximian.com>
7628
7629         * expression.cs (Unary.TryReduceNegative): Added support for
7630         SByteConstant and ByteConstant.
7631         (Unary.Reduce): Check error values from TryReduceNegative().
7632
7633 2004-12-11  Martin Baulig  <martin@ximian.com>
7634
7635         * support.cs (ReflectionParameters.ParameterName): If we have a
7636         `gpd', call `ParameterName' on it.
7637
7638         * parameter.cs (Parameter.GetParameterAttributes): New static method.
7639
7640         * pending.cs (PendingImplementation.DefineProxy): Call
7641         DefineParameter() for all of the MethodBuilder's arguments.
7642
7643 2004-12-09  Martin Baulig  <martin@ximian.com>
7644
7645         * doc.cs (DocUtil): Make this a static class.
7646
7647 2004-12-09  Martin Baulig  <martin@ximian.com>
7648
7649         * expression.cs (Invocation.InferType): Moved the type inference
7650         implementation into TypeManager.
7651
7652         * generics.cs (TypeManager): Moved the type inference
7653         implementation here.
7654
7655 2004-12-09  Martin Baulig  <martin@ximian.com>
7656
7657         * typemanager.cs (TypeManager): Make this a partial class.
7658
7659         * generics.cs
7660         (TypeManager): Move the generics part of `TypeManager' here.
7661
7662 2004-12-08  Martin Baulig  <martin@ximian.com>
7663
7664         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7665         instead of a CS3002 for properties and indexer.  Added CS3024
7666         check for generic interfaces.
7667
7668         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
7669         instances are not CLS-compliant.
7670
7671 2004-12-08  Martin Baulig  <martin@ximian.com>
7672
7673         * cs-parser.jay
7674         (void_pointer_expression): New rule for `void*', `void**' etc.
7675         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
7676
7677 2004-12-08  Martin Baulig  <martin@ximian.com>
7678
7679         * expression.cs (Invocation.InferType): Removed the hack for
7680         MethodCore.MayUnify().  
7681
7682         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
7683         this actually work.
7684
7685         * class.cs (MethodCore.MayUnify): Use
7686         TypeManager.MayBecomeEqualGenericTypes().       
7687
7688 2004-12-08  Martin Baulig  <martin@ximian.com>
7689
7690         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
7691         parameter, box it.  Fixes #69233.
7692
7693 2004-12-08  Martin Baulig  <martin@ximian.com>
7694
7695         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
7696         have the ctor constraint.  Fixes #68326.
7697
7698 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7699
7700         * cs-parser.jay : interface comment was not consumed because of
7701           extra opt_semicolon before doc handling.
7702
7703 2004-12-03  Raja R Harinath  <rharinath@novell.com>
7704
7705         Fix test-327.cs, test-328.cs, and put in early infrastructure
7706         for eventually fixing #52697.
7707         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
7708         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
7709         from other methods.
7710         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
7711         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
7712         (VerifyUsing, error246): Update.
7713         * rootcontext.cs (RootContext.NamespaceLookup): Just use
7714         'NamespaceEntry.LookupNamespaceOrType'.
7715
7716 2004-12-07  Martin Baulig  <martin@ximian.com>
7717
7718         * driver.cs: Call it "BETA SOFTWARE" :-)
7719
7720 2004-12-06  Raja R Harinath  <rharinath@novell.com>
7721
7722         Fix crash on cs0657-17.cs.
7723         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7724         Use RootContext.Tree.Types, not 'new RootTypes ()'.
7725         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
7726         the case where the NamespaceEntry gets overwritten.
7727
7728 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
7729
7730         Fixed #69195, #56821
7731         * ecore.cs (ResolveBoolean): Tiny refactoring.
7732
7733         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
7734         of right expression resolving when left is false constant and
7735         operator is LogicalAnd OR true constant and operator is LogicalOr.
7736
7737         * statement.cs (ResolveUnreachable): Always reports warning.
7738
7739 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
7740
7741         * class.cs: Distinguish between 1721 and 1722 (just a little help
7742         for the programmer).
7743
7744 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
7745
7746         * delegate.cs: Only allow this on new versions of the language. 
7747
7748 2004-12-02  Duncan Mak  <duncan@ximian.com>
7749
7750         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
7751         Expression class.
7752         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
7753         here as a static method. Take an additional bool out parameter
7754         `must_do_cs1540_check' for signaling to InstanceResolve.
7755         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
7756         member field from PropertyExpr class and made it an argument of
7757         the method instead.
7758         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
7759         check for MarshalByRefObject, and report CS0122 instead of CS1540.
7760         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
7761         and `remove_accessor' as well as InstanceResolve: report CS0122
7762         where applicable.
7763
7764         Fixes #70129.
7765
7766 2004-12-07  Martin Baulig  <martin@ximian.com>
7767
7768         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
7769         and CS0692 where appropriate.
7770
7771 2004-12-06  Martin Baulig  <martin@ximian.com>
7772
7773         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
7774         IsDuplicateImplementation() and improved it.
7775
7776         * expression.cs (Invocation.InferTypeArguments): Added
7777         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
7778         and removed the "ref" modifier from `infered_types'.
7779
7780         * decl.cs (MemberName.ToString): Removed the exception.
7781
7782 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
7783
7784         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
7785           comments are allowed.
7786
7787 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7788
7789         * delegate.cs: Add checks for subtypes in paramaters and return values
7790         in VerifyMethod () to add support for Covariance/Contravariance
7791         in delegates.
7792         
7793 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7794
7795         * report.cs: Remove extra closing parenthesis.
7796
7797         * convert.cs (Error_CannotImplicitConversion): If the name of the
7798         types are the same, provide some extra information.
7799
7800 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
7801
7802         Fix bug #70102
7803         * attribute.cs (Resolve): Improved implementation of params
7804         attribute arguments.
7805
7806         * support.cs (ParameterData): Add HasParams to be faster.
7807
7808 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
7809
7810         all things are for /doc support:
7811
7812         * doc.cs: new file that supports XML documentation generation.
7813         * mcs.exe.sources: added doc.cs.
7814         * driver.cs:
7815           Handle /doc command line option.
7816           Report error 2006 instead of 5 for missing file name for /doc.
7817           Generate XML documentation when required, after type resolution.
7818         * cs-tokenizer.cs:
7819           Added support for picking up documentation (/// and /** ... */),
7820           including a new XmlCommentState enumeration.
7821         * cs-parser.jay:
7822           Added lines to fill Documentation element for field, constant,
7823           property, indexer, method, constructor, destructor, operator, event
7824           and class, struct, interface, delegate, enum.
7825           Added lines to warn incorrect comment.
7826         * rootcontext.cs :
7827           Added Documentation field (passed only when /doc was specified).
7828         * decl.cs:
7829           Added DocComment, DocCommentHeader, GenerateDocComment() and
7830           OnGenerateDocComment() and some supporting private members for
7831           /doc feature to MemberCore.
7832         * class.cs:
7833           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
7834         * delegate.cs:
7835           Added overriden DocCommentHeader.
7836         * enum.cs:
7837           Added overriden DocCommentHeader and GenerateDocComment().
7838
7839 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
7840
7841         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
7842         unwrapping the enumeration values, chain to
7843         DoConstantNumericPromotions again, so we can promote things to the
7844         fundamental types (takes care of enums that are bytes, sbytes).
7845
7846         Fixes bug #62054.
7847
7848 2004-12-01  Raja R Harinath  <rharinath@novell.com>
7849
7850         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
7851         Fix long-standing bug in type-lookup.  Use FindType instead of
7852         LookupType when ec.ResolvingTypeTree.
7853         (Attribute.ResolveType, Attribute.Resolve)
7854         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
7855         Update to changes.
7856         (Attributes.Search): Remove internal version.  Update.
7857         (Attributes.SearchMulti): Update.
7858         (Attributes.GetClsCompliantAttribute): Remove.
7859         (Attributes.GetIndexerNameAttribute): Remove.
7860         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
7861         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
7862         * class.cs (Indexer.Define): Likewise.
7863
7864 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
7865
7866         Fix bug #68790
7867         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
7868         MarshallByReference members access.
7869
7870         * expression.cs: Use CheckMarshallByRefAccess;
7871         Better error CS0197 message.
7872
7873         * report.cs: Print whole related error message.
7874
7875 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7876
7877         * class (GetClassBases): Better error 60 report.
7878         (EventProperty): Disabled warning 67 detection.
7879
7880 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7881
7882         Fix bug #60324
7883         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
7884
7885         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
7886         precise values.
7887
7888 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7889
7890         Fix bug #49488
7891         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
7892
7893         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
7894
7895 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
7896
7897         * attribute.cs (Attribute.Resolve): Refine error reporting and
7898         report a cs0117 if the identifier does not exist, to distinguish
7899         from 0617 which is a miss-use of the actual identifier.
7900
7901         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
7902         between cs0070 and cs0079.
7903
7904         * class.cs (MemberBase.DoDefine): When reporting a wrong
7905         accessibility level, we use MethodCore to compare instead of
7906         Method (this was a regression in some refactoring effort).
7907
7908         So now we correctly report cs0056 again.
7909
7910         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
7911         testing the target_type (which was known to be object_type) and
7912         not the source type (which is anonymous_method).
7913
7914         Fixed reporting of error cs1660.
7915
7916         * expression.cs (UserCast.Source): Expose the underlying cast.
7917
7918         * statement.cs (Switch.SwitchGoverningType): Sort the list of
7919         allowed types to find a match to int32 first (most common).
7920
7921         In addition, it ignores any ImplicitUserConversions that did an
7922         internal implicit conversion (as the switch statement allows only
7923         one integral conversion to exist).
7924
7925         * class.cs (PartialContainer.Create): rename `name' to
7926         `member_name' for clarity.  Then replace the string calls with a
7927         call to MemberName.GetPartialName, as now using
7928         MemberName.ToString is an error (this is due to the side effects
7929         it had, that were fixed in the past).
7930
7931         This will restore the error reporting on a number of partial class
7932         errors that were missusing this (and getting an exception as a
7933         results, which is now just a plain textual warning, because
7934         yyparse debug output would crash otherwise).
7935
7936 2004-11-26  Raja R Harinath  <rharinath@novell.com>
7937
7938         * Makefile (PROGRAM_INSTALL_DIR): Remove.
7939
7940 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7941
7942         * rootcontext.cs (LookupType): Make sure to cache lookups that
7943         don't give us a negative result. This saves about 5% of corlib
7944         compilation time.
7945
7946 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7947
7948         * report.cs (AbstractMessage.Print): messages are sent to stderr
7949
7950         * class.cs (TypeContainer.GetClassBases): It is an error to have a
7951         non-interface in the list of interfaces (at this point, either
7952         parent was properly set, or a base class is being listed in the
7953         interfaces section).
7954
7955         This flags error 1722, and resolves the crash from bug 69259.
7956
7957 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7958
7959         * statement.cs (Using.EmitExpressionFinally): make this work right
7960         for valuetypes. Fixes 69926.
7961
7962 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7963
7964         * const.cs (Const.ChangeType): Cope with the "0 literal can be
7965         converted to an enum" here, before we try to change the underlying
7966         type.  This code exists, but it is a different code path than the
7967         one used while encoding constants.
7968
7969         (ImplicitReferenceConversionExists): In addition, resynchronized
7970         the code here, so it matches the same code in
7971         ImplicitReferenceConversionExists for the `from any class-type S
7972         to any interface-type T'.       
7973
7974 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
7975
7976         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
7977
7978 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
7979
7980         * cs-parser.jay: Use verbosity accordingly. 
7981
7982 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7983
7984         * expression.cs (Unary.ResolveOperator): Do not report warning;
7985         AddressOf reads from variable.
7986         
7987         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
7988
7989 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7990
7991         Fix bug #69462
7992
7993         * attribute.cs (Attributable): Removed CheckTargets.
7994         (Attributes.Emit): Explicit attribute targets are tested here.
7995
7996         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
7997         not enabled for interfaces.
7998
7999         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
8000         (GetAssemblyName): Ouch next bug there.
8001
8002 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
8003
8004         * expression.cs: Error 275 added.
8005         
8006 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
8007
8008         Fix bug #69177 (Implemented decimal constant support)
8009
8010         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
8011         (BinaryFold): Add DecimalConstant.
8012
8013         * const.cs (Define): Decimal constant 
8014         (is not constant.
8015         (ChangeType): Add decimal type handling.
8016         (LookupConstantValue): Don't set value for decimal type but
8017         emit DecimalConstantAttribute. Needed for constant optimization.
8018
8019         * constant.cs (ToDecimal): New method.
8020         (ConvertToDecimal): New method.
8021         (IntConstant): Implemented ConvertToDecimal.
8022         (DecimalConstant.Emit): Emit optimized version for decimals in
8023         int range.
8024
8025         * expression.cs (ResolveOperator): Changed order of constant
8026         reduction to work correctly with native types which have
8027         overloaded operators.
8028         (ResolveMemberAccess): Extract constant value from attribute
8029         for decimal type.
8030
8031         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
8032
8033         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
8034         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
8035         (ChangeType): Decimal is special.
8036         (TypeToCoreType): Add decimal type.
8037
8038 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8039
8040         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
8041         decimal types.
8042
8043 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
8044
8045         * class.cs (EventField.ApplyAttributeBuilder): Fix error
8046         test cs1667-5.cs.
8047
8048 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8049
8050         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
8051
8052         * pending.cs (PendingImplementation): Grab only interfaces.
8053
8054 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
8055
8056         * statement.cs (ForeachHelperMethods): Add location member and
8057         error 202 detection.
8058
8059 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
8060
8061         * expression.cs (DoResolveBase): Fixed wrong warning for out
8062         variables.
8063
8064 2004-12-04  Martin Baulig  <martin@ximian.com>
8065
8066         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
8067         to check whether the conversion is ok.
8068
8069         * typemanager.cs (TypeManager.GetTypeArguments): Just return
8070         `Type.EmptyTypes' if we're not a generic TypeContainer.
8071
8072 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
8073
8074         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
8075         old bug: when converting from the null literal to a pointer,
8076         return an EmptyCast, not the NullLiteral.
8077
8078         This fixes #69921, the recent null_type changes probably made this
8079         bug more prominent.
8080
8081 2004-12-03  Martin Baulig  <martin@ximian.com>
8082
8083         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8084         method as our child, call AnonymousMethod.Compatible() on it.
8085
8086 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
8087
8088         * class.cs (FieldBase): Use an unused bit field from the field to
8089         encode the `has_offset' property from the FieldMember.  This saves
8090         a couple of Ks on bootstrap compilation.
8091
8092         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8093         method as our child, return the AnonymousMethod resolved
8094         expression.
8095
8096         * expression.cs (New.DoResolve): Allow return values from
8097         NewDelegate to also include AnonymousMethods.
8098
8099         Fixes #70150.
8100
8101 2004-11-29  Raja R Harinath  <rharinath@novell.com>
8102
8103         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
8104         cs1648 report.
8105         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
8106         System.Runtime.InteropServices._Exception, since it's a base
8107         interface of the core type System.Exception in the net_2_0 profile.
8108
8109 2004-11-27  Martin Baulig  <martin@ximian.com>
8110
8111         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
8112
8113 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8114
8115         * Makefile: Convert to use executable.make.
8116         * gmcs.exe.sources: New.
8117
8118 2004-11-25  Martin Baulig  <martin@ximian.com>
8119
8120         * expression.cs (Invocation.InferType): Added support for byref types.
8121
8122 2004-11-25  Martin Baulig  <martin@ximian.com>
8123
8124         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
8125         in TypeManager.TypeToCoreType().
8126
8127 2004-11-25  Martin Baulig  <martin@ximian.com>
8128
8129         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
8130         "Dispose" method from the `current_type'.
8131         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
8132         DoDefineMembers() instead of using the MethodBuilder; this is
8133         required for generic iterators.
8134
8135         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
8136
8137 2004-11-24  Martin Baulig  <martin@ximian.com>
8138
8139         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
8140
8141 2004-11-20  Martin Baulig  <martin@ximian.com>
8142
8143         * expression.cs (Invocation.InferType): Correctly infer generic
8144         instances; see gen-103.cs.
8145         (Invocation.InferTypeArguments): If a generic method doesn't have
8146         any unbound type parameters, we don't need to infer anything.
8147
8148 2004-11-19  Raja R Harinath  <rharinath@novell.com>
8149
8150         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
8151
8152 2004-11-17  Raja R Harinath  <rharinath@novell.com>
8153
8154         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
8155         (TypeHandle.GetMemberCache): New.
8156         (TypeHandle.TypeHandle): Update.
8157         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
8158         (TypeManager.LookupParentInterfacesCache):
8159         Rename from LookupInterfaceCache.  Optimize slightly.
8160         (TypeManager.MemberLookup_FindMembers): Update.
8161         * decl.cs (MemberCache.MemberCache): Set Container to null in the
8162         multi-type variant.
8163         (AddCacheContents): Rename from AddHashtable.
8164         * class.cs (TypeContainer.parent_container): Remove.
8165         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
8166         (TypeContainer.DoDefineMembers): Don't initialize it.
8167         Update to name changes.
8168         
8169 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
8170
8171         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
8172         that factors the code to check access modifiers on override.  
8173
8174         (PropertyBase): Use the code here.
8175
8176         Patch from Lluis S'anchez, fixes bug #69361.
8177
8178 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
8179
8180         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
8181         routine that is used to report the use of a captured variable
8182         whose address has been taken.
8183
8184         There are two checks: one when variables are being captured and
8185         the other check is when the address of a variable is taken. 
8186         
8187         (because an anonymous methods might be resolved before *or* after
8188         the address has been taken) and 
8189
8190         * expression.cs (Conditional.DoResolve): Remove the special
8191         casing that Martin added to trueExpr and falseExpr being both
8192         NullLiteral.  We get the right behavior now just by introducing
8193         the null_type into the compiler. 
8194
8195         * convert.cs (ExplicitConversion): Change the code to use
8196         null_type instead of testing `expr is NullLiteral'.
8197         (ImplicitConversionStandard): use null_type too.
8198         (ImplicitReferenceConversionExists): use null_type too.
8199         (ImplicitReferenceConversion): use null_type too.
8200
8201         * literal.cs: The type of `NullLiteral' is now null_type instead
8202         of object_type. 
8203         (Resolve): Set the type here.
8204
8205         * typemanager.cs: Introduce null_type.
8206
8207 2004-11-18  Martin Baulig  <martin@ximian.com>
8208
8209         * rootcontext.cs
8210         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
8211
8212 2004-11-18  Martin Baulig  <martin@ximian.com>
8213
8214         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
8215
8216 2004-11-18  Martin Baulig  <martin@ximian.com>
8217
8218         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
8219         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
8220         call ResolveConstructedType() on it to resolve it without checking
8221         constraints.
8222         (Constraints.ResolveTypes): Check them here.
8223         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
8224         but don't check constraints.
8225         (ConstructedType.ResolveAsTypeTerminal): Override this and also
8226         check constraints here.
8227         (ConstructedType.ResolveConstructedType): New public method.  This
8228         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
8229         resolve ourselves without checking constraints.
8230
8231         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
8232
8233 2004-11-18  Martin Baulig  <martin@ximian.com>
8234
8235         * decl.cs
8236         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
8237
8238         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
8239
8240 2004-11-18  Martin Baulig  <martin@ximian.com>
8241
8242         * ecore.cs (TypeExpr.ResolveType): Removed.
8243         (Expression.ResolveAsTypeTerminal): We always return a fully
8244         resolved `TypeExpr', so we can just access its `Type'.
8245
8246         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
8247
8248 2004-11-17  Martin Baulig  <martin@ximian.com>
8249
8250         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
8251         sure we don't return any unresolved TypeExpr's.
8252         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
8253         a `TypeExpr'.
8254         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
8255
8256         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
8257         unresolved `ConstructedType's.
8258
8259 2004-11-17  Martin Baulig  <martin@ximian.com>
8260
8261         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
8262
8263 2004-11-17  Martin Baulig  <martin@ximian.com>
8264
8265         * ecore.cs
8266         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
8267
8268         * decl.cs (DeclSpace.ResolveType): Removed.
8269         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
8270
8271 2004-11-17  Martin Baulig  <martin@ximian.com>
8272
8273         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
8274         direction, like FindMembers() does.  Fixes #69546, testcase is in
8275         test-315.cs.    
8276
8277 2004-11-16  Martin Baulig  <martin@ximian.com>
8278
8279         This is based on a patch from Marek Safar, see bug #69082.
8280         Fixes bugs #63705 and #67130.
8281
8282         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
8283         method; create a MemberCache for an interface type and cache the
8284         result.
8285
8286         * decl.cs (IMemberContainer.ParentContainer): Removed.
8287         (IMemberContainer.ParentCache): New property.
8288         (MemberCache.SetupCacheForInterface): Removed.
8289         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
8290         to create a cache for an interface's "parent".
8291
8292         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
8293         interfaces too.
8294
8295 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
8296
8297         * statement.cs: Avoid adding bools to a hashtable.
8298
8299 2004-11-15  Martin Baulig  <martin@ximian.com>
8300
8301         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
8302
8303 2004-11-11  Martin Baulig  <martin@ximian.com>
8304
8305         * typemanager.cs (TypeManager.GetMethodName): New method.
8306
8307         * class.cs (MethodData.Define): Include the generic arity in the
8308         name of an explicit interface; also add it to the method name.
8309
8310         * pending.cs (PendingImplementation.InterfaceMethod): The method
8311         name now includes the generic arity.
8312
8313 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
8314
8315         * expression.cs (Invocation.OverloadResolve): Flag error if we are
8316         calling an unsafe method from a safe location.
8317
8318 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
8319
8320         Fix #69167
8321         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
8322
8323 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
8324
8325         * namespace.cs (VerifyUsing): use GetPartialName instead of
8326         ToString. 
8327
8328 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
8329
8330         * statement.cs (Return.Resolve): Fix regression in typo: if
8331         `in_exc', we have to request a NeedReturnLabel, this was a typo
8332         introduced in the anonymous method check-in.  Fixes #69131.
8333
8334         * Indexers were using the ShortName when defining themselves,
8335         causing a regression in the compiler bootstrap when applying the
8336         patch from 2004-11-02 (first part), now they use their full name
8337         and the bug is gone.
8338
8339 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
8340
8341         * driver.cs: Strip the path from the names of embedded resources. Fixes
8342         #68519.
8343
8344 2004-11-04  Raja R Harinath  <rharinath@novell.com>
8345
8346         Fix error message regression: cs0104-2.cs.
8347         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
8348         (AliasEntry.Resolve): Update.
8349         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
8350         'silent' flag.
8351         (RootContext.LookupType): Update.
8352
8353 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
8354
8355         * cs-parser.jay: Add support for handling accessor modifiers
8356         * class: Add support port accessor modifiers and error checking,
8357         define PropertyMethod.Define as virtual (not abstract anymore)
8358         * ecore.cs: Add checking for proeprties access with access modifiers
8359         * iterators.cs: Modify Accessor constructor call based in the modified
8360         constructor
8361 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
8362
8363         * expression.cs (StringConcat): Handle being called twice,
8364         as when we have a concat in a field init with more than two
8365         ctors in the class
8366
8367 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
8368
8369         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
8370         special case explicit implementations, we should always produce
8371         the .property or .event declaration.
8372         
8373         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
8374         since it will not return correct data if people use this
8375         unresolved in the presence of using statements (see test-313).
8376
8377         * class.cs (MethodData.Define): If we are an explicit interface
8378         implementation, set the method name to the full name of the
8379         interface plus the name of the method.  
8380
8381         Notice that using the method.MethodName.GetFullName() does not
8382         work, as it will only contain the name as declared on the source
8383         file (it can be a shorthand in the presence of using statements)
8384         and not the fully qualifed type name, for example:
8385
8386         using System;
8387
8388         class D : ICloneable {
8389                 object ICloneable.Clone ()  {
8390                 }
8391         }
8392
8393         Would produce a method called `ICloneable.Clone' instead of
8394         `System.ICloneable.Clone'.
8395
8396         * namespace.cs (Alias.Resolve): Use GetPartialName.
8397         
8398 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8399
8400         * cs-parser.jay: Add error 1055 report.
8401
8402 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
8403
8404         * assign.cs (Assign.DoResolve): Only do the transform of
8405         assignment into a New if the types are compatible, if not, fall
8406         through and let the implicit code deal with the errors and with
8407         the necessary conversions. 
8408
8409 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8410
8411         * cs-parser.jay: Add error 1031 report.
8412
8413         * cs-tokenizer.cs: Add location for error 1038.
8414
8415 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8416
8417         * cs-parser.jay: Add error 1016 report.
8418
8419 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8420
8421         * cs-parser.jay: Add errors 1575,1611 report.
8422
8423 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8424
8425         * cs-parser.jay: Add error 1001 report.
8426
8427 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8428
8429         Fix #68850
8430         * attribute.cs (GetMarshal): Add method argument for
8431         caller identification.
8432
8433         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
8434         agument for GetMarshal and RuntimeMissingSupport.
8435
8436 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8437
8438         * attribute.cs (ExtractSecurityPermissionSet): Removed
8439         TypeManager.code_access_permission_type.
8440
8441         * typemanager.cs: Removed TypeManager.code_access_permission_type.
8442
8443 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
8444
8445         * expression.cs (LocalVariableReference.DoResolveLValue): Check
8446         for obsolete use of a variable here.   Fixes regression on errors
8447         cs0619-25 and cs0619-26.
8448
8449 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
8450
8451         Fix #62358, implemented security attribute encoding.
8452
8453         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
8454         Tests permitted SecurityAction for assembly or other types.
8455         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
8456         data from SecurityPermissionAttribute to PermisionSet class.
8457
8458         * class.cs (ApplyAttributeBuilder): Added special handling
8459         for System.Security.Permissions.SecurityAttribute based types.
8460
8461         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
8462         special handling for System.Security.Permissions.SecurityAttribute
8463         based types.
8464
8465         * enum.cs (ApplyAttributeBuilder): Added special handling
8466         for System.Security.Permissions.SecurityAttribute based types.
8467
8468         * parameter.cs (ApplyAttributeBuilder): Added special handling
8469         for System.Security.Permissions.SecurityAttribute based types.
8470
8471         * rootcontext.cs: Next 2 core types.
8472
8473         * typemanager.cs (TypeManager.security_permission_attr_type):
8474         Built in type for the SecurityPermission Attribute.
8475         (code_access_permission_type): Build in type.
8476
8477 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
8478
8479         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
8480         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
8481         all of this information into
8482         EmitContext.EmitCapturedVariableInstance.
8483         
8484         * codegen.cs (EmitCapturedVariableInstance): move here the
8485         funcionality of emitting an ldarg.0 in the presence of a
8486         remapping.   This centralizes the instance emit code.
8487
8488         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8489         then emit a load of this: it means that we have reached the
8490         topmost ScopeInfo: the one that contains the pointer to the
8491         instance of the class hosting the anonymous method.
8492
8493         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8494         captures to the topmost CaptureContext.
8495
8496 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8497
8498         * expression.cs (LocalVariableReference): Move the knowledge about
8499         the iterators into codegen's EmitCapturedVariableInstance.
8500
8501 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8502
8503         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8504         all code paths return a value from an anonymous method (it is the
8505         same as the 161 error, but for anonymous methods).
8506
8507 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8508
8509         The introduction of anonymous methods in the compiler changed
8510         various ways of doing things in the compiler.  The most
8511         significant one is the hard split between the resolution phase
8512         and the emission phases of the compiler.
8513
8514         For instance, routines that referenced local variables no
8515         longer can safely create temporary variables during the
8516         resolution phase: they must do so from the emission phase,
8517         since the variable might have been "captured", hence access to
8518         it can not be done with the local-variable operations from the runtime.
8519         
8520         * statement.cs 
8521
8522         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8523         is a toplevel block.
8524
8525         (ToplevelBlock): A new kind of Block, these are the blocks that
8526         are created by the parser for all toplevel method bodies.  These
8527         include methods, accessors and anonymous methods.
8528
8529         These contain some extra information not found in regular blocks:
8530         A pointer to an optional CaptureContext (for tracking captured
8531         local variables and parameters).  A pointer to the parent
8532         ToplevelBlock.
8533         
8534         (Return.Resolve): Catch missmatches when returning a value from an
8535         anonymous method (error 1662).
8536         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8537         phase.
8538
8539         (Break.Resolve): ditto.
8540
8541         (SwitchLabel): instead of defining the labels during the
8542         resolution phase, we now turned the public ILLabel and ILLabelCode
8543         labels into methods called GetILLabelCode() and GetILLabel() that
8544         only define the label during the Emit phase.
8545
8546         (GotoCase): Track the SwitchLabel instead of the computed label
8547         (its contained therein).  Emit the code by using
8548         SwitchLabel.GetILLabelCode ().
8549
8550         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8551         whether the Local has been captured or not.
8552
8553         (LocalInfo.IsCaptured): New property, used to tell whether the
8554         local has been captured.
8555         
8556         * anonymous.cs: Vastly updated to contain the anonymous method
8557         support.
8558
8559         The main classes here are: CaptureContext which tracks any
8560         captured information for a toplevel block and ScopeInfo used to
8561         track the activation frames for various local variables.   
8562
8563         Each toplevel block has an optional capture context associated
8564         with it.  When a method contains an anonymous method both the
8565         toplevel method and the anonymous method will create a capture
8566         context.   When variables or parameters are captured, they are
8567         recorded on the CaptureContext that owns them, for example:
8568
8569         void Demo () {
8570              int a;
8571              MyDelegate d = delegate {
8572                  a = 1;
8573              }
8574         }
8575
8576         Here `a' will be recorded as captured on the toplevel
8577         CapturedContext, the inner captured context will not have anything
8578         (it will only have data if local variables or parameters from it
8579         are captured in a nested anonymous method.
8580
8581         The ScopeInfo is used to track the activation frames for local
8582         variables, for example:
8583
8584         for (int i = 0; i < 10; i++)
8585                 for (int j = 0; j < 10; j++){
8586                    MyDelegate d = delegate {
8587                         call (i, j);
8588                    }
8589                 }
8590
8591         At runtime this captures a single captured variable `i', but it
8592         captures 10 different versions of the variable `j'.  The variable
8593         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8594         recorded on a child.  
8595
8596         The toplevel ScopeInfo will also track information like the `this'
8597         pointer if instance variables were referenced (this is necessary
8598         as the anonymous method lives inside a nested class in the host
8599         type of the method). 
8600
8601         (AnonymousMethod): Expanded to track the Toplevel, implement
8602         `AnonymousMethod.Compatible' to tell whether an anonymous method
8603         can be converted to a target delegate type. 
8604
8605         The routine now also produces the anonymous method content
8606
8607         (AnonymousDelegate): A helper class that derives from
8608         DelegateCreation, this is used to generate the code necessary to
8609         produce the delegate for the anonymous method that was created. 
8610
8611         * assign.cs: API adjustments for new changes in
8612         Convert.ImplicitStandardConversionExists.
8613
8614         * class.cs: Adjustments to cope with the fact that now toplevel
8615         blocks are of type `ToplevelBlock'. 
8616
8617         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
8618         insteda of standard blocks.
8619
8620         Flag errors if params arguments are passed to anonymous methods.
8621
8622         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
8623         `CurrentAnonymousMethod' which points to the current Anonymous
8624         Method.  The variable points to the AnonymousMethod class that
8625         holds the code being compiled.  It is set in the new EmitContext
8626         created for the anonymous method.
8627
8628         (EmitContext.Phase): Introduce a variable and an enumeration to
8629         assist in enforcing some rules about when and where we are allowed
8630         to invoke certain methods (EmitContext.NeedsReturnLabel is the
8631         only one that enfonces this right now).
8632
8633         (EmitContext.HaveCaptureInfo): new helper method that returns
8634         whether we have a CapturedContext initialized.
8635
8636         (EmitContext.CaptureVariable): New method used to register that a
8637         LocalInfo must be flagged for capturing. 
8638
8639         (EmitContext.CapturedParameter): New method used to register that a
8640         parameters must be flagged for capturing. 
8641         
8642         (EmitContext.CapturedField): New method used to register that a
8643         field must be flagged for capturing. 
8644
8645         (EmitContext.HaveCapturedVariables,
8646         EmitContext.HaveCapturedFields): Return whether there are captured
8647         variables or fields. 
8648
8649         (EmitContext.EmitMethodHostInstance): This is used to emit the
8650         instance for the anonymous method.  The instance might be null
8651         (static methods), this (for anonymous methods that capture nothing
8652         and happen to live side-by-side with the current method body) or a
8653         more complicated expression if the method has a CaptureContext.
8654
8655         (EmitContext.EmitTopBlock): Routine that drives the emission of
8656         code: it will first resolve the top block, then emit any metadata
8657         and then emit the code.  The split is done so that we can extract
8658         any anonymous methods and flag any captured variables/parameters.
8659         
8660         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
8661         during this phase, the ILGenerator should not be used as labels
8662         and local variables declared here might not be accessible to any
8663         code that is part of an anonymous method.  
8664
8665         Exceptions to this include the temporary variables that are
8666         created by some statements internally for holding temporary
8667         variables. 
8668         
8669         (EmitContext.EmitMeta): New routine, in charge of emitting all the
8670         metadata for a cb
8671
8672         (EmitContext.TemporaryReturn): This method is typically called
8673         from the Emit phase, and its the only place where we allow the
8674         ReturnLabel to be defined other than the EmitMeta.  The reason is
8675         that otherwise we would have to duplicate a lot of logic in the
8676         Resolve phases of various methods that today is on the Emit
8677         phase. 
8678
8679         (EmitContext.NeedReturnLabel): This no longer creates the label,
8680         as the ILGenerator is not valid during the resolve phase.
8681
8682         (EmitContext.EmitThis): Extended the knowledge in this class to
8683         work in anonymous methods in addition to iterators. 
8684
8685         (EmitContext.EmitCapturedVariableInstance): This emits whatever
8686         code is necessary on the stack to access the instance to a local
8687         variable (the variable will be accessed as a field).
8688
8689         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
8690         EmitContext.EmitAddressOfParameter): Routines to support
8691         parameters (not completed at this point). 
8692         
8693         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
8694         will also remove the parameters.
8695
8696         * convert.cs (Convert): Define a `ConstantEC' which points to a
8697         null.  This is just to prefity some code that uses
8698         ImplicitStandardConversion code and do not have an EmitContext
8699         handy.
8700
8701         The idea is to flag explicitly that at that point in time, it is
8702         known that the conversion will not trigger the delegate checking
8703         code in implicit conversions (which requires a valid
8704         EmitContext). 
8705
8706         Everywhere: pass new EmitContext parameter since
8707         ImplicitStandardConversionExists now requires it to check for
8708         anonymous method conversions. 
8709
8710         (Convert.ImplicitStandardConversionExists): If the type of an
8711         expression is the anonymous_method_type, and the type is a
8712         delegate, we invoke the AnonymousMethod.Compatible method to check
8713         whether an implicit conversion is possible. 
8714
8715         (Convert.ImplicitConversionStandard): Only do implicit method
8716         group conversions if the language level is not ISO_1.
8717
8718         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
8719         MethodInfo for the Invoke method.  used by Delegate and
8720         AnonymousDelegate.
8721
8722         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
8723         method conversions if the target type is a delegate.
8724
8725         Removed extra debugging nops.
8726
8727         (LocalVariableReference): Turn the `local_info' into a public
8728         field. 
8729
8730         Add `prepared' field, the same hack used for FieldExprs to cope
8731         with composed assignments, as Local variables do not necessarily
8732         operate purely on the stack as they used to: they can be captured
8733         fields. 
8734
8735         Add `temp' for a temporary result, like fields.
8736
8737         Refactor DoResolve and DoResolveLValue into DoResolveBase.
8738
8739         It now copes with Local variables that are captured and emits the
8740         proper instance variable to load it from a field in the captured
8741         case. 
8742
8743         (ParameterReference.DoResolveBase): During the resolve phase,
8744         capture parameters if we are in an anonymous method.
8745
8746         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
8747         anonymous method, use the EmitContext helper routines to emit the
8748         parameter reference.
8749
8750         * iterators.cs: Set RemapToProxy to true/false during the
8751         EmitDispose class.
8752
8753         * parameters.cs (GetParameterByName): New helper method. 
8754
8755         * typemanager.cs (anonymous_method_type) a new type that
8756         represents an anonyous method.  This is always an internal type,
8757         used as a fencepost to test against the anonymous-methodness of an
8758         expression. 
8759         
8760 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
8761
8762         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
8763         561 report.
8764         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
8765
8766 2004-11-10  Martin Baulig  <martin@ximian.com>
8767
8768         * expression.cs (Invocation.BetterFunction): If two methods have
8769         equal parameter types, but only one of them is generic, the
8770         non-generic one wins.
8771         (New.DoResolve): Don't set `is_struct' to false if we're a generic
8772         instance; just use `Type.IsValueType' to determine whether
8773         something is a struct or not.
8774         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
8775         so we can be called multiple times.
8776
8777 2004-11-10  Martin Baulig  <martin@ximian.com>
8778
8779         * generic.cs (TypeParameter.DefineConstraints): New public method.
8780         (TypeParameter.CheckAccessLevel): Override this and return true.
8781         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
8782         override ResolveType() anymore.
8783         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
8784
8785 2004-11-10  Martin Baulig  <martin@ximian.com>
8786
8787         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
8788         call DeclSpace.ResolveNestedType() on it.
8789
8790 2004-11-10  Martin Baulig  <martin@ximian.com>
8791
8792         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
8793         non-null, call ParameterModifier() on it.
8794
8795 2004-11-10  Martin Baulig  <martin@ximian.com>
8796
8797         * iterators.cs
8798         (Iterators): Added `current_type' and `this_type' fields.
8799         (Iterators.DefineIterator): Create a new EmitContext and store it
8800         in `ec'; compute `this_type'.
8801
8802 2004-11-10  Martin Baulig  <martin@ximian.com>
8803
8804         * typemanager.cs
8805         (TypeManager.IsPrivateAccessible): New public method.
8806         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
8807
8808 2004-11-10  Martin Baulig  <martin@ximian.com>
8809
8810         * class.cs (TypeContainer.DefineType): Call
8811         TypeBuilder.DefineGenericParameters() before resolving the type
8812         parameters.
8813         (MethodData.parent_method): New protected field.
8814         (MethodData..ctor): Added `MethodInfo parent_method' argument.
8815         (MethodData.Define): Compute `parent_method'.
8816
8817         * decl.cs
8818         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
8819         (MemberCore.GetClsCompliantAttributeValue): Likewise.
8820         (DeclSpace.ec): New protected field; store the EmitContext here.
8821         (DeclSpace.EmitContext): New public property.
8822         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
8823         (DeclSpace.ResolveNestedType): New public method.
8824         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
8825         (DeclSpace.NestedAccessible): Added `Type tb' argument.
8826         (DeclSpace.FamilyAccessible): Likewise.
8827         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
8828         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
8829         EmitContext.
8830
8831         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
8832         field.
8833
8834         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
8835         (Enum.Emit): Don't create a new EmitContext.
8836
8837 2004-10-18  Martin Baulig  <martin@ximian.com>
8838
8839         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
8840         `Type' directly, but call ResolveType() on it.
8841         (Catch.Resolve): Likewise.
8842         (Foreach.Resolve): Likewise.
8843
8844 2004-10-18  Martin Baulig  <martin@ximian.com>
8845
8846         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
8847         `Type' directly, but call ResolveType() on it.
8848         (Probe.DoResolve): Likewise.
8849         (ArrayCreation.LookupType): Likewise.
8850         (TypeOf.DoResolve): Likewise.
8851         (SizeOf.DoResolve): Likewise.
8852
8853 2004-10-18  Raja R Harinath  <rharinath@novell.com>
8854
8855         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
8856         the ResolveType.
8857
8858 2004-10-17  John Luke  <john.luke@gmail.com>
8859
8860         * class.cs (Operator.GetSignatureForError): use CSharpName
8861
8862         * parameter.cs (Parameter.GetSignatureForError): Returns
8863         correct name even if was not defined.
8864
8865 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8866
8867         Fix #65816.
8868         * class.cs (TypeContainer.EmitContext): New property.
8869         (DefineNestedTypes): Create an emitcontext for each part.
8870         (MethodCore.DoDefineParameters): Use container's emitcontext.
8871         Pass type array to InternalParameters.
8872         (MemberBase.DoDefine): Use container's emitcontext.
8873         (FieldMember.Define): Likewise.
8874         (Event.Define): Likewise.
8875         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8876         Pass type array to InternalParameters.
8877         (SetIndexerMethod.GetParameterInfo): Likewise.
8878         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8879         * delegate.cs (Define): Pass emitcontext to
8880         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8881         array to InternalParameters.
8882         * expression.cs (ParameterReference.DoResolveBase): Pass
8883         emitcontext to GetParameterInfo.
8884         (ComposedCast.DoResolveAsTypeStep): Remove check on
8885         ec.ResolvingTypeTree.
8886         * parameter.cs (Parameter.Resolve): Change argument to
8887         EmitContext.  Use ResolveAsTypeTerminal.
8888         (Parameter.GetSignature): Change argument to EmitContext.
8889         (Parameters.ComputeSignature): Likewise.
8890         (Parameters.ComputeParameterTypes): Likewise.
8891         (Parameters.GetParameterInfo): Likewise.
8892         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8893         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8894         * support.cs (InternalParameters..ctor): Remove variant that takes
8895         a DeclSpace.
8896         * typemanager.cs (system_intptr_expr): New.
8897         (InitExpressionTypes): Initialize it.
8898
8899 2004-10-12  Chris Toshok  <toshok@ximian.com>
8900
8901         * cs-parser.jay: fix location for try_statement and catch_clause.
8902
8903 2004-10-18  Martin Baulig  <martin@ximian.com>
8904
8905         * class.cs (FieldMember.Define): Don't access the TypeExpr's
8906         `Type' directly, but call ResolveType() on it.
8907         (MemberBase.DoDefine): Likewise.
8908
8909         * expression.cs (New.DoResolve): Don't access the TypeExpr's
8910         `Type' directly, but call ResolveType() on it.
8911         (ComposedCast.DoResolveAsTypeStep): Likewise.
8912
8913         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
8914         `Type' directly, but call ResolveType() on it.
8915
8916 2004-10-17  John Luke  <john.luke@gmail.com>
8917
8918         * class.cs (Operator.GetSignatureForError): use CSharpName
8919
8920         * parameter.cs (Parameter.GetSignatureForError): Returns
8921         correct name even if was not defined.
8922
8923 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8924
8925         Fix #65816.
8926         * class.cs (TypeContainer.EmitContext): New property.
8927         (DefineNestedTypes): Create an emitcontext for each part.
8928         (MethodCore.DoDefineParameters): Use container's emitcontext.
8929         Pass type array to InternalParameters.
8930         (MemberBase.DoDefine): Use container's emitcontext.
8931         (FieldMember.Define): Likewise.
8932         (Event.Define): Likewise.
8933         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8934         Pass type array to InternalParameters.
8935         (SetIndexerMethod.GetParameterInfo): Likewise.
8936         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8937         * delegate.cs (Define): Pass emitcontext to
8938         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8939         array to InternalParameters.
8940         * expression.cs (ParameterReference.DoResolveBase): Pass
8941         emitcontext to GetParameterInfo.
8942         (ComposedCast.DoResolveAsTypeStep): Remove check on
8943         ec.ResolvingTypeTree.
8944         * parameter.cs (Parameter.Resolve): Change argument to
8945         EmitContext.  Use ResolveAsTypeTerminal.
8946         (Parameter.GetSignature): Change argument to EmitContext.
8947         (Parameters.ComputeSignature): Likewise.
8948         (Parameters.ComputeParameterTypes): Likewise.
8949         (Parameters.GetParameterInfo): Likewise.
8950         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8951         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8952         * support.cs (InternalParameters..ctor): Remove variant that takes
8953         a DeclSpace.
8954         * typemanager.cs (system_intptr_expr): New.
8955         (InitExpressionTypes): Initialize it.
8956
8957 2004-10-12  Chris Toshok  <toshok@ximian.com>
8958
8959         * cs-parser.jay: fix location for try_statement and catch_clause.
8960
8961 2004-10-07  Raja R Harinath  <rharinath@novell.com>
8962
8963         More DeclSpace.ResolveType avoidance.
8964         * decl.cs (MemberCore.InUnsafe): New property.
8965         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
8966         with newly created EmitContext.
8967         (FieldMember.Define): Likewise.
8968         * delegate.cs (Delegate.Define): Likewise.
8969         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
8970         only if normal name-lookup fails.
8971         (TypeExpr.DoResolve): Enable error-checking.
8972         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
8973         (SizeOf.DoResolve): Likewise.
8974         (ComposedCast.DoResolveAsTypeStep): Likewise.
8975         (StackAlloc.DoResolve): Likewise.
8976         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
8977         (Block.Unsafe): New property.
8978         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
8979         (Unsafe): Set 'unsafe' flag of contained block.
8980         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
8981         (Fixed.Resolve): Likewise.
8982         (Catch.Resolve): Likewise.
8983         (Using.ResolveLocalVariableDecls): Likewise.
8984         (Foreach.Resolve): Likewise.
8985
8986 2004-10-05  John Luke <john.luke@gmail.com>
8987
8988         * cs-parser.jay: add location to error CS0175
8989
8990 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
8991
8992         * ecore.cs (Expression.Constantity): Add support for turning null
8993         into a constant.
8994
8995         * const.cs (Const.Define): Allow constants to be reference types
8996         as long as the value is Null.
8997
8998 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
8999
9000         * namespace.cs (NamespaceEntry.Using): No matter which warning
9001         level is set, check if this namespace name has already been added.
9002
9003 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
9004
9005         * expression.cs: reftype [!=]= null should always use br[true,false].
9006         # 67410
9007
9008 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
9009
9010         Fix #67108
9011         * attribute.cs: Enum conversion moved to 
9012         GetAttributeArgumentExpression to be applied to the all
9013         expressions.
9014
9015 2004-10-01  Raja R Harinath  <rharinath@novell.com>
9016
9017         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
9018         * class.c (TypeContainer.DefineType): Flag error if
9019         base types aren't accessible due to access permissions.
9020         * decl.cs (DeclSpace.ResolveType): Move logic to
9021         Expression.ResolveAsTypeTerminal.
9022         (DeclSpace.ResolveTypeExpr): Thin layer over
9023         Expression.ResolveAsTypeTerminal.
9024         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
9025         Refactor code into NestedAccess.  Use it.
9026         (DeclSpace.NestedAccess): New.
9027         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
9028         argument to silence errors.  Check access permissions.
9029         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
9030         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
9031         (Cast.DoResolve): Likewise.
9032         (New.DoResolve): Likewise.
9033         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
9034         (TypeOf.DoResolve): Likewise.
9035
9036         * expression.cs (Invocation.BetterConversion): Return the Type of
9037         the better conversion.  Implement section 14.4.2.3 more faithfully.
9038         (Invocation.BetterFunction): Make boolean.  Make correspondence to
9039         section 14.4.2.2 explicit.
9040         (Invocation.OverloadResolve): Update.
9041         (Invocation): Remove is_base field.
9042         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
9043         (Invocation.Emit): Likewise.
9044
9045 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
9046
9047         * cs-parser.jay: Reverted 642 warning fix.
9048
9049 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9050
9051         Fix bug #66615
9052         * decl.cs (FindMemberWithSameName): Indexer can have more than
9053         1 argument.
9054
9055 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9056
9057         * expression.cs (LocalVariableReference.DoResolveLValue):
9058         Do not report warning 219 for out values.
9059         (EmptyExpression.Null): New member to avoid extra allocations.
9060
9061 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9062
9063         * cs-parser.jay: Fix wrong warning 642 report.
9064
9065         * cs-tokenizer.cs (CheckNextToken): New helper;
9066         Inspect next character if is same as expected.
9067
9068 2004-09-23  Martin Baulig  <martin@ximian.com>
9069
9070         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9071         (Convert.ImplicitReferenceConversionExists): Likewise.
9072
9073 2004-11-09  Raja R Harinath  <rharinath@novell.com>
9074
9075         * Makefile (DISTFILES): Comment out a few missing files.
9076
9077 2004-10-29  Raja R Harinath  <rharinath@novell.com>
9078
9079         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
9080         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
9081         (gmcs.exe): Invoke bootstrap-libs.
9082         (clean-local): Clean the net_2_0_bootstrap profile too.
9083         (PROGRAM_INSTALL_DIR): New.
9084         (install-local): Use it.
9085
9086 2004-10-13  Martin Baulig  <martin@ximian.com>
9087
9088         * generic.cs (TypeManager.InflatedConstraints): New nested class.
9089         (TypeParameter.DefineType): If we're a method type parameter and
9090         that method is overriding something, "inflate" its constraints.
9091
9092 2004-10-12  Martin Baulig  <martin@ximian.com>
9093
9094         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
9095         and have type arguments, create and resolve a ConstructedType.
9096
9097 2004-10-12  Martin Baulig  <martin@ximian.com>
9098
9099         * decl.cs (MemberCache.FindMemberToOverride): Use
9100         TypeManager.IsEqual() to compare the parameters and Type.Equals()
9101         to compare the invocationType.
9102
9103         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
9104         When comparing two type parameters, only do the signature-only
9105         comparision for method type parameters.
9106
9107 2004-10-11  Martin Baulig  <martin@ximian.com>
9108
9109         * report.cs: Don't make --fatal abort on warnings, we have
9110         -warnaserror for that.
9111
9112 2004-10-11  Martin Baulig  <martin@ximian.com>
9113
9114         * typemanager.cs
9115         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
9116         (TypeManager.IsEqual): Call ourself recursively instead of using
9117         Type.IsEqual(). 
9118
9119 2004-10-11  Martin Baulig  <martin@ximian.com>
9120
9121         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
9122         on our own type parameters, not on the ones we inherit from a containing
9123         class.
9124
9125         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
9126         the comparision.
9127
9128         * generic.cs (TypeParameter.Define): We may only be called once.
9129
9130         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
9131         instead of TypeManager.IsEqual().
9132
9133 2004-09-28  Martin Baulig  <martin@ximian.com>
9134
9135         * generic.cs
9136         (GenericConstraints.EffectiveBaseClass): New public property.
9137         (TypeParameter.GenericConstraints): New public property.
9138         (ConstructedType.CheckConstraints): Improved.
9139
9140         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
9141         (Convert.TypeParameterConversion): New private method; use this in
9142         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
9143         for all conversions related to type parameters.
9144
9145 2004-09-24  Martin Baulig  <martin@ximian.com>
9146
9147         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
9148         type parameter conversions for type parameters which are known to
9149         be reference types.
9150
9151 2004-09-24  Martin Baulig  <martin@ximian.com>
9152
9153         * generic.cs (GenericConstraints): Added `IsReferenceType' and
9154         `IsValueType' properties.
9155
9156         * support.cs (ReflectionConstraints): Use
9157         Type.GetGenericParameterConstraints() instead of the old hack.
9158
9159 2004-09-24  Martin Baulig  <martin@ximian.com>
9160
9161         * generic.cs (GenericConstraints): Moved here and made it an
9162         abstract class.
9163
9164         * support.cs (GenericConstraints): Moved to generic.cs.
9165
9166 2004-09-24  Martin Baulig  <martin@ximian.com>
9167
9168         * support.cs
9169         (ReflectionConstraints): Un-nested this class and made it public.
9170
9171         * typemanager.cs
9172         (TypeManager.GetTypeParameterConstraints): New public method.
9173         (TypeManager.HasConstructorConstraint): Use the attributes.
9174
9175 2004-09-24  Martin Baulig  <martin@ximian.com>
9176
9177         * support.cs (GenericConstraints): Replaced `HasConstructor',
9178         `IsReferenceType' and `IsValueType' with `Attributes'.
9179         (ReflectionParameters.ReflectionConstraints): Removed the Create()
9180         method and made the .ctor public.
9181
9182         * generic.cs (Constraints.Attributes): New public property.
9183         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
9184         `IsReferenceType' -> `HasReferenceTypeConstraint' and
9185         `IsValueType' -> `HasValueTypeConstraint'.
9186
9187 2004-09-23  Martin Baulig  <martin@ximian.com>
9188
9189         * generic.cs (Constraints): Reflect latest runtime changes.
9190
9191 2004-09-23  Martin Baulig  <martin@ximian.com>
9192
9193         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9194         (Convert.ImplicitReferenceConversionExists): Likewise.
9195
9196 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9197
9198         * class.cs (Operator.Define): Add error 448 and 559 report.
9199         
9200 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9201
9202         * class.cs (MemberBase.IsTypePermitted): New protected
9203         method for checking error CS0610.
9204
9205 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9206
9207         * class.cs (TypeContainer.HasExplicitLayout): New property
9208         Returns whether container has StructLayout attribute set Explicit.
9209         (FieldMember): New abstract class for consts and fields.
9210         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
9211         (Field): Reuse FieldMember.
9212
9213         * const.cs (Const): Reuse FieldMember.
9214
9215         * rootcontext.cs: EmitConstants call moved to class.
9216
9217 2004-09-22  Martin Baulig  <martin@ximian.com>
9218
9219         Marek and me just fixed one of our oldest bugs: #28562 :-)
9220
9221         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
9222
9223         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
9224         we're an EnumConstant, just return that.
9225         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
9226         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
9227         to get the value which'll actually be written into the attribute.
9228         However, we have to use GetValue() to access the attribute's value
9229         in the compiler.        
9230
9231 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9232
9233         * constant.cs (Constant.IsNegative): New abstract property
9234         IsNegative.
9235
9236         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
9237         (StackAlloc.DoResolve): Reused IsNegative.
9238
9239 2004-09-22  Martin Baulig  <martin@ximian.com>
9240
9241         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
9242         public method; like LookupTypeContainer, but also works for
9243         generic instances.
9244
9245         * report.cs (Report.SymbolRelatedToPreviousError): Use
9246         TypeManager.LookupGenericTypeContainer().       
9247
9248 2004-09-22  Martin Baulig  <martin@ximian.com>
9249
9250         Thanks to Peter Sestoft for this bug report.
9251
9252         * expression.cs (Conditional): If both the `trueExpr' and the
9253         `falseExpr' is a NullLiteral, return a NullLiteral.
9254
9255 2004-09-22  Martin Baulig  <martin@ximian.com>
9256
9257         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
9258         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
9259         for the "get_Current" call.
9260
9261 2004-09-21  Martin Baulig  <martin@ximian.com>
9262
9263         * convert.cs (Convert.ImplicitReferenceConversion): When
9264         converting to an interface type, first check whether we're
9265         converting from a reference type.
9266
9267 2004-09-14  Martin Baulig  <martin@ximian.com>
9268
9269         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
9270
9271 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
9272
9273         Fixed bug #61902
9274         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
9275         called and is obsolete then this member suppress message
9276         when call is inside next [Obsolete] method or type.
9277
9278         * expression.cs: Use TestObsoleteMethodUsage member.
9279
9280 2004-09-14  Martin Baulig  <martin@ximian.com>
9281
9282         * genericparser.cs: Removed.
9283
9284 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
9285
9286         * class.cs (MethodCore.CheckBase): Fix bug #65757.
9287
9288 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
9289
9290         * attribute.cs (Attribute.Resolve): Add error 653 report.
9291
9292         * class.cs (Class.ApplyAttributeBuilder): Add error 641
9293         report.
9294         (Method.ApplyAttributeBuilder): Add error 685 report.
9295         (Operator.Define): Add error 564 report.
9296
9297         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
9298
9299         * expression.cs (Invocation.DoResolve): Add error
9300         245 and 250 report.
9301
9302         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
9303         error 674 report.
9304
9305 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9306
9307         * class.cs (ConstructorInitializer.Resolve):
9308         Wrong error number (515->516).
9309
9310 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9311
9312         * class.cs (Indexer.Define): Add error 631 report.
9313
9314 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9315
9316         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
9317
9318 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9319
9320         * expression.cs (Probe.DoResolve): Add error CS0241 report.
9321
9322 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
9323
9324         * cs-parser.jay: Added error CS0241 report.
9325
9326 2004-09-10  Raja R Harinath  <rharinath@novell.com>
9327
9328         * cs-parser.jay (fixed_statement): Introduce a scope for the
9329         declaration in the 'fixed' statement.
9330
9331 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9332
9333         * cs-parser.jay: Added CS0230 error report.
9334
9335 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9336
9337         * cs-parser.jay: Added errors CS0231 and CS0257 report.
9338
9339 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9340
9341         * expression.cs (Argument.Resolve): Added error CS0192 and
9342         CS0199 report.
9343
9344 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9345
9346         C# 2.0 #pragma warning feature
9347
9348         * cs-tokenizer.cs (PreProcessPragma): New method; 
9349         Handles #pragma directive.
9350
9351         * report.cs (WarningRegions): New class; Support
9352         class for #pragma warning directive. It tests whether
9353         warning is enabled for a given line.
9354
9355 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
9356
9357         * const.cs: Add more descriptive error report, tahnks to
9358         Sebastien. 
9359
9360 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
9361
9362         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
9363
9364 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
9365
9366         * expression.cs: Apply patch from Ben: Remove dead code from
9367         ArrayCreation, and remove the TurnintoConstant call in const.cs,
9368         as that code just threw an exception anwyays.
9369
9370         * const.cs: Remove the call to the turnintoconstant, for details
9371         see bug: #63144
9372         
9373         * literal.cs: The type of the null-literal is the null type;  So
9374         we use a placeholder type (literal.cs:System.Null, defined here)
9375         for it.
9376
9377         * expression.cs (Conditional.DoResolve): Remove some old code that
9378         is no longer needed, conversions have been fixed.
9379
9380         (ArrayCreationExpression.DoResolve): Return false if we fail to
9381         resolve the inner expression.
9382
9383 2004-09-07  Raja R Harinath  <rharinath@novell.com>
9384
9385         Fix test-290.cs.
9386         * cs-parser.jay (delegate_declaration): Record a delegate
9387         declaration as a type declaration.
9388         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
9389
9390 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
9391
9392         * parameter.cs: Do not crash if the type can not be resolved. 
9393
9394         * expression.cs: Report errors with unsafe pointers, fixes #64896
9395
9396 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
9397
9398         * expression.cs: Pointer arith always needs to do a conv.i
9399         if the operand is a long. fix 65320
9400
9401 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9402
9403         Fixed cs0619-37.cs, cs0619-38.cs
9404
9405         * enum.cs (GetObsoleteAttribute): Removed.
9406
9407         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
9408         on Enum member is double staged. The first is tested member
9409         and then enum.
9410
9411 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9412
9413         Fixed #56986, #63631, #65231
9414
9415         * class.cs: (TypeContainer.AddToMemberContainer): New method,
9416         adds member to name container.
9417         (TypeContainer.AddToTypeContainer): New method, adds type to
9418         name container.
9419         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
9420         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
9421         AddOperator): Simplified by reusing AddToMemberContainer.
9422         (TypeContainer.UserDefinedStaticConstructor): Changed to property
9423         instead of field.
9424         (Method.CheckForDuplications): Fixed implementation to test all
9425         possibilities.
9426         (MemberBase): Detection whether member is explicit interface
9427         implementation is now in constructor.
9428         (MemberBase.UpdateMemberName): Handles IndexerName.
9429         (Accessor): Changed to keep also location information.
9430         (AbstractPropertyEventMethod): Is derived from MemberCore.
9431         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
9432         will be emited or not.
9433         (PropertyBase.AreAccessorsDuplicateImplementation):
9434         Tests whether accessors are not in collision with some method.
9435         (Operator): Is derived from MethodCore to simplify common
9436         operations.
9437
9438         * decl.cs (Flags.TestMethodDuplication): Test for duplication
9439         must be performed.
9440         (DeclSpace.AddToContainer): Adds the member to defined_names
9441         table. It tests for duplications and enclosing name conflicts.
9442
9443         * enum.cs (EnumMember): Clean up to reuse the base structures
9444
9445 2004-09-03  Martin Baulig  <martin@ximian.com>
9446
9447         Merged latest changes into gmcs.  Please keep this comment in
9448         here, it makes it easier for me to see what changed in MCS since
9449         the last time I merged.
9450
9451 2004-09-03  Martin Baulig  <martin@ximian.com>
9452
9453         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9454         into TypeContainer, to make partial classes work again.
9455
9456 2004-09-03  Martin Baulig  <martin@ximian.com>
9457
9458         * rootcontext.cs (RootContext.V2): Removed.
9459
9460 2004-03-23  Martin Baulig  <martin@ximian.com>
9461
9462         * expression.cs (Invocation.OverloadResolve): Added `bool
9463         may_fail' argument and use it instead of the Location.IsNull() hack.
9464
9465 2004-09-09  Martin Baulig  <martin@ximian.com>
9466
9467         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
9468
9469 2004-09-09  Martin Baulig  <martin@ximian.com>
9470
9471         * generic.cs (TypeParameter.DefineType): Added support for
9472         explicit interface methods.
9473
9474 2004-09-09  Martin Baulig  <martin@ximian.com>
9475
9476         * README.Changes: New document.  Started to list important changes
9477         between MCS and GMCS here.
9478
9479 2004-09-08  Martin Baulig  <martin@ximian.com>
9480
9481         * class.cs
9482         (TypeContainer.CheckRecursiveDefinition): New protected method.
9483         (TypeContainer.DefineType): Move the CS0146 check into
9484         CheckRecursiveDefinition().     
9485
9486 2004-09-06  Martin Baulig  <martin@ximian.com>
9487
9488         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9489         types for the constructor constraint.
9490
9491 2004-09-03  Martin Baulig  <martin@ximian.com>
9492
9493         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9494         into TypeContainer, to make partial classes work again.
9495
9496 2004-09-03  Martin Baulig  <martin@ximian.com>
9497
9498         * rootcontext.cs (RootContext.V2): Removed.
9499
9500 2004-03-23  Martin Baulig  <martin@ximian.com>
9501
9502         * expression.cs (Invocation.OverloadResolve): Added `bool
9503         may_fail' argument and use it instead of the Location.IsNull() hack.
9504
9505 2004-09-03  Martin Baulig  <martin@ximian.com>
9506
9507         Merged latest changes into gmcs.  Please keep this comment in
9508         here, it makes it easier for me to see what changed in MCS since
9509         the last time I merged.
9510
9511 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9512
9513         Fix #61128.
9514         * expression.cs (BetterConversion): Don't allow either conversion 
9515         to be null.  Remove redundant implicit conversion test when 'q ==
9516         null' -- when this function is invoked, we already know that the
9517         implicit conversion exists.
9518         (BetterFunction): Assume that 'best' is non-null.  Remove
9519         redundant reimplementation of IsApplicable when 'best' is null.
9520         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9521         number of arguments.
9522         (IsAncestralType): Extract from OverloadResolve.
9523         (OverloadResolve): Make robust to the MethodGroupExpr being
9524         unsorted.  Implement all the logic of Section 14.5.5.1, and
9525         support overloading of methods from multiple applicable types.
9526         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9527
9528         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9529         (RealError, Warning): Append type of report to related symbol.
9530
9531 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9532
9533         * enum.cs: Fixed CLS-Compliance checks for enum members.
9534         Error tests cs3008-8.cs, cs3014-8.cs
9535
9536 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9537
9538         Fixed bug #62342, #63102
9539         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9540         like ImplementMethod.
9541
9542 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9543
9544         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9545         Fixed bug #65170.
9546
9547 2004-09-02  Martin Baulig  <martin@ximian.com>
9548
9549         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9550         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9551         on the MethodBase.
9552
9553 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9554
9555         C# 2.0 Static classes implemented
9556
9557         * class.cs (TypeContainer): instance_constructors,
9558         initialized_fields, initialized_static_fields,
9559         default_constructor, base_inteface_types are protected to be
9560         accessible from StaticClass.
9561         (TypeContainer.DefineDefaultConstructor): New virtual method
9562         for custom default constructor generating
9563         (StaticClass): New class to handle "Static classes" feature.
9564
9565         * cs-parser.jay: Handle static keyword on class like instance
9566         of StaticClass.
9567
9568         * driver.cs: Added "/langversion" command line switch with two
9569         options (iso-1, default).
9570
9571 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9572
9573         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9574
9575 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9576
9577         * delegate.cs: Style.
9578
9579 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9580
9581         * delegate.cs: Add seperate instance expr field for miguel.
9582
9583 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9584
9585         * PointerArithmetic (Resolve): make sure we are not doing
9586         pointer arith on void*. Also, make sure we are resolved
9587         by not setting eclass until resolve.
9588
9589         All callers: Make sure that PointerArithmetic gets resolved.
9590
9591 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9592
9593         * ArrayCreation (LookupType): If the type does not resolve 
9594         to an array, give an error.
9595
9596 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9597
9598         * statement.cs (Try.Resolve): Fixed bug #64222
9599
9600 2004-08-27  Martin Baulig  <martin@ximian.com>
9601
9602         * class.cs
9603         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9604         crash here.     
9605
9606 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9607
9608         * ecore.cs (Constantify): Get underlying type via
9609         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9610         Windows in special cases.
9611
9612 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9613
9614         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9615         for obtaining also private methods.
9616         (GetRemoveMethod): Used GetRemoveMethod (true)
9617         for obtaining also private methods.
9618
9619 2004-09-02  Martin Baulig  <martin@ximian.com>
9620
9621         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9622         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9623         on the MethodBase.
9624
9625 2004-08-27  Martin Baulig  <martin@ximian.com>
9626
9627         * class.cs
9628         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9629         crash here.     
9630
9631 2004-08-25  Martin Baulig  <martin@ximian.com>
9632
9633         * support.cs (ReflectionParameters..ctor): If this is a generic
9634         method, retrieve and store its type parameters.
9635         (InternalParameters..ctor): Added `TypeParameter[]' argument.
9636         (ReflectionParameters.GenericConstraints): The argument specifies
9637         the type parameter, not the method parameter.
9638         (InternalParameters.GenericConstraints): Likewise.
9639
9640         * generic.cs (TypeParameter.DefineType): Correctly handle
9641         constraints wrt. generic methods in interfaces and their
9642         implementations.        
9643
9644 2004-08-24  Martin Baulig  <martin@ximian.com>
9645
9646         * generic.cs (TypeParameter.IsSubclassOf): New public method.
9647         (Constraints.IsSubclassOf): New internal method.
9648
9649         * typemanager.cs (TypeManager.FindMembers): Added special support
9650         for GenericTypeParameterBuilder's.      
9651         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
9652         type parameters.
9653
9654 2004-08-24  Martin Baulig  <martin@ximian.com>
9655
9656         * typemanager.cs
9657         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
9658         this for accessibility checks.
9659         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
9660         IsNestedFamilyAccessible.
9661         (TypeManager.IsSubclassOf): New method, do what the name actually
9662         says.   
9663
9664 2004-08-24  Martin Baulig  <martin@ximian.com>
9665
9666         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
9667         as a SimpleName, include the generic arity.
9668
9669 2004-08-24  Martin Baulig  <martin@ximian.com>
9670
9671         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
9672         MethodAttributes.HideBySig for operators.
9673
9674 2004-08-23  Martin Baulig  <martin@ximian.com>
9675
9676         Back to the old error reporting system :-)
9677
9678         * report.cs (Message): Removed.
9679         (Report.MessageData, ErrorData, WarningData): Removed.
9680         (Report.Error, Warning): Back to the old system.
9681
9682 2004-08-23  Martin Baulig  <martin@ximian.com>
9683
9684         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
9685
9686         * class.cs (TypeContainer.ParentContainer): New public virtual
9687         method; replaces the explicit interface implementation.
9688         (ClassPart.ParentContainer): Override.
9689
9690 2004-08-23  Martin Baulig  <martin@ximian.com>
9691
9692         * statement.cs (Switch): Added support for constant switches; see
9693         #59428 or test-285.cs.
9694
9695 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9696
9697         Fixed bug #62740.
9698         * statement.cs (GetEnumeratorFilter): Removed useless
9699         logic because C# specs is strict. GetEnumerator must be
9700         public.
9701
9702 2004-08-22  Martin Baulig  <martin@ximian.com>
9703
9704         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9705         a switch and may break, reset the barrier.  Fixes #59867.
9706
9707 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9708
9709         CLS-Compliance speed up (~5% for corlib)
9710
9711         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
9712         New method. Tests container for CLS-Compliant names
9713
9714         * class.cs (TypeContainer.VerifyClsName): New method.
9715         Checks whether container name is CLS Compliant.
9716         (Constructor): Implements IMethodData.
9717
9718         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
9719         low-case table for CLS Compliance test.
9720         (MemberCache.VerifyClsParameterConflict): New method.
9721         Checks method parameters for CS3006 error.
9722
9723         * enum.cs (EnumMember): Is derived from MemberCore.
9724         (Enum.VerifyClsName): Optimized for better performance.
9725
9726 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9727
9728         * report.cs: Renamed Error_T to Error and changed all
9729         references.
9730
9731 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9732
9733         * class.cs (TypeContainer.IndexerArrayList): New inner class
9734         container for indexers.
9735         (TypeContainer.DefaultIndexerName): New constant for default
9736         indexer name. Replaced all "Item" with this constant.
9737         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
9738
9739         * typemanager.cs (TypeManager.default_member_ctor): Cache here
9740         DefaultMemberAttribute constructor.
9741
9742 2004-08-05  Martin Baulig  <martin@ximian.com>
9743
9744         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
9745         Fix bug #59429.
9746
9747 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
9748
9749         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
9750         multi platforms problem.
9751
9752         * compiler.csproj: Included shared files.
9753
9754 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9755
9756         Fix bug 60333, 55971 in the more general way
9757         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9758         Added arg_type argument for constant conversion.
9759         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
9760
9761 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9762
9763         Fix bug #59760
9764         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
9765         OperatorArrayList, MethodCoreArrayList for typecontainer
9766         containers. Changed class member types to these new types.
9767         (MethodArrayList.DefineMembers): Added test for CS0659.
9768
9769 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
9770
9771         * cfold.cs: Synchronize the folding with the code in expression.cs
9772         Binary.DoNumericPromotions for uint operands.
9773
9774         * attribute.cs: Revert patch from Raja, it introduced a regression
9775         while building Blam-1.2.1 (hard to isolate a test case).
9776
9777 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9778
9779         Fix for #55382
9780         * class.cs:
9781         (TypeContainer.Define): Renamed to DefineContainerMembers because of
9782         name collision.
9783         (MethodCore.parent_method): New member. The method we're overriding
9784         if this is an override method.
9785         (MethodCore.CheckBase): Moved from Method class and made common.
9786         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
9787         private.
9788         (MethodCore.CheckForDuplications): New abstract method. For custom
9789         member duplication search in a container
9790         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
9791         method and its return type.
9792         (Event.conflict_symbol): New member. Symbol with same name in the
9793         parent class.
9794
9795         * decl.cs:
9796         (MemberCache.FindMemberWithSameName): New method. The method
9797         is looking for conflict with inherited symbols.
9798
9799 2004-08-04  Martin Baulig  <martin@ximian.com>
9800
9801         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9802
9803         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9804
9805 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9806
9807         * report.cs (Message): New enum for better error, warning reference in
9808         the code.
9809         (MessageData): New inner abstract class. It generally handles printing of
9810         error and warning messages.
9811         Removed unused Error, Warning, Message methods.
9812
9813 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9814
9815         Fix for cs0592-8.cs test
9816         * attribute.cs
9817         (Attributable.ValidAttributeTargets): Made public.
9818         (Attribute.ExplicitTarget): New member for explicit target value.
9819         (Attribute.CheckTargets): Now we translate explicit attribute
9820         target to Target here.
9821
9822 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
9823
9824         * ecore.cs (MethodGroupExpr): new IsBase property.
9825
9826         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
9827
9828         * delegate.cs (DelegateCreation): store a MethodGroupExpr
9829         rather than an instance expr.
9830
9831         (DelegateCreation.Emit): Use the method group rather than
9832         the instance expression. Also, if you have base.Foo as the
9833         method for a delegate, make sure to emit ldftn, not ldftnvirt.
9834
9835         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
9836
9837         (NewDelegate.DoResolve): Only check for the existance of Invoke
9838         if the method is going to be needed. Use MethodGroupExpr.
9839
9840         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
9841
9842         * expression.cs: For pointer arith., make sure to use
9843         the size of the type, not the size of the pointer to
9844         the type.
9845
9846 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9847
9848         Fix for #60722
9849         * class.cs (Class): Added error CS0502 test.
9850
9851 2004-08-03  John Luke  <jluke@cfl.rr.com>
9852             Raja R Harinath  <rharinath@novell.com>
9853
9854         Fix for #60997.
9855         * attribute.cs (Attribute.complained_before): New flag.
9856         (Attribute.ResolveType, Attribute.Resolve),
9857         (Attribute.DefinePInvokeMethod): Set it.
9858         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
9859         
9860 2004-08-03  Martin Baulig  <martin@ximian.com>
9861
9862         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9863         use a user-defined operator; we still need to do numeric
9864         promotions in case one argument is a builtin type and the other
9865         one has an implicit conversion to that type.  Fixes #62322.
9866
9867 2004-08-18  Martin Baulig  <martin@ximian.com>
9868
9869         * class.cs (Method.Define): Use the correct method name when
9870         creating the MethodBuilder for a generic method.
9871
9872 2004-08-17  Martin Baulig  <martin@ximian.com>
9873
9874         * generic.cs (Constraints): Support type parameter constraints.
9875
9876 2004-08-16  Martin Baulig  <martin@ximian.com>
9877
9878         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
9879         (Token.GENERIC_DIMENSION): New token; this is returned if we
9880         encounter an unbound generic type in a typeof() expression.
9881
9882         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
9883         this token is only generated while parsing a typeof() expression.
9884         (typeof_expression): Removed the old unbound_type hack.
9885
9886         * generic.cs (TypeArguments.IsUnbound): New public property.
9887
9888         * decl.cs (MemberName): Added support for unbound types.
9889
9890 2004-08-14  Martin Baulig  <martin@ximian.com>
9891
9892         * typemanager.cs
9893         (TypeManager.IsEqualGenericInstance): New static method.
9894         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
9895         just used to check accessibility, so follow the rules of 26.1.6.        
9896
9897         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
9898         ConstructedType instead of a TypeExpression if we have type arguments.
9899
9900         * cs-parser.jay (typeof_expression): Support unbound generic types.
9901
9902         * ecore.cs (UnboundTypeExpression): New public class.
9903
9904 2004-08-12  Martin Baulig  <martin@ximian.com>
9905
9906         * typemanager.cs (TypeManager.IsNestedChildOf): Use
9907         TypeManager.IsEqual() rather than `=='.
9908
9909         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
9910         generic instances as well.
9911
9912 2004-08-12  Martin Baulig  <martin@ximian.com>
9913
9914         * expression.cs (Invocation.InferType): We can only infer method
9915         type parameters.  Fixes #62647.
9916
9917 2004-08-11  Martin Baulig  <martin@ximian.com>
9918
9919         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
9920         before resolving the base classes.
9921
9922 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
9923
9924         * Makefile: install .mdb file too.
9925
9926 2004-08-05  Martin Baulig  <martin@ximian.com>
9927
9928         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
9929         initializer, the current type is just the TypeBuilder, not the
9930         instantiated generic type.
9931         (FieldExpr.IsFieldInitializer): New public property.
9932
9933 2004-08-04  Martin Baulig  <martin@ximian.com>
9934
9935         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9936
9937         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9938
9939 2004-08-03  Martin Baulig  <martin@ximian.com>
9940
9941         * class.cs (MethodData.Define): If we're an explicit
9942         implementation, remove the generic arity from the type name.
9943
9944 2004-08-03  Martin Baulig  <martin@ximian.com>
9945
9946         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9947         use a user-defined operator; we still need to do numeric
9948         promotions in case one argument is a builtin type and the other
9949         one has an implicit conversion to that type.  Fixes #62322.
9950
9951 2004-08-02  Martin Baulig  <martin@ximian.com>
9952
9953         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
9954         `TypeExpr[]' array.
9955         (TypeContainer.GetClassBases): Return the unexpanded list of
9956         interfaces; we expand them later.
9957         (TypeContainer.DefineType): After creating the TypeBuilder, call
9958         TypeManager.ExpandInterfaces() to get an expanded and resolved
9959         list of interfaces.
9960
9961         * ecore.cs (TypeExpr.GetInterfaces): Removed
9962
9963         * generics.cs (Constraints.InterfaceConstraints): Remove.
9964         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
9965         register the interface constraints.
9966
9967         * typemanager.cs
9968         (TypeManager.AddUserType): Removed the `ifaces' argument.
9969         (TypeManager.AddTypeParameter): Likewise.
9970         (TypeManager.AddUserInterface): Removed, was unused.
9971         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
9972         `TypeExpr[]' array for the interfaces.
9973         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
9974         has been defined, returns a list of the resolved interfaces types.
9975         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
9976         (TypeManager.GetExplicitInterfaces): Likewise.  
9977
9978 2004-08-02  Martin Baulig  <martin@ximian.com>
9979
9980         * expression.cs (Invocation.EmitCall): If we're invoking a method
9981         on a type parameter, use the new `Constrained' prefix opcode.
9982
9983 2004-08-02  Martin Baulig  <martin@ximian.com>
9984
9985         * statement.cs (LocalInfo.Flags): Added `IsThis'.
9986         (LocalInfo.IsThis): New public property.
9987         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
9988
9989 2004-08-01  Martin Baulig  <martin@ximian.com>
9990
9991         * class.cs (TypeContainer.GetClassBases): Don't set the default
9992         here since we may get called from GetPartialBases().
9993         (TypeContainer.DefineType): If GetClassBases() didn't return a
9994         parent, use the default one.
9995
9996 2004-07-30  Martin Baulig  <martin@ximian.com>
9997
9998         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
9999
10000         * class.cs (SourceMethod): New public class, derive from the
10001         symbol writer's ISourceMethod.
10002         (Method): Use the new symbol writer API.
10003
10004         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
10005         as argument and use the new symbol writer.
10006
10007         * location.cs
10008         (SourceFile): Implement the symbol writer's ISourceFile.
10009         (Location.SymbolDocument): Removed.
10010         (Location.SourceFile): New public property.
10011
10012         * symbolwriter.cs: Use the new symbol writer API.
10013
10014 2004-07-30  Raja R Harinath  <rharinath@novell.com>
10015
10016         * Makefile (install-local): Remove.  Functionality moved to
10017         executable.make.
10018
10019 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
10020
10021         * Makefile: Install mcs.exe.config file together with mcs.exe.
10022         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
10023         correct runtime version.
10024         
10025 2004-07-25  Martin Baulig  <martin@ximian.com>
10026
10027         * class.cs
10028         (TypeContainer.RegisterOrder): Removed, this was unused.
10029         (TypeContainer, interface_order): Removed.
10030         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
10031         TypeContainer as argument since we can also be called with a
10032         `PartialContainer' for a partial class/struct/interface.
10033         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
10034         of checking whether we're an `Interface' - we could be a
10035         `PartialContainer'.
10036         (PartialContainer.Register): Override; call
10037         AddClass()/AddStruct()/AddInterface() on our parent.
10038
10039         * cs-parser.jay (interface_member_declaration): Add things to the
10040         `current_container', not the `current_class'.
10041
10042         * rootcontext.cs (RegisterOrder): The overloaded version which
10043         takes an `Interface' was unused, removed.
10044
10045         * typemanager.cs (TypeManager.LookupInterface): Return a
10046         `TypeContainer', not an `Interface'.
10047         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
10048         contain a `PartialContainer' for an interface, so check it's
10049         `Kind' to figure out what it is.
10050
10051 2004-07-25  Martin Baulig  <martin@ximian.com>
10052
10053         * class.cs (Class.DefaultTypeAttributes): New public constant.
10054         (Struct.DefaultTypeAttributes): Likewise.
10055         (Interface.DefaultTypeAttributes): Likewise.
10056         (PartialContainer.TypeAttr): Override this and add the
10057         DefaultTypeAttributes.
10058
10059 2004-07-25  Martin Baulig  <martin@ximian.com>
10060
10061         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
10062         we can just use the `Parent' field instead.
10063
10064 2004-07-25  Martin Baulig  <martin@ximian.com>
10065
10066         * class.cs (TypeContainer.Emit): Renamed to EmitType().
10067
10068 2004-07-25  Martin Baulig  <martin@ximian.com>
10069
10070         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
10071         our parts before defining any methods.
10072         (TypeContainer.VerifyImplements): Make this virtual.
10073         (ClassPart.VerifyImplements): Override and call VerifyImplements()
10074         on our PartialContainer.
10075
10076 2004-07-25  Martin Baulig  <martin@ximian.com>
10077
10078         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
10079
10080         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
10081         argument, we can just use the `Parent' field instead.
10082
10083         * class.cs
10084         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
10085         (MemberBase.DoDefine): Likewise.
10086
10087 2004-07-24  Martin Baulig  <martin@ximian.com>
10088
10089         * decl.cs (MemberCore.Parent): New public field.
10090         (DeclSpace.Parent): Moved to MemberCore.
10091
10092         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
10093         (MemberBase.ctor): Added TypeContainer argument, pass it to our
10094         parent's .ctor.
10095         (FieldBase, Field, Operator): Likewise.
10096         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
10097         (EventField, Event): Likewise.
10098
10099 2004-07-23  Martin Baulig  <martin@ximian.com>
10100
10101         * class.cs (PartialContainer): New public class.
10102         (ClassPart): New public class.
10103         (TypeContainer): Added support for partial classes.
10104         (TypeContainer.GetClassBases): Splitted some of the functionality
10105         out into GetNormalBases() and GetPartialBases().
10106
10107         * cs-tokenizer.cs (Token.PARTIAL): New token.
10108         (Tokenizer.consume_identifier): Added some hacks to recognize
10109         `partial', but only if it's immediately followed by `class',
10110         `struct' or `interface'.
10111
10112         * cs-parser.jay: Added support for partial clases.
10113
10114 2004-07-23  Martin Baulig  <martin@ximian.com>
10115
10116         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
10117         a `DeclSpace' and also made it readonly.
10118         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
10119         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
10120         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
10121
10122         * cs-parser.jay: Pass the `current_class', not the
10123         `current_container' (at the moment, this is still the same thing)
10124         to a new Method, Property, Event, Indexer or Constructor.
10125
10126 2004-07-23  Martin Baulig  <martin@ximian.com>
10127
10128         * cs-parser.jay (CSharpParser): Added a new `current_class' field
10129         and removed the `current_interface' one.
10130         (struct_declaration, class_declaration, interface_declaration):
10131         Set `current_class' to the newly created class/struct/interface;
10132         set their `Bases' and call Register() before parsing their body.
10133
10134 2004-07-23  Martin Baulig  <martin@ximian.com>
10135
10136         * class.cs (Kind): New public enum.
10137         (TypeContainer): Made this class abstract.
10138         (TypeContainer.Kind): New public readonly field.
10139         (TypeContainer.CheckDef): New public method; moved here from
10140         cs-parser.jay.
10141         (TypeContainer.Register): New public abstract method.
10142         (TypeContainer.GetPendingImplementations): New public abstract
10143         method.
10144         (TypeContainer.GetClassBases): Removed the `is_class' and
10145         `is_iface' parameters.
10146         (TypeContainer.DefineNestedTypes): Formerly known as
10147         DoDefineType().
10148         (ClassOrStruct): Made this class abstract.
10149
10150         * tree.cs (RootTypes): New public type. 
10151
10152 2004-07-20  Martin Baulig  <martin@ximian.com>
10153
10154         * tree.cs (Tree.RecordNamespace): Removed.
10155         (Tree.Namespaces): Removed.
10156
10157         * rootcontext.cs (RootContext.IsNamespace): Removed.
10158
10159         * cs-parser.jay (namespace_declaration): Just create a new
10160         NamespaceEntry here.
10161
10162 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
10163
10164         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
10165         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
10166         entry to make sure it runs in the correct runtime version.
10167         
10168 2004-07-18  Martin Baulig  <martin@ximian.com>
10169
10170         * generic.cs (ConstructedType.CheckConstraints): Improved
10171         constraints checking.
10172
10173 2004-07-18  Martin Baulig  <martin@ximian.com>
10174
10175         * expression.cs (Invocation.BetterMethod): Call
10176         TypeManager.TypeToCoreType() on all types and removed my previous
10177         hack; we're already doig the right thing here.
10178
10179 2004-07-17  Martin Baulig  <martin@ximian.com>
10180
10181         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
10182
10183 2004-07-16  Martin Baulig  <martin@ximian.com>
10184
10185         * iterators.cs: Added generics support.
10186
10187 2004-07-16  Martin Baulig  <martin@ximian.com>
10188
10189         * iterators.cs: Rewrote this.  We're now using one single Proxy
10190         class for both the IEnumerable and the IEnumerator interface and
10191         `Iterator' derives from Class so we can use the high-level API.
10192
10193         * class.cs (TypeContainer.AddIterator): New method.
10194         (TypeContainer.DoDefineType): New protected virtual method, which
10195         is called from DefineType().
10196         (TypeContainer.DoDefineMembers): Call DefineType() and
10197         DefineMembers() on all our iterators.
10198         (TypeContainer.Emit): Call Emit() on all our iterators.
10199         (TypeContainer.CloseType): Call CloseType() on all our iterators.
10200
10201         * codegen.cs (EmitContext.CurrentIterator): New public field.
10202
10203 2004-07-15  Martin Baulig  <martin@ximian.com>
10204
10205         * typemanager.cs
10206         (TypeManager.not_supported_exception_type): New type.   
10207
10208 2004-07-14  Martin Baulig  <martin@ximian.com>
10209
10210         * typemanager.cs
10211         (TypeManager.generic_ienumerable_type): New type.
10212         (TypeManager.generic_ienumerator_type): New type.
10213
10214         * rootcontext.cs
10215         (RootContext.interfaces_first_stage): Added
10216         "System.Collections.Generic.IEnumerator`1" and
10217         "System.Collections.Generic.IEnumerable`1".     
10218
10219 2004-07-14  Martin Baulig  <martin@ximian.com>
10220
10221         * iterators.cs: Use real error numbers.
10222
10223 2004-07-14  Martin Baulig  <martin@ximian.com>
10224
10225         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
10226         requires this to be a System.Collection.IEnumerable and not a
10227         class implementing that interface.
10228         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
10229
10230 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
10231
10232         * class.cs: Fixed previous fix, it broke some error tests.
10233
10234 2004-07-12  Martin Baulig  <martin@ximian.com>
10235
10236         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
10237         Fixes #61293.
10238
10239 2004-07-14  Martin Baulig  <martin@ximian.com>
10240
10241         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
10242         an exclamation mark (!) for the generic arity to reflect the
10243         latest spec changes; ie. use "System.Collections.Generic.IList`1".
10244
10245 2004-07-13  Martin Baulig  <martin@ximian.com>
10246
10247         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
10248         specifiers being part of a type argument.
10249
10250 2004-07-13  Martin Baulig  <martin@ximian.com>
10251
10252         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
10253         name for generic types.
10254
10255 2004-07-13  Martin Baulig  <martin@ximian.com>
10256
10257         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
10258         bit to fix #60119.
10259
10260 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
10261
10262         * assign.cs (LocalTemporary): Add new argument: is_address,If
10263         `is_address' is true, then the value that we store is the address
10264         to the real value, and not the value itself.
10265         
10266         * ecore.cs (PropertyExpr): use the new local temporary
10267         stuff to allow us to handle X.Y += z (where X is a struct)
10268
10269 2004-07-08  Martin Baulig  <martin@ximian.com>
10270
10271         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
10272         not always return, just like we're doing in Using.Resolve().
10273
10274 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
10275
10276         * cs-parser.jay (fixed_statement): flag this as Pinned.
10277
10278 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
10279
10280         * typemanager.cs (TypeManager): Removed MakePinned method, this
10281         mechanism is replaced with the .NET 2.x compatible mechanism of
10282         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
10283
10284         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
10285         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
10286         `IsFixed' property which has a different meaning.
10287
10288 2004-07-02  Raja R Harinath  <rharinath@novell.com>
10289
10290         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
10291         visible from inside a nested class, not just the names of the
10292         immediately enclosing class.
10293         Fix for bug #60730.
10294
10295 2004-06-24  Raja R Harinath  <rharinath@novell.com>
10296
10297         * expression.cs (BetterConversion): Remove buggy special-case
10298         handling of "implicit constant expression conversions".  At this
10299         point, we already know that the conversion is possible -- we're
10300         only checking to see which is better.
10301
10302 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10303
10304         * cs-parser.jay: Added error CS0210 test.
10305
10306 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10307
10308         * cs-parser.jay: Added error CS0134 test.
10309
10310 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10311
10312         Fix bug #52507
10313         * cs-parser.jay: Added error CS0145 test.
10314
10315 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10316
10317         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
10318
10319 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
10320         
10321         * expression.cs (StackAlloc.Resolve): The argument may not
10322         be a constant; deal with this case.
10323         
10324 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
10325
10326         * attribute.cs (IndexerName_GetIndexerName): Renamed to
10327         GetIndexerAttributeValue.
10328         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
10329
10330         * class.cs (Indexer.Define): Added error tests for CS0415,
10331         CS0609.
10332
10333 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
10334
10335         * attribute.cs (Attribute.Resolve): Keep field code in sync with
10336         property code.
10337
10338 2004-06-23  Martin Baulig  <martin@ximian.com>
10339
10340         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
10341         neither return nor throw, reset the barrier as well.  Fixes #60457.
10342
10343 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
10344
10345         * class.cs : EventAttributes is now set to None by default.
10346           This fixes bug #60459.
10347
10348 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10349
10350         Fix bug #60219
10351         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10352         Don't throw exception but return null (it's sufficient now).
10353
10354 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10355
10356         * typemanager.cs (GetArgumentTypes): Faster implementation.
10357
10358 2004-06-18  Martin Baulig  <martin@ximian.com>
10359
10360         * attribute.cs (Attribute.Resolve): Check whether we're an
10361         EmptyCast which a Constant child.  Fixes #60333.
10362
10363 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
10364
10365         * statement.cs (EmitCollectionForeach): Account for the fact that
10366         not all valuetypes are in areas which we can take the address of.
10367         For these variables, we store to a temporary variable. Also, make
10368         sure that we dont emit a `callvirt' on a valuetype method.
10369
10370 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10371
10372         * expression.cs (StackAlloc.DoReSolve): Added test for
10373         negative parameter (CS0247).
10374
10375 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10376
10377         Fix bug #59792
10378         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
10379
10380 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10381
10382         Fix bug #59781
10383         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
10384         ulong.
10385
10386 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10387
10388         Fix bug #58254 & cs1555.cs, cs1556.cs
10389         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
10390
10391 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10392
10393         * cs-parser.jay: Added error CS1669 test for indexers.
10394
10395 2004-06-18  Martin Baulig  <martin@ximian.com>
10396
10397         * generics.cs (GenericMethod.ctor): Don't take an Attributes
10398         argument.  Fixes #60441.
10399
10400 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
10401         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
10402         The name needs to have the actual name of the method in order
10403         for other tests (such as the one in OverloadResolve for Invoke
10404         on a delegate) to work. As well, it does not really help
10405         error reporting because the method group had multiple methods.
10406         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
10407         Make profiling work.
10408         
10409 2004-06-13  Martin Baulig  <martin@ximian.com>
10410
10411         * cs-parser.jay: Don't allow generic attributes.
10412
10413 2004-06-13  Martin Baulig  <martin@ximian.com>
10414
10415         * class.cs (MemberBase.DoDefineBase): New protected method.
10416         (MemberBase.DoDefine): Compute the `flags' in the new
10417         DoDefineBase() which must be called first.
10418         (Method.Define): Call DoDefineBase() first so we have the flags
10419         when defining the generic method.
10420
10421         * cs-parser.jay (interface_method_declaration): Support generic methods.
10422
10423 2004-06-13  Martin Baulig  <martin@ximian.com>
10424
10425         * decl.cs (TypeName): Removed.
10426         (MemberName): Removed TypeName and MemberNow; now we just have
10427         MemberName.
10428
10429         * cs-parser.jay: Don't distinguish between type arguments and type
10430         parameters in the grammar and simplified the rules a bit.  The
10431         reduce/reduce conflicts are now gone (except the one we inherited
10432         from mcs).
10433
10434 2004-06-11  Martin Baulig  <martin@ximian.com>
10435
10436         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
10437         call this twice: for params and varargs methods.
10438
10439 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10440
10441         * class.cs:
10442         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
10443
10444 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10445
10446         * attribute.cs (Attribute.GetValidTargets): Made public.
10447
10448         * class.cs: 
10449         (AbstractPropertyEventMethod): New class for better code sharing.
10450         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
10451         CS1667 report.
10452         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
10453
10454 2004-06-09  Martin Baulig  <martin@ximian.com>
10455
10456         * cs-parser.jay: Removed a reduce/reduce conflict.
10457
10458 2004-06-03  Martin Baulig  <martin@ximian.com>
10459
10460         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
10461         GetSimpleName() and return a SimpleName.
10462
10463         * ecore.cs (SimpleName.Arguments): New public field.
10464         (SimpleName): Added overloaded ctor which takes an additional
10465         TypeArguments argument.
10466         (SimpleName.SimpleNameResolve): Added support for generic methods.
10467         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
10468         formerly in MemberAccess.DoResolve(), but we also need it in
10469         SimpleNameResolve().
10470
10471         * expression.cs (MemberAccess.DoResolve): Use the new
10472         MethodGroupExpr.ResolveGeneric().       
10473
10474 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10475
10476         * decl.cs: If possible, use lookuptypedirect here. We can only do
10477         this if there is no `.' after the namespace. Avoids using
10478         LookupType, which does lots of slow processing.
10479         (FindNestedType) New method, does what it says :-).
10480         * namespace.cs: use LookupTypeDirect.
10481         * rootcontext.cs: use membercache, if possible.
10482         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10483
10484 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10485
10486         * expression.cs:
10487         According to the spec, 
10488
10489         In a member access of the form E.I, if E is a single identifier,
10490         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10491         field, property, localvariable, or parameter with the same type as
10492         the meaning of E as a type-name (§3.8), then both possible
10493         meanings of E are permitted.
10494
10495         We did not check that E as a simple-name had the same type as E as
10496         a type name.
10497
10498         This trivial check gives us 5-7% on bootstrap time.
10499
10500 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10501
10502         * expression.cs (Invocation.OverloadResolve): Avoid the
10503         use of hashtables and boxing here by allocating on demand.
10504
10505 2004-05-30  Martin Baulig  <martin@ximian.com>
10506
10507         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10508         we're doing a silent lookup.  Don't try to lookup nested types in
10509         TypeManager.object_type (thanks to Ben Maurer).
10510
10511 2004-05-30  Martin Baulig  <martin@ximian.com>
10512
10513         Committing a patch from Ben Maurer.
10514
10515         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10516
10517 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10518
10519         * convert.cs: add a trivial cache for overload operator resolution.
10520
10521 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10522
10523         * attribute.cs
10524         (AttributeTester.GetObsoleteAttribute): Returns instance of
10525         ObsoleteAttribute when type is obsolete.
10526
10527         * class.cs
10528         (TypeContainer.VerifyObsoleteAttribute): Override.
10529         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10530         (MethodCode.VerifyObsoleteAttribute): Override.
10531         (MemberBase.VerifyObsoleteAttribute): Override.
10532
10533         * decl.cs
10534         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10535         and report proper error.
10536
10537         *delegate.cs
10538         (Delegate.VerifyObsoleteAttribute): Override.
10539
10540         * ecore.cs
10541         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10542         and report proper error.
10543         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10544
10545         * enum.cs
10546         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10547         and enum member.
10548
10549         * expression.cs
10550         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10551         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10552         Added test for ObsoleteAttribute.
10553
10554         * statement.cs
10555         (Catch): Derived from Statement.
10556
10557 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10558
10559         * decl.cs: If possible, use lookuptypedirect here. We can only do
10560         this if there is no `.' after the namespace. Avoids using
10561         LookupType, which does lots of slow processing.
10562         (FindNestedType) New method, does what it says :-).
10563         * namespace.cs: use LookupTypeDirect.
10564         * rootcontext.cs: use membercache, if possible.
10565         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10566
10567 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10568
10569         * expression.cs:
10570         According to the spec, 
10571
10572         In a member access of the form E.I, if E is a single identifier,
10573         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10574         field, property, localvariable, or parameter with the same type as
10575         the meaning of E as a type-name (§3.8), then both possible
10576         meanings of E are permitted.
10577
10578         We did not check that E as a simple-name had the same type as E as
10579         a type name.
10580
10581         This trivial check gives us 5-7% on bootstrap time.
10582
10583 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10584
10585         Fixed bug #59071 & cs0160.cs
10586         * statement.cs (Try.Resolve): Check here whether order of catch
10587         clauses matches their dependencies.
10588
10589 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10590
10591         Fixed bug #58624
10592         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10593         unsafe type.
10594
10595 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10596
10597         * expression.cs (Invocation.OverloadResolve): Avoid the
10598         use of hashtables and boxing here by allocating on demand.
10599
10600 2004-05-30  Martin Baulig  <martin@ximian.com>
10601
10602         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10603         we're doing a silent lookup.  Don't try to lookup nested types in
10604         TypeManager.object_type (thanks to Ben Maurer).
10605
10606 2004-05-30  Martin Baulig  <martin@ximian.com>
10607
10608         Committing a patch from Ben Maurer.
10609
10610         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10611
10612 2004-05-29  Martin Baulig  <martin@ximian.com>
10613
10614         * class.cs (IMethodData.ShouldIgnore): New method.
10615
10616         * typemanager.cs (TypeManager.MethodFlags): Don't take a
10617         `Location' argument, we don't need it anywhere.  Use
10618         `IMethodData.ShouldIgnore ()' instead of
10619         `MethodData.GetMethodFlags ()'.
10620         (TypeManager.AddMethod): Removed.
10621         (TypeManager.AddMethod2): Renamed to AddMethod.
10622
10623 2004-05-29  Martin Baulig  <martin@ximian.com>
10624
10625         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
10626
10627         * convert.cs (Convert.ImplicitReferenceConversion): If we're
10628         converting from a class type S to an interface type and we already
10629         have an object on the stack, don't box it again.  Fixes #52578.
10630
10631 2004-05-29  Martin Baulig  <martin@ximian.com>
10632
10633         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10634         Added support for `params' parameters.  Fixes #59267.
10635
10636 2004-05-29  Martin Baulig  <martin@ximian.com>
10637
10638         * literal.cs (NullPointer): Provide a private .ctor which sets
10639         `type' to TypeManager.object_type.  Fixes #59048.
10640
10641 2004-05-29  Martin Baulig  <martin@ximian.com>
10642
10643         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
10644         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
10645
10646         * ecore.cs (EventExpr.instance_expr): Make the field private.
10647
10648 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
10649
10650         Fixed bug #50080 & cs0214-2.cs
10651         * expression.cs (Cast.DoResolve): Check unsafe context here.
10652         
10653         * statement.cs (Resolve.DoResolve): Likewise.
10654
10655 2004-05-26  Martin Baulig  <martin@ximian.com>
10656
10657         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
10658
10659         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
10660         (RootContext.LookupType): Pass down the `silent' flag.
10661
10662 2004-05-25  Martin Baulig  <martin@ximian.com>
10663
10664         * expression.cs
10665         (MethodGroupExpr.IdenticalTypeName): New public property.
10666         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
10667         expression actually refers to a type.
10668
10669 2004-05-25  Martin Baulig  <martin@ximian.com>
10670
10671         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
10672         for #56176 and made it actually work.
10673
10674 2004-05-25  Martin Baulig  <martin@ximian.com>
10675
10676         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
10677         (FieldExpr, PropertyExpr): Override and implement
10678         CacheTemporaries.  Fixes #52279.
10679
10680 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
10681
10682         * location.cs: In the new compiler listing a file twice is a
10683         warning, not an error.
10684
10685 2004-05-24  Martin Baulig  <martin@ximian.com>
10686
10687         * enum.cs (Enum.DefineType): For the `BaseType' to be a
10688         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
10689
10690 2004-05-24  Martin Baulig  <martin@ximian.com>
10691
10692         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
10693         walking the `using' list.  Fixes #53921.
10694
10695 2004-05-24  Martin Baulig  <martin@ximian.com>
10696
10697         * const.cs (Const.LookupConstantValue): Added support for
10698         EmptyCast's; fixes #55251.
10699
10700 2004-05-24  Martin Baulig  <martin@ximian.com>
10701
10702         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
10703         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
10704         which does the CS0135 check.  The reason is that we first need to
10705         check whether the variable actually exists.
10706
10707 2004-05-24  Martin Baulig  <martin@ximian.com>
10708
10709         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
10710         than RootContext.LookupType() to find the explicit interface
10711         type.  Fixes #58584.
10712
10713 2004-05-24  Raja R Harinath  <rharinath@novell.com>
10714
10715         * Makefile: Simplify.  Use executable.make.
10716         * mcs.exe.sources: New file.  List of sources of mcs.exe.
10717
10718 2004-05-24  Anders Carlsson  <andersca@gnome.org>
10719
10720         * decl.cs:
10721         * enum.cs:
10722         Use the invariant culture when doing String.Compare for CLS case
10723         sensitivity.
10724         
10725 2004-05-23  Martin Baulig  <martin@ximian.com>
10726
10727         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
10728         don't have any dots.  Fixes #52622, added cs0246-8.cs.
10729
10730         * namespace.cs (NamespaceEntry.Lookup): Likewise.
10731
10732 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10733
10734         * class.cs (MemberBase.Define): Reuse MemberType member for 
10735         resolved type. Other methods can use it too.
10736
10737 2004-05-23  Martin Baulig  <martin@ximian.com>
10738
10739         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
10740         the variable also exists in the current block (otherwise, we need
10741         to report a CS0103).  Fixes #58670.
10742
10743 2004-05-23  Martin Baulig  <martin@ximian.com>
10744
10745         * flowanalysis.cs (Reachability.Reachable): Compute this
10746         on-the-fly rather than storing it as a field.
10747
10748 2004-05-23  Martin Baulig  <martin@ximian.com>
10749
10750         * flowanalysis.cs (Reachability.And): Manually compute the
10751         resulting `barrier' from the reachability.      
10752        
10753 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10754
10755         Fix bug #57835
10756         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
10757         instance of ObsoleteAttribute when symbol is obsolete.
10758
10759         * class.cs
10760         (IMethodData): Extended interface for ObsoleteAttribute support.
10761
10762 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10763
10764         * attribute.cs: Fix bug #55970
10765
10766 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10767
10768         Fix bug #52705
10769         * attribute.cs
10770         (GetObsoleteAttribute): New method. Creates the instance of
10771         ObsoleteAttribute.
10772         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
10773         ObsoleteAttribute when member is obsolete.
10774         (AttributeTester.Report_ObsoleteMessage): Common method for
10775         Obsolete error/warning reporting.
10776
10777         * class.cs
10778         (TypeContainer.base_classs_type): New member for storing parent type.
10779
10780         * decl.cs
10781         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
10782         for this MemberCore.
10783
10784 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10785
10786         * attribute.cs, const.cs: Fix bug #58590
10787
10788 2004-05-21  Martin Baulig  <martin@ximian.com>
10789
10790         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
10791         out parameters if the end of the method is unreachable.  Fixes
10792         #58098. 
10793
10794 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10795
10796         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
10797         Hari was right, why extra method.
10798
10799 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10800
10801         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
10802
10803 2004-05-20  Martin Baulig  <martin@ximian.com>
10804
10805         * delegate.cs: Convert this file to Unix mode - like the original
10806         version in mcs is.
10807
10808 2004-05-20  Martin Baulig  <martin@ximian.com>
10809
10810         * attribute.cs: Convert this file to Unix mode - like the original
10811         version in mcs is.
10812
10813 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
10814
10815        Fix bug #58688 (MCS does not report error when the same attribute
10816        is assigned twice)
10817
10818        * attribute.cs (Attribute.Emit): Distinction between null and default.
10819
10820 2004-05-19  Raja R Harinath  <rharinath@novell.com>
10821
10822        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
10823        of a top-level attribute without an attribute target.
10824        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
10825        Make non-static.
10826        (Attribute.Conditional_GetConditionName), 
10827        (Attribute.Obsolete_GetObsoleteMessage): Update.
10828        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
10829        part of ScanForIndexerName.
10830        (Attribute.CanIgnoreInvalidAttribute): New function.
10831        (Attribute.ScanForIndexerName): Move to ...
10832        (Attributes.ScanForIndexerName): ... here.
10833        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
10834        (Attributes.Search): New internal variant that can choose not to
10835        complain if types aren't resolved.  The original signature now
10836        complains.
10837        (Attributes.GetClsCompliantAttribute): Use internal variant, with
10838        complaints suppressed.
10839        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
10840        only if it not useful.
10841        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
10842        top-level for attributes that are shared between the assembly
10843        and a top-level class.
10844        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
10845        * class.cs: Update to reflect changes.
10846        (DefineIndexers): Fuse loops.
10847        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
10848        a couple more variants of attribute names.
10849
10850 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
10851
10852         Fix bug #52585 (Implemented explicit attribute declaration)
10853
10854         * attribute.cs:
10855         (Attributable.ValidAttributeTargets): New abstract method. It gets
10856         list of valid attribute targets for explicit target declaration.
10857         (Attribute.Target): It holds target itself.
10858         (AttributeSection): Removed.
10859         (Attribute.CheckTargets): New method. It checks whether attribute
10860         target is valid for the current element.
10861
10862         * class.cs:
10863         (EventProperty): New class. For events that are declared like
10864         property (with add and remove accessors).
10865         (EventField): New class. For events that are declared like field.
10866         class.cs
10867
10868         * cs-parser.jay: Implemented explicit attribute target declaration.
10869
10870         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
10871         Override ValidAttributeTargets.
10872
10873         * parameter.cs:
10874         (ReturnParameter): Class for applying custom attributes on 
10875         the return type.
10876         (ParameterAtribute): New class. Class for applying custom
10877         attributes on the parameter type.
10878
10879 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
10880
10881         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
10882         definitions. 
10883
10884         (Method): Allow UNSAFE here.
10885
10886         * modifiers.cs: Support unsafe reporting.
10887
10888 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
10889
10890         * decl.cs: Fix bug #58478.
10891
10892 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10893
10894         * statement.cs: When checking for unreachable code on an EmptyStatement,
10895         set the location. Fixes bug #58488.
10896
10897 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
10898
10899         * driver.cs: Add -pkg handling.
10900
10901         From Gonzalo: UseShelLExecute=false
10902
10903 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
10904
10905         * attribute.cs:
10906         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
10907         for attribute.
10908         (Attribute.IsClsCompliaceRequired): Moved to base for better
10909         accesibility.
10910         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
10911         when attribute is AttributeUsageAttribute.
10912         (Attribute.GetValidTargets): Simplified.
10913         (Attribute.GetAttributeUsage): New method returns AttributeUsage
10914         attribute for this type.
10915         (Attribute.ApplyAttributes): Method renamed to Emit and make
10916         non-static.
10917         (GlobalAttributeSection): New class for special handling of global
10918         attributes (assembly, module).
10919         (AttributeSection.Emit): New method.
10920
10921         * class.cs: Implemented Attributable abstract methods.
10922         (MethodCore.LabelParameters): Moved to Parameter class.
10923         (Accessor): Is back simple class.
10924         (PropertyMethod): Implemented Attributable abstract class.
10925         (DelegateMethod): Implemented Attributable abstract class.
10926         (Event): New constructor for disctintion between normal Event
10927         and Event with accessors.
10928
10929         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
10930
10931         * codegen.cs, const.cs, decl.cs, delegate.cs:
10932         (CommonAssemblyModulClass): Implemented Attributable abstract class
10933         and simplified.
10934
10935         * enum.cs: Implement IAttributeSupport interface.
10936         (EnumMember): New class for emum members. Implemented Attributable
10937         abstract class
10938
10939         * parameter.cs:
10940         (ParameterBase): Is abstract.
10941         (ReturnParameter): New class for easier [return:] attribute handling.
10942
10943         * typemanager.cs: Removed builder_to_attr.
10944
10945 2004-05-11  Raja R Harinath  <rharinath@novell.com>
10946
10947         Fix bug #57151.
10948         * attribute.cs (Attribute.GetPositionalValue): New function.
10949         * class.cs (TypeContainer.VerifyMembers): New function.
10950         (TypeContainer.Emit): Use it.
10951         (ClassOrStruct): New base class for Class and Struct.
10952         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
10953         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
10954         class.
10955         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
10956         then each non-static field should have a FieldOffset attribute.
10957         Otherwise, none of the fields should have a FieldOffset attribute.
10958         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
10959         and FieldOffset attributes.
10960         * typemanager.cs (TypeManager.struct_layout_attribute_type)
10961         (TypeManager.field_offset_attribute_type): New core types.
10962         (TypeManager.InitCoreTypes): Initialize them.
10963
10964 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
10965
10966         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
10967         Return correct type.
10968         From bug #58270.
10969
10970 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
10971
10972         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
10973         be implicitly converted to ulong.
10974         
10975         * expression.cs: The logic for allowing operator &, | and ^ worked
10976         was wrong, it worked before because we did not report an error in
10977         an else branch.  Fixes 57895.
10978
10979         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
10980         allow volatile fields to be reference types.
10981
10982 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
10983
10984         * driver.cs: Add support for /debug-
10985
10986 2004-05-07  Raja R Harinath  <rharinath@novell.com>
10987
10988         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
10989         Add a 'complain' parameter to silence errors.
10990         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
10991         silently overlooked type-resolutions.
10992         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
10993         to reflect changes.
10994         (Attributes.Search): New function.
10995         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
10996         (Attributes.GetAttributeFullName): Remove hack.
10997         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
10998         Update to reflect changes.
10999         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
11000         Use Attributes.Search instead of nested loops.
11001
11002 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
11003
11004         * decl.cs:
11005         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
11006         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
11007         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
11008
11009         * report.cs: (Report.Warning): Renamed to Warning_T because of
11010         parameter collision.
11011
11012 2004-05-05  Raja R Harinath  <rharinath@novell.com>
11013
11014         * expression.cs (MemberAccess.ResolveMemberAccess):
11015         Exit with non-zero status after Report.Error.
11016         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
11017         Likewise.
11018         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
11019
11020 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11021
11022         * support.cs: Don't hang when the file is empty.
11023
11024 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
11025
11026         * support.cs: In SeekableStreamReader, compute the preamble size of the
11027           underlying stream. Position changes should take into account that initial
11028           count of bytes.
11029
11030 2004-05-03  Todd Berman  <tberman@sevenl.net>
11031
11032         * driver.cs: remove unused GetSysVersion function.
11033
11034 2004-05-03  Todd Berman  <tberman@sevenl.net>
11035
11036         * driver.cs: Remove the hack from saturday, as well as the hack
11037         from jackson (LoadAssemblyFromGac), also adds the CWD to the
11038         link_paths to get that bit proper.
11039
11040 2004-05-01  Todd Berman  <tberman@sevenl.net>
11041
11042         * driver.cs: Try a LoadFrom before a Load, this checks the current
11043         path. This is currently a bug in mono that is be fixed, however, this
11044         provides a workaround for now. This will be removed when the bug
11045         is fixed.
11046
11047 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
11048
11049         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11050         incomplete key pairs (#57941).
11051
11052 2004-05-01  Todd Berman  <tberman@sevenl.net>
11053
11054         * driver.cs: Remove '.' from path_chars, now System.* loads properly
11055         from the GAC
11056
11057 2004-04-30  Jackson Harper  <jackson@ximian.com>
11058
11059         * codegen.cs: Open keys readonly.
11060         
11061 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11062
11063         * typemanager.cs: don't report cyclic struct layout when a struct
11064         contains 2 or more fields of the same type. Failed for Pango.AttrShape
11065         which has 2 Pango.Rectangle fields.
11066
11067 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11068
11069         * expression.cs: Handle IntPtr comparisons with IL code
11070         rather than a method call.
11071
11072 2004-04-29  Martin Baulig  <martin@ximian.com>
11073
11074         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
11075         the list of PropertyInfo's in class hierarchy and find the
11076         accessor.  Fixes #56013.
11077
11078 2004-04-29  Martin Baulig  <martin@ximian.com>
11079
11080         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
11081
11082 2004-04-29  Martin Baulig  <martin@ximian.com>
11083
11084         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11085
11086         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
11087
11088 2004-04-29  Martin Baulig  <martin@ximian.com>
11089
11090         * class.cs (ConstructorInitializer.Resolve): Check whether the
11091         parent .ctor is accessible.  Fixes #52146.
11092
11093 2004-04-29  Martin Baulig  <martin@ximian.com>
11094
11095         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11096
11097         * statement.cs (Using.EmitLocalVariableDecls): Use
11098         TypeManager.idisposable_type, not typeof (IDisposable).
11099         (Foreach.EmitCollectionForeach): Added support for valuetypes.
11100
11101 2004-04-29  Martin Baulig  <martin@ximian.com>
11102
11103         * class.cs (Event.Define): Don't emit the field and don't set
11104         RTSpecialName and SpecialName for events on interfaces.  Fixes
11105         #57703. 
11106
11107 2004-04-29  Raja R Harinath  <rharinath@novell.com>
11108
11109         Refactor Attribute.ApplyAttributes.
11110         * attribute.cs (Attributable): New base class for objects that can
11111         have Attributes applied on them.
11112         (Attribute): Make AttributeUsage fields public.
11113         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
11114         (Attribute.IsInternalCall): New property.
11115         (Attribute.UsageAttr): Convert to a public read-only property.
11116         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
11117         (Attribute.ResolveType, Attribute.Resolve)
11118         (Attribute.ScanForIndexerName): Update to reflect changes.
11119         (Attribute.CheckAttributeTarget): Re-format.
11120         (Attribute.ApplyAttributes): Refactor, to various
11121         Attributable.ApplyAttributeBuilder methods.
11122         * decl.cs (MemberCore): Make Attributable.
11123         * class.cs (Accessor): Make Attributable.
11124         (MethodData.ApplyAttributes): Use proper attribute types, not
11125         attribute names.
11126         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
11127         (TypeContainer.ApplyAttributeBuilder)
11128         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
11129         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
11130         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
11131         (Operator.ApplyAttributeBuilder): New factored-out methods.
11132         * const.cs (Const.ApplyAttributeBuilder): Likewise.
11133         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
11134         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
11135         * parameter.cs (ParameterBase): New Attributable base class
11136         that can also represent Return types.
11137         (Parameter): Update to the changes.
11138
11139 2004-04-29  Jackson Harper  <jackson@ximian.com>
11140
11141         * driver.cs: Prefer the corlib system version when looking for
11142         assemblies in the GAC. This is still a hack, but its a better hack
11143         now.
11144         
11145 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
11146
11147         * decl.cs, enum.cs: Improved error 3005 reporting.
11148   
11149         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
11150         (related_symbols): New private member for list of symbols
11151         related to reported error/warning.
11152         
11153         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
11154
11155 2004-04-29  Martin Baulig  <martin@ximian.com>
11156
11157         * ecore.cs (Expression.Constantify): If we're an enum and
11158         TypeManager.TypeToCoreType() doesn't give us another type, use
11159         t.UnderlyingSystemType.  Fixes #56178.  
11160
11161 2004-04-29  Martin Baulig  <martin@ximian.com>
11162
11163         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
11164         interfaces and for each interface, only add members directly
11165         declared in that interface.  Fixes #53255.
11166
11167 2004-04-28  Martin Baulig  <martin@ximian.com>
11168
11169         * expression.cs (ConditionalLogicalOperator): Use a temporary
11170         variable for `left' to avoid that we evaluate it more than once;
11171         bug #52588.
11172
11173 2004-04-28  Martin Baulig  <martin@ximian.com>
11174
11175         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
11176         `void[]' (CS1547).
11177
11178 2004-04-28  Martin Baulig  <martin@ximian.com>
11179
11180         * statement.cs (LocalInfo.Resolve): Check whether the type is not
11181         void (CS1547).
11182
11183         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
11184         whether the type is not void (CS1547).
11185
11186 2004-04-28  Martin Baulig  <martin@ximian.com>
11187
11188         * expression.cs (Unary.DoResolveLValue): Override this and report
11189         CS0131 for anything but Operator.Indirection.
11190
11191 2004-04-28  Martin Baulig  <martin@ximian.com>
11192
11193         Committing a patch from Ben Maurer; see bug #50820.
11194
11195         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11196         check for classes.
11197
11198         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11199         classes.        
11200
11201 2004-04-28  Martin Baulig  <martin@ximian.com>
11202
11203         Committing a patch from Ben Maurer; see bug #50820.
11204
11205         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11206         check for classes.
11207
11208         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11209         classes.        
11210
11211 2004-04-28  Martin Baulig  <martin@ximian.com>
11212
11213         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
11214         (Block.AddLabel): Call DoLookupLabel() to only search in the
11215         current block.
11216
11217 2004-04-28  Martin Baulig  <martin@ximian.com>
11218
11219         * cfold.cs (ConstantFold.BinaryFold): Added special support for
11220         comparing StringConstants and NullLiterals in Equality and Inequality.
11221
11222 2004-04-28  Jackson Harper  <jackson@ximian.com>
11223
11224         * driver.cs: Attempt to load referenced assemblies from the
11225         GAC. This is the quick and dirty version of this method that
11226         doesnt take into account versions and just takes the first
11227         canidate found. Will be good enough for now as we will not have more
11228         then one version installed into the GAC until I update this method.
11229
11230 2004-04-28  Martin Baulig  <martin@ximian.com>
11231
11232         * typemanager.cs (TypeManager.CheckStructCycles): New public
11233         static method to check for cycles in the struct layout.
11234
11235         * rootcontext.cs (RootContext.PopulateTypes): Call
11236         TypeManager.CheckStructCycles() for each TypeContainer.
11237         [Note: We only need to visit each type once.]
11238
11239 2004-04-28  Martin Baulig  <martin@ximian.com>
11240
11241         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
11242
11243         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
11244         success and added `out object value'.  Use a `bool resolved' field
11245         to check whether we've already been called rather than
11246         `ConstantValue != null' since this breaks for NullLiterals.
11247
11248 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11249
11250         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
11251         setting of this flag, since the 'set' method may be non-public.
11252
11253 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11254
11255         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
11256         check on current_vector.Block.
11257
11258 2004-04-27  Martin Baulig  <martin@ximian.com>
11259
11260         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
11261         a field initializer.  Fixes #56459.
11262
11263 2004-04-27  Martin Baulig  <martin@ximian.com>
11264
11265         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
11266         we're not attempting to use an indexer.  Fixes #52154.
11267
11268 2004-04-27  Martin Baulig  <martin@ximian.com>
11269
11270         * statement.cs (Return): Don't create a return label if we don't
11271         need it; reverts my change from January 20th.  Thanks to Ben
11272         Maurer for this.
11273
11274 2004-04-27  Martin Baulig  <martin@ximian.com>
11275
11276         According to the spec, `goto' can only leave a nested scope, but
11277         never enter it.
11278
11279         * statement.cs (Block.LookupLabel): Only lookup in the current
11280         block, don't recurse into parent or child blocks.
11281         (Block.AddLabel): Check in parent and child blocks, report
11282         CS0140/CS0158 if we find a duplicate.
11283         (Block): Removed this indexer for label lookups.
11284         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
11285         this already does the error reporting for us.
11286
11287         * flowanalysis.cs
11288         (FlowBranching.UsageVector.Block): New public variable; may be null.
11289         (FlowBranching.CreateSibling): Added `Block' argument.
11290         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
11291         label for the target of a `goto' and check whether we're not
11292         leaving a `finally'.
11293
11294 2004-04-27  Martin Baulig  <martin@ximian.com>
11295
11296         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11297         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
11298         just for returns).
11299
11300 2004-04-27  Martin Baulig  <martin@ximian.com>
11301
11302         * statement.cs (Block.AddLabel): Also check for implicit blocks
11303         and added a CS0158 check.
11304
11305 2004-04-27  Martin Baulig  <martin@ximian.com>
11306
11307         * flowanalysis.cs (FlowBranchingLoop): New class.
11308         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
11309         UsageVector's instead of an ArrayList.
11310         (FlowBranching.Label): Likewise.
11311         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
11312         (FlowBranching.AddBreakVector): New method.
11313
11314 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
11315
11316         * attribute.cs: Small regression fix: only convert the type if we
11317         the type is different, fixes System.Drawing build.
11318
11319 2004-04-27  Martin Baulig  <martin@ximian.com>
11320
11321         * attribute.cs (Attribute.Resolve): If we have a constant value
11322         for a named field or property, implicity convert it to the correct
11323         type.
11324
11325 2004-04-27  Raja R Harinath  <rharinath@novell.com>
11326
11327         * statement.cs (Block.Block): Implicit blocks share
11328         'child_variable_names' fields with parent blocks.
11329         (Block.AddChildVariableNames): Remove.
11330         (Block.AddVariable): Mark variable as "used by a child block" in
11331         every surrounding block.
11332         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
11333         been used in a child block, complain about violation of "Invariant
11334         meaning in blocks" rule.
11335         * cs-parser.jay (declare_local_variables): Don't use
11336         AddChildVariableNames.
11337         (foreach_statement): Don't create an implicit block: 'foreach'
11338         introduces a scope.
11339
11340 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
11341
11342         * convert.cs (ImplicitNumericConversion): 0 is also positive when
11343         converting from 0L to ulong.  Fixes 57522.
11344
11345 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11346
11347         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
11348         derived class hides via 'new' keyword field from base class (test-242.cs).
11349         TODO: Handle this in the more general way.
11350         
11351         * class.cs (CheckBase): Ditto.
11352
11353 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11354
11355         * decl.cs (caching_flags): New member for storing cached values
11356         as bit flags.
11357         (MemberCore.Flags): New enum where bit flags for caching_flags
11358         are defined.
11359         (MemberCore.cls_compliance): Moved to caching_flags.
11360         (DeclSpace.Created): Moved to caching_flags.
11361
11362         * class.cs: Use caching_flags instead of DeclSpace.Created
11363         
11364 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
11365
11366         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
11367         if we are only a derived class, not a nested class.
11368
11369         * typemanager.cs: Same as above, but do this at the MemberLookup
11370         level (used by field and methods, properties are handled in
11371         PropertyExpr).   Allow for the qualified access if we are a nested
11372         method. 
11373
11374 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
11375
11376         * class.cs: Refactoring.
11377         (IMethodData): New inteface; Holds links to parent members
11378         to avoid member duplication (reduced memory allocation).
11379         (Method): Implemented IMethodData interface.
11380         (PropertyBase): New inner classes for get/set methods.
11381         (PropertyBase.PropertyMethod): Implemented IMethodData interface
11382         (Event): New inner classes for add/remove methods.
11383         (Event.DelegateMethod): Implemented IMethodData interface.
11384
11385         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
11386         EmitContext (related to class.cs refactoring).
11387
11388 2004-04-21  Raja R Harinath  <rharinath@novell.com>
11389
11390         * delegate.cs (Delegate.VerifyApplicability): If the number of
11391         arguments are the same as the number of parameters, first try to
11392         verify applicability ignoring  any 'params' modifier on the last
11393         parameter.
11394         Fixes #56442.
11395
11396 2004-04-08  Martin Baulig  <martin@ximian.com>
11397
11398         Merged latest changes into gmcs.  Please keep this comment in
11399         here, it makes it easier for me to see what changed in MCS since
11400         the last time I merged.
11401
11402 2004-04-16  Raja R Harinath  <rharinath@novell.com>
11403
11404         * class.cs (TypeContainer.AddIndexer): Use
11405         'ExplicitInterfaceName' to determine if interface name was
11406         explicitly specified.  'InterfaceType' is not initialized at this time.
11407         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
11408         Indexers array is already in the required order.  Initialize
11409         'IndexerName' only if there are normal indexers.
11410         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
11411         (TypeContainer.Emit): Emit DefaultMember attribute only if
11412         IndexerName is initialized.
11413         Fixes #56300.
11414
11415 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
11416
11417         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
11418         Fixes #57007
11419
11420 2004-04-15  Raja R Harinath  <rharinath@novell.com>
11421
11422         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
11423         attributes.
11424         Fix for #56456.
11425
11426         * attribute.cs (Attribute.Resolve): Check for duplicate named
11427         attributes.
11428         Fix for #56463.
11429
11430 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
11431
11432         * iterators.cs (MarkYield): track whether we are in an exception,
11433         and generate code accordingly.  Use a temporary value to store the
11434         result for our state.
11435
11436         I had ignored a bit the interaction of try/catch with iterators
11437         since their behavior was not entirely obvious, but now it is
11438         possible to verify that our behavior is the same as MS .NET 2.0
11439
11440         Fixes 54814
11441
11442 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
11443
11444         * iterators.cs: Avoid creating temporaries if there is no work to
11445         do. 
11446
11447         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
11448         Enumerations, use TypeManager.EnumToUnderlying and call
11449         recursively. 
11450
11451         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
11452         bug #57013
11453
11454         (This.Emit): Use EmitContext.EmitThis to emit our
11455         instance variable.
11456
11457         (This.EmitAssign): Ditto.
11458
11459         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
11460         codepaths, we will move all the functionality into
11461         Mono.CSharp.This 
11462
11463         (FieldExpr.EmitAssign): Ditto.
11464
11465         This fixes several hidden bugs that I uncovered while doing a code
11466         review of this today.
11467
11468         * codegen.cs (EmitThis): reworked so the semantics are more clear
11469         and also support value types "this" instances.
11470
11471         * iterators.cs: Changed so that for iterators in value types, we
11472         do not pass the value type as a parameter.  
11473
11474         Initialization of the enumerator helpers is now done in the caller
11475         instead of passing the parameters to the constructors and having
11476         the constructor set the fields.
11477
11478         The fields have now `assembly' visibility instead of private.
11479
11480 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
11481
11482         * expression.cs (Argument.Resolve): Check if fields passed as ref
11483         or out are contained in a MarshalByRefObject.
11484
11485         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
11486         another compiler type.
11487
11488 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11489
11490         * class.cs (Indexer.Define): use the new name checking method.
11491         Also, return false on an error.
11492         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11493         (is_identifier_[start/part]_character): make static.
11494
11495 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11496
11497         * expression.cs (Binary.ResolveOperator): Do no append strings
11498         twice: since we can be invoked more than once (array evaluation)
11499         on the same concatenation, take care of this here.  Based on a fix
11500         from Ben (bug #56454)
11501
11502 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11503
11504         * codegen.cs: Fix another case where CS1548 must be reported (when 
11505         delay-sign isn't specified and no private is available #56564). Fix
11506         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11507         error when MCS is used on the MS runtime and we need to delay-sign 
11508         (which seems unsupported by AssemblyBuilder - see #56621).
11509
11510 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11511
11512         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11513         (TypeManager.ComputeNamespaces): Faster implementation for
11514         Microsoft runtime.
11515
11516         * compiler.csproj: Updated AssemblyName to mcs.
11517
11518 2004-05-11  Jackson Harper  <jackson@ximian.com>
11519
11520         * Makefile: Preserve MONO_PATH
11521         
11522 2004-05-11  Jackson Harper  <jackson@ximian.com>
11523
11524         * Makefile: Use mono and mcs to build gmcs
11525         
11526 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11527
11528         * codegen.cs: Add patch from Robert Shade
11529         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11530         sync with mcs.
11531
11532 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11533
11534         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11535         incomplete key pairs (#57941).
11536
11537 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11538
11539         * codegen.cs: Fix another case where CS1548 must be reported (when 
11540         delay-sign isn't specified and no private is available #56564). Fix
11541         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11542         error when MCS is used on the MS runtime and we need to delay-sign 
11543         (which seems unsupported by AssemblyBuilder - see #56621).
11544
11545 2004-04-29  Jackson Harper  <jackson@ximian.com>
11546
11547         * Makefile: Set MONO_PATH to use the bootstrap corlib
11548         * driver.cs: Check the GAC for referenced assemblies.
11549                 
11550 2004-04-29  Martin Baulig  <martin@ximian.com>
11551
11552         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11553
11554 2004-04-07  Martin Baulig  <martin@ximian.com>
11555
11556         * expression.cs (Binary.ResolveOperator): Added special case for
11557         Equality/Inequality between a type parameter and a null literal.
11558
11559 2004-04-07  Martin Baulig  <martin@ximian.com>
11560
11561         * convert.cs: Check null literal -> type parameter conversions.
11562
11563 2004-04-07  Martin Baulig  <martin@ximian.com>
11564
11565         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11566         `class' and `struct' constraints.
11567
11568 2004-04-07  Martin Baulig  <martin@ximian.com>
11569
11570         * generic.cs (SpecialConstraint): New public enum.
11571         (Constraints.Resolve): Added support for the `class' and `struct'
11572         constraints.
11573
11574         * cs-parser.jay (type_parameter_constraint): Added support for the
11575         `class' and `struct' constraints.
11576
11577 2004-04-07  Martin Baulig  <martin@ximian.com>
11578
11579         * support.cs (GenericConstraints): Replaced `Types' by
11580         `ClassConstraint' and `InterfaceConstraints'; added
11581         `HasClassConstraint'.   
11582
11583 2004-04-07  Martin Baulig  <martin@ximian.com>
11584
11585         * generic.cs
11586         (Constraints.InterfaceConstraints): New public property.
11587         (Constraints.Types): Make this property public
11588         (TypeParameter): Implement IMemberContainer.
11589         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11590         instead of a TypeBuilder/MethodBuilder; pass the interface
11591         constraints to TypeManager.AddTypeParameter().
11592         (TypeParameter.DefineType): Just take an EmitContext and no
11593         TypeBuilder/MethodBuilder.  Use the new public API.
11594
11595         * typemanager.cs (TypeManager.AddTypeParameter): Added
11596         `TypeExpr[]' argument; add the interfaces to the
11597         `builder_to_ifaces' hash.
11598         (TypeManager.LookupMemberContainer): For
11599         GenericTypeParameterBuilders, get the TypeParameter from the
11600         `builder_to_type_param'.
11601         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11602         the TypeParameter and call FindMembers on it.
11603
11604 2004-04-07  Martin Baulig  <martin@ximian.com>
11605
11606         * class.cs
11607         (MethodCore.GenericMethod): Moved this field here from Method.
11608         (MethodCore.IsDuplicateImplementation): Take the number of type
11609         parameters into account if we're a generic method.
11610
11611         * expression.cs (Invocation.InferTypeArguments): Don't return true
11612         if `arguments' is null; we still need to check whether we actually
11613         don't need to infer anything in this case.
11614         (MemberAccess): Merged the functionality from GenericMemberAccess
11615         into this class.
11616
11617         * generic.cs (GenericMemberAccess): Removed.
11618
11619 2004-04-05  Martin Baulig  <martin@ximian.com>
11620
11621         * decl.cs (MemberCore): For generic classes, interfaces and
11622         structs, `Name' now includes the number of type parameters
11623         ("Stack!1.Node!1").
11624         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
11625         encode the number of type arguments in the type name.
11626
11627         * expression.cs (Expression.MemberLookup): Removed the
11628         `num_type_args' argument; we now encode the number of type
11629         arguments in the type name.
11630
11631         * ecore.cs (SimpleName): Encode the number of type arguments in
11632         the type name itself.
11633
11634         * generic.cs (ConstructedType): Likewise.
11635
11636         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
11637         `MemberName'; we now include the number of type parameters in the
11638         type name.
11639
11640         * typemanager.cs (TypeManager.CheckGeneric): Removed.
11641         (TypeManager.MemberLookup): Removed the
11642         `num_type_args' argument; we now encode the number of type
11643         arguments in the type name.     
11644
11645 2004-04-03  Martin Baulig  <martin@ximian.com>
11646
11647         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
11648         (MemberCore.MemberName): Moved here from MemberBase.
11649         (DeclSpace.SetParameterInfo): Just take the constraints as an
11650         ArrayList; we already have the type parameters in our
11651         `MemberName'; also do the CS0080 reporting here.
11652
11653         * cs-parser.jay (struct_declaration): Use `member_name' instead of
11654         `IDENTIFIER opt_type_parameter_list'; when constructing our
11655         `MemberName', it'll already include our type parameters.
11656         (class_declaration, interface_declaration): Likewise.
11657         (delegate_declaration): Likewise.
11658         (MakeName): Take a MemberName and return a MemberName.
11659         The following two changes are required to avoid shift/reduce conflicts:
11660         (member_name): Don't include a TypeName anymore; ie. this is now
11661         just 'IDENTIFIER opt_type_parameter_list'.
11662         (property_declaration, event_declaration): Use a
11663         `namespace_or_type_name' instead of a `member_name'.            
11664
11665 2004-04-03  Martin Baulig  <martin@ximian.com>
11666
11667         * decl.cs (MemberName): Renamed to `TypeName' and created a new
11668         `MemberName' class.
11669         (TypeName): Formerly known as MemberName.
11670
11671         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
11672         instead of a `MemberName'.
11673
11674         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
11675         (member_name): New rule; create a MemberName.
11676
11677 2004-04-02  Martin Baulig  <martin@ximian.com>
11678
11679         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
11680         (CS0305 and CS0308).
11681
11682 2004-04-02  Martin Baulig  <martin@ximian.com>
11683
11684         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
11685         support for nested types.
11686
11687 2004-04-02  Martin Baulig  <martin@ximian.com>
11688
11689         * ecore.cs (IAlias): New public interface.
11690         (TypeExpr, TypeExpression): Implement IAlias.
11691         (TypeAliasExpression): New public class.
11692
11693         * namespace.cs (Namespace): Implement IAlias.
11694         (Namespace.Lookup): Return an IAlias instead on an object.
11695         (Namespace.DefineName): Take an IAlias instead of an object.
11696         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
11697         an object.
11698         (NamespaceEntry.UsingAlias): Take a Membername instead of an
11699         Expression.
11700         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
11701         object.
11702         (NamespaceEntry.Lookup): Likewise.
11703
11704         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
11705         instead of a Type.      
11706
11707         * decl.cs (DeclSpace): Implement IAlias.
11708         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
11709
11710         * generic.cs (ConstructedType): Improved error checking.
11711
11712 2004-04-02  Martin Baulig  <martin@ximian.com>
11713
11714         * convert.cs: Added type parameter conversions.
11715
11716         * ecore.cs
11717         (UnboxCast.Emit): Emit an `unbox.any' for type params.
11718         (ClassCast.Emit): If the source type is a type parameter, box it.
11719         If the target type is a type parameter, emit an `unbox.any'
11720         instead of a `classcast'.1      
11721
11722 2004-04-01  Martin Baulig  <martin@ximian.com>
11723
11724         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
11725
11726 2004-04-01  Martin Baulig  <martin@ximian.com>
11727
11728         * generic.cs (ConstructedType.CheckConstraints): Use
11729         Convert.ImplicitStandardConversionExists(); user-defined implicit
11730         conversions are not allowed according to the spec.
11731
11732 2004-03-30  Martin Baulig  <martin@ximian.com>
11733
11734         * expression.cs (New): Added support for type parameters.
11735
11736         * typemanager.cs
11737         (TypeManager.activator_type): New public static field.
11738         (TypeManager.activator_create_instance): Likewise.
11739
11740 2004-03-30  Martin Baulig  <martin@ximian.com>
11741
11742         * typemanager.cs (TypeManager.HasConstructorConstraint): New
11743         public method.
11744
11745 2004-03-30  Martin Baulig  <martin@ximian.com>
11746
11747         * generic.cs (ConstructedType.CheckConstraints): Actually follow
11748         the spec here: the argument type must be convertible to the
11749         constraints.
11750
11751 2004-03-30  Martin Baulig  <martin@ximian.com>
11752
11753         * generic.cs
11754         (TypeParameter.Define, TypeParameter.DefineMethod): Call
11755         TypeManager.AddTypeParameter().
11756         (ConstructedType.CheckConstraints): Re-enable this and actually
11757         check whether we have a constructor constraint.
11758
11759         * typemanager.cs
11760         (TypeManager.builder_to_type_param): New static field.
11761         (TypeManager.AddTypeParameter): New static method.
11762         (TypeManager.LookupTypeParameter): New public method.
11763
11764 2004-03-30  Martin Baulig  <martin@ximian.com>
11765
11766         * generic.cs (TypeParameter.DefineType): Return a boolean and use
11767         the new API to actually define the constructor constraint.
11768
11769         * typemanager.cs
11770         (TypeManager.new_constraint_attr_type): New static field.
11771         (TypeManager.InitCoreTypes): Initialize it.
11772
11773 2004-03-30  Martin Baulig  <martin@ximian.com>
11774
11775         * generic.cs (Constraints): Completed error checking, use correct
11776         error numbers.
11777
11778 2004-03-29  Martin Baulig  <martin@ximian.com>
11779
11780         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
11781
11782         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11783         public version which takes a `ParameterData pd' instead of an
11784         `ArrayList args'.
11785
11786 2004-03-29  Martin Baulig  <martin@ximian.com>
11787
11788         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
11789         not a MethodInfo.       
11790
11791 2004-03-29  Martin Baulig  <martin@ximian.com>
11792
11793         * expression.cs (Argument.ResolveMethodGroup): If we're a
11794         ConstructedType, call GetMemberAccess() on it.  
11795
11796 2004-03-29  Martin Baulig  <martin@ximian.com>
11797
11798         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
11799         (MethodCore.CheckGenericOverride): When overriding a generic
11800         method, check whether the constraints match.
11801
11802         * support.cs (GenericConstraints): New public interface.
11803         (ParameterData.GenericConstraints): New public method.
11804
11805         * parameter.cs (Parameter.Resolve): Check whether we're a generic
11806         method parameter and compute our constraints if appropriate.
11807         (Parameter.GenericConstraints): New public property.
11808
11809         * generic.cs (Constraints): Implement GenericConstraints.
11810
11811 2004-03-29  Martin Baulig  <martin@ximian.com>
11812
11813         * decl.cs (MemberCache.FindMemberToOverride): Use
11814         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
11815
11816 2004-03-29  Martin Baulig  <martin@ximian.com>
11817
11818         * generic.cs (GenericMethod.Define): Resolve our type parameters.
11819
11820 2004-03-29  Martin Baulig  <martin@ximian.com>
11821
11822         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
11823         not allowed on non-generic declarations").
11824
11825 2004-03-29  Martin Baulig  <martin@ximian.com>
11826
11827         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11828         public version of this method.
11829
11830         * class.cs (MethodCore.IsDuplicateImplementation): Use
11831         Invocation.InferTypeArguments() to check this.
11832
11833 2004-03-29  Martin Baulig  <martin@ximian.com>
11834
11835         * convert.cs: Use TypeManager.IsDelegateType() instead of
11836         comparing types correctly.
11837
11838 2004-03-29  Martin Baulig  <martin@ximian.com>
11839
11840         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
11841         types directly to make it work for generic instances.
11842
11843         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
11844
11845 2004-03-29  Martin Baulig  <martin@ximian.com>
11846
11847         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
11848         support for arrays.     
11849
11850 2004-03-24  Martin Baulig  <martin@ximian.com>
11851
11852         * decl.cs (DeclSpace.FindType): Also use
11853         TypeManager.CheckGeneric() for types from the using clauses.
11854
11855 2004-03-23  Martin Baulig  <martin@ximian.com>
11856
11857         * expression.cs (Invocation.OverloadResolve): Added `bool
11858         may_fail' argument and use it instead of the Location.IsNull() hack.
11859
11860 2004-03-23  Martin Baulig  <martin@ximian.com>
11861
11862         * expression.cs (Invocation.InferType): Use correct type inference
11863         rules here.     
11864
11865 2004-03-23  Martin Baulig  <martin@ximian.com>
11866
11867         * ecore.cs (MethodGroupExpr.Name): Use
11868         TypeManager.CSharpSignature() instead of just the name.
11869
11870         * expression.cs (Invocation.OverloadResolve): Provide better error
11871         reporting.
11872         (Invocation.DoResolve): OverloadResolve() never returns null
11873         without reporting an error, so removed the error -6 reporting here.
11874
11875 2004-03-23  Martin Baulig  <martin@ximian.com>
11876
11877         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
11878         generic methods.
11879
11880         * cs-parser.jay (delegate_declaration): Support generic delegates.
11881
11882         * delegate.cs: Support generic delegates.
11883
11884 2004-03-22  Martin Baulig  <martin@ximian.com>
11885
11886         * expression.cs (Invocation.InferParamsTypeArguments): New static
11887         method; does type inference for params arguments.
11888
11889 2004-03-21  Martin Baulig  <martin@ximian.com>
11890
11891         * typemanager.cs (TypeManager.IsGenericMethod): New public static
11892         method; checks whether a method is a generic method.    
11893
11894         * expression.cs (Invocation.InferTypeArguments): New static method;
11895         infer type arguments for generic method invocation.
11896
11897         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
11898         property; we set this to true if we're resolving a generic method
11899         invocation and the user specified type arguments, ie. we're not
11900         doing type inference.
11901
11902 2004-03-20  Martin Baulig  <martin@ximian.com>
11903
11904         * class.cs (MethodData.DeclaringType): New public property.
11905         (MethodData.Define): Set DeclaringType here.
11906         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
11907         instead of OperatorMethodBuilder.DeclaringType.
11908
11909 2004-03-20  Martin Baulig  <martin@ximian.com>
11910
11911         * cs-tokenizer.cs (xtoken): Return a special
11912         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
11913
11914         * cs-parser.jay (default_value_expression): Switch to the new
11915         syntax (14.5.13).
11916
11917 2004-03-19  Martin Baulig  <martin@ximian.com>
11918
11919         * decl.cs (MemberName): New class.  We use this to "construct"
11920         namespace_or_type_name's.
11921
11922         * generics.cs (TypeArguments.GetDeclarations): New public method;
11923         returns the type arguments as a string[] and reports a CS0081 if
11924         one of them is not an identifier.
11925
11926         * class.cs (MemberBase): The .ctor now takes the name as a
11927         MemberName instead of a string.
11928         (MemberBase.ExplicitInterfaceName): Changed type from string to
11929         Expression.
11930         (MemberBase.DoDefine): If we're an explicit implementation, the
11931         InterfaceType may be a generic instance.
11932
11933         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
11934         (namespace_name): Call MemberName.GetName () to transform the
11935         MemberName into a string and ensure we don't have any type
11936         arguments.
11937         (type_name): Call MemberName.GetTypeExpression() to transfrom the
11938         MemberName into an expression.
11939         (method_header): Use namespace_or_type_name instead of member_name.     
11940
11941 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
11942
11943         * rootcontext.cs: Add new types to the boot resolution.
11944
11945         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
11946         MulticastDelegate is not allowed.
11947
11948         * typemanager.cs: Add new types to lookup: System.TypedReference
11949         and ArgIterator.
11950
11951         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
11952         check for TypedReference or ArgIterator, they are not allowed. 
11953
11954         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
11955         makes us properly catch 1510 in some conditions (see bug 56016 for
11956         details). 
11957
11958 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
11959
11960         * CryptoConvert.cs: update from corlib version
11961         with endian fixes.
11962
11963 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
11964
11965         * class.cs (Indexer.Define): Check indexername declaration
11966
11967 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
11968
11969         * attribute.cs (IsClsCompliant): Fixed problem with handling
11970         all three states (compliant, not-compliant, undetected).
11971
11972 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
11973
11974         * attribute.cs (Attribute): Location is now public.
11975         (Resolve): Store resolved arguments (pos_values) in attribute class.
11976         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
11977         (GetClsCompliantAttributeValue): New method that gets
11978         CLSCompliantAttribute value.
11979         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
11980         if exists else null.
11981         (AttributeTester): New class for CLS-Compliant verification routines.
11982
11983         * class.cs (Emit): Add CLS-Compliant verification.
11984         (Method.GetSignatureForError): Implemented.
11985         (Constructor.GetSignatureForError): Implemented
11986         (Constructor.HasCompliantArgs): Returns if constructor has
11987         CLS-Compliant arguments.
11988         (Constructor.Emit): Override.
11989         (Construcor.IsIdentifierClsCompliant): New method; For constructors
11990         is needed to test only parameters.
11991         (FieldBase.GetSignatureForError): Implemented.
11992         (TypeContainer): New member for storing base interfaces.
11993         (TypeContainer.FindMembers): Search in base interfaces too.
11994
11995         * codegen.cs (GetClsComplianceAttribute): New method that gets
11996         assembly or module CLSCompliantAttribute value.
11997         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
11998         for assembly.
11999         (ModuleClass.Emit): Add error 3012 test.
12000
12001         * const.cs (Emit): Override and call base for CLS-Compliant tests.
12002
12003         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
12004         state for all decl types.
12005         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
12006         if CLS-Compliant tests are required.
12007         (IsClsCompliaceRequired): New method. Analyze whether code
12008         must be CLS-Compliant.
12009         (IsExposedFromAssembly): New method. Returns true when MemberCore
12010         is exposed from assembly.
12011         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
12012         value or gets cached value.
12013         (HasClsCompliantAttribute): New method. Returns true if MemberCore
12014         is explicitly marked with CLSCompliantAttribute.
12015         (IsIdentifierClsCompliant): New abstract method. This method is
12016         used to testing error 3005.
12017         (IsIdentifierAndParamClsCompliant): New method. Common helper method
12018         for identifier and parameters CLS-Compliant testing.
12019         (VerifyClsCompliance): New method. The main virtual method for
12020         CLS-Compliant verifications.
12021         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
12022         null. I don't know why is null (too many public members !).
12023         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
12024         and get value of first CLSCompliantAttribute that found.
12025
12026         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
12027         (VerifyClsCompliance): Override and add extra tests.
12028
12029         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
12030         clscheck- disable CLS-Compliant verification event if assembly is has
12031         CLSCompliantAttribute(true).
12032
12033         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
12034         ApllyAttribute is now called in emit section as in the other cases.
12035         Possible future Emit integration.
12036         (IsIdentifierClsCompliant): New override.
12037         (VerifyClsCompliance): New override.
12038         (GetEnumeratorName): Returns full enum name.
12039
12040         * parameter.cs (GetSignatureForError): Implemented.
12041
12042         * report.cs (WarningData): New struct for Warning message information.
12043         (LocationOfPreviousError): New method.
12044         (Warning): New method. Reports warning based on the warning table.
12045         (Error_T): New method. Reports error based on the error table.
12046
12047         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
12048         verifications are done here.
12049
12050         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
12051
12052         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
12053         CLSCompliantAttribute.
12054         (all_imported_types): New member holds all imported types from other
12055         assemblies.
12056         (LoadAllImportedTypes): New method fills static table with exported types
12057         from all referenced assemblies.
12058         (Modules): New property returns all assembly modules.
12059
12060 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
12061
12062         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
12063         throwing a parser error.
12064
12065         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
12066         which removes the hardcoded get_/set_ prefixes for properties, as
12067         IL allows for the properties to be named something else.  
12068
12069         Bug #56013
12070
12071         * expression.cs: Do not override operand before we know if it is
12072         non-null.  Fix 56207
12073
12074 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12075
12076         * typemanager.cs: support for pinned variables.
12077
12078 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12079
12080         * decl.cs, typemanager.cs: Avoid using an arraylist
12081         as a buffer if there is only one result set.
12082
12083 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
12084
12085         * expression.cs: Make sure you cant call a static method
12086         with an instance expression, bug #56174.
12087
12088 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
12089
12090         * class.cs (IsDuplicateImplementation): Improve error reporting to
12091         flag 663 (method only differs in parameter modifier).
12092
12093         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
12094         in preprocessor directives.
12095
12096         * location.cs (LookupFile): Allow for the empty path.
12097
12098         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
12099         better approach for some of that patch, but its failing with the
12100         CharSet enumeration.  For now try/catch will do.
12101
12102         * typemanager.cs: Do not crash if a struct does not have fields.
12103         Fixes 56150.
12104
12105 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12106
12107         * expression.cs: cs0213, cant fix a fixed expression.
12108         fixes 50231.
12109
12110 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12111
12112         * cs-parser.jay: detect invalid embeded statements gracefully.
12113         bug #51113.
12114
12115 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12116
12117         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
12118         As a regex:
12119         s/
12120         the invocation type may not be a subclass of the tye of the item/
12121         The type of the item must be a subclass of the invocation item.
12122         /g
12123
12124         Fixes bug #50820.
12125
12126 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
12127
12128         * attribute.cs: Added methods to get a string and a bool from an
12129         attribute. Required to information from AssemblyKeyFileAttribute,
12130         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
12131         * codegen.cs: Modified AssemblyName creation to include support for
12132         strongnames. Catch additional exceptions to report them as CS1548.
12133         * compiler.csproj: Updated include CryptoConvert.cs.
12134         * compiler.csproj.user: Removed file - user specific configuration.
12135         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
12136         Mono.Security assembly. The original class is maintained and tested in
12137         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
12138         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
12139         like CSC 8.0 (C# v2) supports.
12140         * Makefile: Added CryptoConvert.cs to mcs sources.
12141         * rootcontext.cs: Added new options for strongnames.
12142
12143 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
12144
12145         * driver.cs: For --expect-error, report error code `2'
12146         if the program compiled with no errors, error code `1' if
12147         it compiled with an error other than the one expected.
12148
12149 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
12150
12151         * compiler.csproj: Updated for Visual Studio .NET 2003.
12152         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
12153         * compiler.sln: Updated for Visual Studio .NET 2003.
12154
12155 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
12156
12157         * expression.cs: Fix bug #47234. We basically need to apply the
12158         rule that we prefer the conversion of null to a reference type
12159         when faced with a conversion to 'object' (csc behaviour).
12160
12161 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12162
12163         * statement.cs: Shorter form for foreach, eliminates
12164         a local variable. r=Martin.
12165
12166 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12167
12168         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
12169         checks if we can use brtrue/brfalse to test for 0.
12170         * expression.cs: use the above in the test for using brtrue/brfalse.
12171         cleanup code a bit.
12172
12173 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12174
12175         * expression.cs: Rewrite string concat stuff. Benefits:
12176
12177         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
12178         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
12179         rather than a concat chain.
12180
12181         * typemanager.cs: Add lookups for more concat overloads.
12182
12183 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12184
12185         * expression.cs: Emit shorter il code for array init.
12186
12187         newarr
12188         dup
12189         // set 1
12190
12191         // set 2
12192
12193         newarr
12194         stloc.x
12195
12196         ldloc.x
12197         // set 1
12198
12199         ldloc.x
12200         // set 2
12201
12202 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
12203
12204         * statement.cs: Before, two switch blocks would be merged if the
12205         total size of the blocks (end_item - begin_item + 1) was less than
12206         two times the combined sizes of the blocks.
12207
12208         Now, it will only merge if after the merge at least half of the
12209         slots are filled.
12210
12211         fixes 55885.
12212
12213 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
12214
12215         * class.cs : csc build fix for GetMethods(). See bug #52503.
12216
12217 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
12218
12219         * expression.cs: Make sure fp comparisons work with NaN.
12220         This fixes bug #54303. Mig approved this patch a long
12221         time ago, but we were not able to test b/c the runtime
12222         had a related bug.
12223
12224 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
12225
12226         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
12227
12228 2004-03-19  Martin Baulig  <martin@ximian.com>
12229
12230         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
12231         two overloads may unify for some type parameter substitutions and
12232         report a CS0408 if appropriate.
12233
12234 2004-03-19  Martin Baulig  <martin@ximian.com>
12235
12236         * class.cs (MemberCore.IsDuplicateImplementation): Report the
12237         error here and not in our caller.
12238
12239 2004-03-19  Martin Baulig  <martin@ximian.com>
12240
12241         * interface.cs: Completely killed this file.
12242         (Interface): We're now a TypeContainer and live in class.cs.
12243
12244         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
12245         argument; we're now also called for interfaces.
12246         (TypeContainer.DefineMembers): Allow this method being called
12247         multiple times.
12248         (TypeContainer.GetMethods): New public method; formerly known as
12249         Interface.GetMethod().  This is used by PendingImplementation.
12250         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
12251         it's now private and non-static.
12252         (Interface): Moved this here; it's now implemented similar to
12253         Class and Struct.
12254         (Method, Property, Event, Indexer): Added `bool is_interface'
12255         argument to their .ctor's.
12256         (MemberBase.IsInterface): New public field.
12257
12258         * cs-parser.jay: Create normal Method, Property, Event, Indexer
12259         instances instead of InterfaceMethod, InterfaceProperty, etc.
12260         (opt_interface_base): Removed; we now use `opt_class_base' instead.
12261         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
12262
12263 2004-03-19  Martin Baulig  <martin@ximian.com>
12264
12265         * class.cs (MethodCore.IsDuplicateImplementation): New private
12266         method which does the CS0111 checking.
12267         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
12268         Use IsDuplicateImplementation().
12269
12270 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
12271
12272         * decl.cs (FindMemberToOverride): New method to find the correct
12273         method or property to override in the base class.
12274         * class.cs
12275             - Make Method/Property use the above method to find the
12276               version in the base class.
12277             - Remove the InheritableMemberSignatureCompare as it is now
12278               dead code.
12279
12280         This patch makes large code bases much faster to compile, as it is
12281         O(n) rather than O(n^2) to do this validation.
12282
12283         Also, it fixes bug 52458 which is that nested classes are not
12284         taken into account when finding the base class member.
12285
12286         Reviewed/Approved by Martin.
12287
12288 2004-03-17  Martin Baulig  <martin@ximian.com>
12289
12290         * expression.cs (MemberAccess.DoResolve): Take the parent's number
12291         of type arguments into account; use the `real_num_type_args'
12292         approach like in DoResolveAsTypeStep().
12293
12294         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
12295         nested types.
12296
12297 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
12298
12299         * interface.cs: In all interface classes removed redundant
12300         member initialization.
12301
12302 2004-03-16  Martin Baulig  <martin@ximian.com>
12303
12304         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12305
12306 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12307
12308         * decl.cs (DefineTypeAndParents): New helper method to define a
12309         type's containers before the type itself is defined;  This is a
12310         bug exposed by the recent changes to Windows.Forms when an
12311         implemented interface was defined inside a class that had not been
12312         built yet.   
12313
12314         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
12315
12316         (Check): Loop correctly to report errors modifiers
12317         (UNSAFE was not in the loop, since it was the same as TOP).
12318
12319         * interface.cs: Every interface member now takes a ModFlags,
12320         instead of a "is_new" bool, which we set on the base MemberCore. 
12321
12322         Every place where we called "UnsafeOk" in the interface, now we
12323         call the proper member (InterfaceMethod.UnsafeOK) instead to get
12324         the unsafe settings from the member declaration instead of the
12325         container interface. 
12326
12327         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
12328
12329         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12330         `set_indexer_name' to the pending bits (one per type).
12331
12332         We fixed a bug today that was picking the wrong method to
12333         override, since for properties the existing InterfaceMethod code
12334         basically ignored the method name.  Now we make sure that the
12335         method name is one of the valid indexer names.
12336
12337 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
12338  
12339         * support.cs (SeekableStreamReader): Keep track of stream byte
12340         positions and don't mix them with character offsets to the buffer.
12341
12342         Patch from Gustavo Giráldez
12343
12344 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
12345
12346         * interface.cs (InterfaceSetGetBase): Removed double member
12347         initialization, base class does it as well.
12348
12349 2004-03-13  Martin Baulig  <martin@ximian.com>
12350
12351         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
12352         when compiling corlib.
12353
12354 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
12355
12356         * convert.cs (ExplicitConversion): We were reporting an error on
12357         certain conversions (object_type source to a value type, when the
12358         expression was `null') before we had a chance to pass it through
12359         the user defined conversions.
12360
12361         * driver.cs: Replace / and \ in resource specifications to dots.
12362         Fixes 50752
12363
12364         * class.cs: Add check for duplicate operators.  Fixes 52477
12365
12366 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
12367
12368         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
12369         that are in the middle of the statements, not only at the end.
12370         Fixes #54987
12371
12372         * class.cs (TypeContainer.AddField): No longer set the
12373         `HaveStaticConstructor' flag, now we call it
12374         `UserDefineStaticConstructor' to diferentiate the slightly
12375         semantic difference.
12376
12377         The situation is that we were not adding BeforeFieldInit (from
12378         Modifiers.TypeAttr) to classes that could have it.
12379         BeforeFieldInit should be set to classes that have no static
12380         constructor. 
12381
12382         See:
12383
12384         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
12385
12386         And most importantly Zoltan's comment:
12387
12388         http://bugzilla.ximian.com/show_bug.cgi?id=44229
12389
12390         "I think beforefieldinit means 'it's ok to initialize the type sometime 
12391          before its static fields are used', i.e. initialization does not need
12392          to be triggered by the first access to the type. Setting this flag
12393          helps the JIT to compile better code, since it can run the static
12394          constructor at JIT time, and does not need to generate code to call it
12395          (possibly lots of times) at runtime. Unfortunately, mcs does not set
12396          this flag for lots of classes like String. 
12397          
12398          csc sets this flag if the type does not have an explicit static 
12399          constructor. The reasoning seems to be that if there are only static
12400          initalizers for a type, and no static constructor, then the programmer
12401          does not care when this initialization happens, so beforefieldinit
12402          can be used.
12403          
12404          This bug prevents the AOT compiler from being usable, since it 
12405          generates so many calls to mono_runtime_class_init that the AOT code
12406          is much slower than the JITted code. The JITted code is faster, 
12407          because it does not generate these calls if the vtable is type is
12408          already initialized, which is true in the majority of cases. But the
12409          AOT compiler can't do this."
12410
12411 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
12412
12413         * class.cs (MethodData.Emit): Refactor the code so symbolic
12414         information is generated for destructors;  For some reasons we
12415         were taking a code path that did not generate symbolic information
12416         before. 
12417
12418 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12419
12420         * class.cs: Create a Constructor.CheckBase method that
12421         takes care of all validation type code. The method
12422         contains some code that was moved from Define.
12423
12424         It also includes new code that checks for duplicate ctors.
12425         This fixes bug #55148.
12426
12427 2004-03-09  Joshua Tauberer <tauberer@for.net>
12428
12429         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
12430         a { ... }-style array creation invokes EmitStaticInitializers
12431         which is not good for reference-type arrays.  String, decimal
12432         and now null constants (NullCast) are not counted toward
12433         static initializers.
12434
12435 2004-03-05  Martin Baulig  <martin@ximian.com>
12436
12437         * location.cs (SourceFile.HasLineDirective): New public field;
12438         specifies whether the file contains or is referenced by a "#line"
12439         directive.
12440         (Location.DefineSymbolDocuments): Ignore source files which
12441         either contain or are referenced by a "#line" directive.        
12442
12443 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
12444
12445         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
12446         direct access to our parent, so check the method inline there.
12447
12448 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12449
12450         * expression.cs (Invocation.EmitCall): Miguel's last commit
12451         caused a regression. If you had:
12452
12453             T t = null;
12454             t.Foo ();
12455
12456         In Foo the implict this would be null.
12457
12458 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
12459
12460         * expression.cs (Invocation.EmitCall): If the method is not
12461         virtual, do not emit a CallVirt to it, use Call.
12462
12463         * typemanager.cs (GetFullNameSignature): Improve the method to
12464         cope with ".ctor" and replace it with the type name.
12465
12466         * class.cs (ConstructorInitializer.Resolve): Now the method takes
12467         as an argument the ConstructorBuilder where it is being defined,
12468         to catch the recursive constructor invocations.
12469
12470 2004-03-16  Martin Baulig  <martin@ximian.com>
12471
12472         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
12473         ConstructedType, call ResolveType() on it to get the type rather
12474         than just using `expr.Type'.
12475
12476 2004-03-16  Martin Baulig  <martin@ximian.com>
12477
12478         * generics.cs (ConstructedType.GetMemberAccess): Take the
12479         EmitContext instead on the TypeExpr and use
12480         ec.TypeContainer.CurrentType/ec.ContainerType.
12481
12482 2004-03-16  Martin Baulig  <martin@ximian.com>
12483
12484         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
12485         parameters before aliases.
12486
12487 2004-03-16  Martin Baulig  <martin@ximian.com>
12488
12489         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12490         New oublic function; checks whether two generic instances may become
12491         equal under some instantiations (26.3.1).
12492
12493         * class.cs (TypeContainer.Define): Call
12494         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12495         error.
12496
12497 2004-03-16  Martin Baulig  <martin@ximian.com>
12498
12499         * class.cs (TypeContainer.GetClassBases): Moved
12500         Error_TypeParameterAsBase() here and also check whether the base
12501         class is not an attribute.
12502
12503 2004-03-16  Martin Baulig  <martin@ximian.com>
12504
12505         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12506
12507 2004-03-16  Martin Baulig  <martin@ximian.com>
12508
12509         * class.cs (Error_TypeParameterAsBase): Use correct error number
12510         here (CS0689).  
12511
12512 2004-03-16  Martin Baulig  <martin@ximian.com>
12513
12514         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12515         for generics.
12516
12517         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12518         error reporting.
12519
12520 2004-03-15  Martin Baulig  <martin@ximian.com>
12521
12522         * typemanager.cs (TypeManager.GetFullName): New public method.
12523         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12524         argument; only return members with the correct number of type
12525         arguments.
12526         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12527         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12528         whether the number of type arguments matches.
12529
12530         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12531         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12532
12533         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12534         field; it's set by the protected .ctor when we're actually a
12535         GenericMemberAccess.
12536         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12537         arguments and pass it to MemberLookupFinal ().
12538
12539         * ecore.cs (Expression.MemberLookup): Added `int
12540         num_type_arguments' argument; only return members with the correct
12541         number of type arguments.
12542         (Expression.MemberLookupFailed): Check whether the MemberLookup
12543         failed because we did not have the correct number of type
12544         arguments; report CS0305 in this case.
12545
12546         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12547         `e.ResolveAsTypeTerminal()' already did so.
12548
12549 2004-03-15  Martin Baulig  <martin@ximian.com>
12550
12551         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12552         we're a ConstructedType; in this case, the caller must report an
12553         error (for instance CS0131).
12554
12555         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12556         (TypeArguments.Resolve): Actually report errors here.
12557
12558 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12559
12560         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12561         `set_indexer_name' to the pending bits (one per type).
12562
12563         We fixed a bug today that was picking the wrong method to
12564         override, since for properties the existing InterfaceMethod code
12565         basically ignored the method name.  Now we make sure that the
12566         method name is one of the valid indexer names.
12567
12568 2004-03-15  Martin Baulig  <martin@ximian.com>
12569
12570         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12571         for generic instances.
12572
12573 2004-03-13  Martin Baulig  <martin@ximian.com>
12574
12575         * class.cs (TypeContainer.DefineType): Call
12576         TypeManager.AddUserType() immediately after creating the
12577         TypeBuilder; pass all type parameters when creating the
12578         CurrentType.
12579
12580         * decl.cs (DeclSpace.FindNestedType): New public method.
12581         (DeclSpace.FindType): Added `int num_type_args' argument; only
12582         return types with the correct number of type parameters.
12583         (DeclSpace.CountTypeParams): New public property.
12584
12585         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12586         the number of type parameters; defaults to zero.
12587
12588         * generic.cs (TypeArguments.Count): New public property.
12589         (ConstructedType.DoResolveAsTypeStep): First call
12590         ds.FindNestedType() to find out whether we're nested in the
12591         current generic type; in this case, we inherit all type parameters
12592         from the current class.
12593
12594         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12595         num_type_args' argument.
12596         (RootContext.LookupType): Added overloaded version which takes the
12597         number of type arguments; only return types with the correct
12598         number of type arguments.
12599
12600         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12601         checks whether `Type t' has `int num_type_args'.
12602
12603 2004-03-13  Martin Baulig  <martin@ximian.com>
12604
12605         * generic.cs (GenericMethod.DefineType): New method; calls
12606         DefineType() on all the type parameters.
12607
12608         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12609         (MethodData.Define): If we're a generic method, call
12610         GenericMethod.DefineType() to define the type parameters.       
12611
12612 2004-03-10  Martin Baulig  <martin@ximian.com>
12613
12614         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12615         instead of IsAssignableFrom.    
12616
12617 2004-03-10  Martin Baulig  <martin@ximian.com>
12618
12619         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
12620
12621         * support.cs (ParameterData.HasArrayParameter): New property.
12622         (ReflectionParameters.ctor): Take a MethodBase instead of a
12623         ParameterInfo[].  If we have any type parameters, get the generic
12624         method definition and ask it whether we have variable arguments.
12625
12626 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
12627
12628         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
12629         routines to check if a type is an enumerable/enumerator allow
12630         classes that implement the IEnumerable or IEnumerator interfaces.
12631
12632         * class.cs (Property, Operator): Implement IIteratorContainer, and
12633         implement SetYields.
12634
12635         (Property.Define): Do the block swapping for get_methods in the
12636         context of iterators.   We need to check if Properties also
12637         include indexers or not.
12638
12639         (Operator): Assign the Block before invoking the
12640         OperatorMethod.Define, so we can trigger the Iterator code
12641         replacement. 
12642
12643         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
12644         Property and Operator classes are not created when we parse the
12645         declarator but until we have the block completed, so we use a
12646         singleton SimpleIteratorContainer.Simple to flag whether the
12647         SetYields has been invoked.
12648
12649         We propagate this setting then to the Property or the Operator to
12650         allow the `yield' to function.
12651
12652 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
12653
12654         * codegen.cs: Implemented attribute support for modules.
12655         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
12656         Assembly/Module functionality.
12657
12658         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
12659         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
12660         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
12661
12662 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
12663
12664         * interface.cs (FindMembers): The operation is performed on all base
12665         interfaces and not only on the first. It is required for future CLS Compliance patch.
12666
12667 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12668
12669         * statement.cs, codegen.cs:
12670         This patch deals with patterns such as:
12671
12672         public class List : IEnumerable {
12673
12674                 public MyEnumerator GetEnumerator () {
12675                         return new MyEnumerator(this);
12676                 }
12677
12678                 IEnumerator IEnumerable.GetEnumerator () {
12679                         ...
12680                 }
12681                 
12682                 public struct MyEnumerator : IEnumerator {
12683                         ...
12684                 }
12685         }
12686
12687         Before, there were a few things we did wrong:
12688         1) we would emit callvirt on a struct, which is illegal
12689         2) we emited ldarg when we needed to emit ldarga
12690         3) we would mistakenly call the interface methods on an enumerator
12691         type that derived from IEnumerator and was in another assembly. For example:
12692
12693         public class MyEnumerator : IEnumerator
12694
12695         Would have the interface methods called, even if there were public impls of the
12696         method. In a struct, this lead to invalid IL code.
12697
12698 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
12699
12700         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
12701           renamed to Emit.
12702
12703         * delegate.cs (Define): Fixed crash when delegate type is undefined.
12704
12705 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
12706
12707         * cs-parser.jay: Fix small regression: we were not testing V2
12708         compiler features correctly.
12709
12710         * interface.cs: If the emit context is null, then create one
12711
12712 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
12713
12714         * decl.cs (GetSignatureForError): New virtual method to get full name
12715           for error messages.
12716
12717         * attribute.cs (IAttributeSupport): New interface for attribute setting.
12718           Now it is possible to rewrite ApplyAttributes method to be less if/else.
12719
12720         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
12721           Duplicated members and code in these classes has been removed.
12722           Better encapsulation in these classes.
12723
12724 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
12725
12726         * assign.cs (Assign.DoResolve): When dealing with compound
12727         assignments, there is a new rule in ECMA C# 2.4 (might have been
12728         there before, but it is documented here) that states that in:
12729
12730         a op= b;
12731
12732         If b is of type int, and the `op' is a shift-operator, then the
12733         above is evaluated as:
12734
12735         a = (int) a op b 
12736
12737         * expression.cs (Binary.ResolveOperator): Instead of testing for
12738         int/uint/long/ulong, try to implicitly convert to any of those
12739         types and use that in pointer arithmetic.
12740
12741         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
12742         method to print information for from the type, not from the
12743         null-method we were given.
12744
12745 2004-02-01  Duncan Mak  <duncan@ximian.com>
12746
12747         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
12748         parsing for cmd, fixes bug #53694.
12749
12750 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
12751
12752         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
12753         in the member name duplication tests. Property and operator name duplication
12754         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
12755
12756 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
12757
12758         * interface.cs (PopulateMethod): Fixed crash when interface method
12759         returns not existing type (error test cs0246-3.cs).
12760
12761 2004-02-02  Ravi Pratap M <ravi@ximian.com>
12762
12763         * cs-parser.jay (interface_accessors): Re-write actions to also
12764         store attributes attached to get and set methods. Fix spelling
12765         while at it.
12766
12767         (inteface_property_declaration): Modify accordingly.
12768
12769         (InterfaceAccessorInfo): New helper class to store information to pass
12770         around between rules that use interface_accessors.
12771
12772         * interface.cs (Emit): Apply attributes on the get and set
12773         accessors of properties and indexers too.
12774
12775         * attribute.cs (ApplyAttributes): Modify accordingly to use the
12776         right MethodBuilder when applying attributes to the get and set accessors.
12777
12778 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
12779
12780         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
12781
12782 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
12783
12784         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
12785
12786 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
12787
12788         * cs-parser.jay: Remove YIELD token, instead use the new grammar
12789         changes that treat `yield' specially when present before `break'
12790         or `return' tokens.
12791
12792         * cs-tokenizer.cs: yield is no longer a keyword.
12793
12794 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
12795
12796         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
12797         setting for default constructors.
12798         For default constructors are almost every time set wrong Modifier. The
12799         generated IL code has been alright. But inside mcs this values was
12800         wrong and this was reason why several of my CLS Compliance tests
12801         failed.
12802
12803 2004-02-27  Martin Baulig  <martin@ximian.com>
12804
12805         * generics.cs (ConstructedType.ResolveType): Make the nested type
12806         stuff actually work.
12807
12808 2004-02-25  Martin Baulig  <martin@ximian.com>
12809
12810         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
12811         property; returns the type parameters just from the current type,
12812         ie. with the ones from outer classes.
12813         (DeclSpace.LookupGeneric): First search in the current class, then
12814         in outer classes.
12815         (DeclSpace.initialize_type_params): When hiding a type parameter
12816         from an outer class, put it into the `type_param_list' anyways.
12817
12818         * expression.cs (MemberAccess.expr): Made this field protected.
12819
12820         * class.cs (TypeContainer.Define): The `CurrentType' just contains
12821         the type parameters from the current class.
12822
12823         * generic.cs (ConstructedType.ResolveType): Support nested generic
12824         types by taking the type parameters which we inherit from outer
12825         classes into account.
12826         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
12827         support for nested generic types.
12828
12829 2004-02-23  Martin Baulig  <martin@ximian.com>
12830
12831         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
12832         field and check whether we're nested inside a generic type.
12833         (DeclSpace.ResolveType): If we're resolving to a generic type
12834         definition, create a ConstructedType and return its resolved type.
12835         (DeclSpace.initialize_type_params): New private method;
12836         initializes the `type_param_list' field from the type parameters
12837         from this and all enclosing classes.
12838         (DeclSpace.TypeParameters): Call initialize_type_params() unless
12839         we're already initialized.
12840
12841 2004-02-23  Martin Baulig  <martin@ximian.com>
12842
12843         * class.cs (Method.Define): Create the generic method before
12844         calling DoDefine().
12845         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
12846         the TypeContainer one); we use this for generic methods.
12847
12848         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
12849         parent's TypeBuilder.
12850
12851 2004-02-18  Martin Baulig  <martin@ximian.com>
12852
12853         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
12854         to check for equality.
12855
12856 2004-02-05  Martin Baulig  <martin@ximian.com>
12857
12858         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
12859         `ec.TypeContainer.CurrentType', use it instead of
12860         `ec.ContainerType' to check whether we're in the type's ctor.
12861
12862 2004-01-29  Martin Baulig  <martin@ximian.com>
12863
12864         * expression.cs (Invocation.DoResolve): If we're a
12865         `ConstructedType', then we're actually a generic method, so
12866         rewrite the expr as a GenericMemberAccess.
12867
12868         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
12869         here; manually parse it into a string.
12870
12871 2004-01-28  Martin Baulig  <martin@ximian.com>
12872
12873         * typemanager.cs (TypeManager.IsEqual): New static method.
12874         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
12875         check for equality instead of using `=='.
12876
12877 2004-01-26  Martin Baulig  <martin@ximian.com>
12878
12879         * decl.cs (DeclSpace.CurrentType): New public field.
12880
12881         * expression.cs (This.ResolveBase): If we have an
12882         `ec.TypeContainer.CurrentType', use it instead of
12883         `ec.ContainerType'.
12884
12885         * class.cs (TypeContainer.DefineType): If we're a generic type,
12886         create the `CurrentType' (unresolved).
12887         (TypeContainer.GenericType): New private field.
12888         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
12889         it and store it in `GenericType' before creating the MemberCache.
12890         (TypeContainer.GetMembers): If we have a `GenericType', call
12891         TypeManager.FindMembers() on it.
12892
12893         * interface.cs (Interface.GenericType): New private field.
12894         (Interface.DefineType): If we're a generic type, create the
12895         `CurrentType' (unresolved).
12896         (Interface.DefineMembers): If we have a `CurrentType', resolve it
12897         and store it in `GenericType' before creating the MemberCache.
12898         (Interface.GetMembers): If we have a `GenericType', call
12899         TypeManager.FindMembers() on it.
12900
12901 2004-01-22  Martin Baulig  <martin@ximian.com>
12902
12903         * cs-parser.jay (namespace_or_type_name): Return an Expression,
12904         not a QualifiedIdentifier.  This is what `type_name_expression'
12905         was previously doing.
12906         (type_name_expression): Removed; the code is now in
12907         `namespace_or_type_name'.
12908         (qualified_identifier): Removed, use `namespace_or_type_name'
12909         instead.
12910         (QualifiedIdentifier): Removed this class.      
12911
12912 2004-01-22  Martin Baulig  <martin@ximian.com>
12913
12914         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
12915         not a string as alias name.
12916
12917 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
12918
12919         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
12920         #52730 bug, and instead compute correctly the need to use a
12921         temporary variable when requesting an address based on the
12922         static/instace modified of the field and the constructor.
12923  
12924 2004-01-21  Martin Baulig  <martin@ximian.com>
12925
12926         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
12927         class and namespace before looking up aliases.  Fixes #52517.
12928
12929 2004-01-21  Martin Baulig  <martin@ximian.com>
12930
12931         * flowanalysis.cs (UsageVector.Merge): Allow variables being
12932         assinged in a 'try'; fixes exception4.cs.
12933
12934 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12935         * class.cs : Implemented parameter-less constructor for TypeContainer
12936
12937         * decl.cs: Attributes are now stored here. New property OptAttributes
12938
12939         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
12940
12941         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
12942
12943 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12944
12945         * typemanager.cs (CSharpSignature): Now reports also inner class name.
12946           (CSharpSignature): New method for indexer and property signature.
12947
12948 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12949
12950         * pending.cs (IsVirtualFilter): Faster implementation.
12951
12952 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12953
12954         * typemanager.cs: Avoid inclusion of same assembly more than once.
12955
12956 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12957
12958         * cs-parser.jay: Fixed problem where the last assembly attribute
12959           has been applied also to following declaration (class, struct, etc.)
12960           
12961 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12962
12963         * class.cs: Added error CS0538, CS0539 reporting.
12964         Fixed crash on Microsoft runtime when field type is void.
12965
12966         * cs-parser.jay: Added error CS0537 reporting.
12967
12968         * pending.cs: Added error CS0535 reporting.
12969         Improved error report for errors CS0536, CS0534.
12970
12971 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
12972
12973         Merge a few bits from the Anonymous Method MCS tree.
12974
12975         * statement.cs (ToplevelBlock): New class for toplevel methods,
12976         will hold anonymous methods, lifted variables.
12977
12978         * cs-parser.jay: Create toplevel blocks for delegates and for
12979         regular blocks of code. 
12980
12981 2004-01-20  Martin Baulig  <martin@ximian.com>
12982
12983         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
12984         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
12985         and `NeedExplicitReturn'; added `IsLastStatement'.
12986         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
12987         have a `ReturnLabel' or we're not unreachable.
12988
12989         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
12990         child's reachability; don't just override ours with it.  Fixes
12991         #58058 (lluis's example).
12992         (FlowBranching): Added public InTryOrCatch(), InCatch(),
12993         InFinally(), InLoop(), InSwitch() and
12994         BreakCrossesTryCatchBoundary() methods.
12995
12996         * statement.cs (Return): Do all error checking in Resolve().
12997         Unless we are the last statement in a top-level block, always
12998         create a return label and jump to it.
12999         (Break, Continue): Do all error checking in Resolve(); also make
13000         sure we aren't leaving a `finally'.
13001         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
13002         statement in a top-level block.
13003         (Block.Flags): Added `IsDestructor'.
13004         (Block.IsDestructor): New public property.
13005
13006 2004-01-20  Martin Baulig  <martin@ximian.com>
13007
13008         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
13009
13010 2004-01-20  Martin Baulig  <martin@ximian.com>
13011
13012         * statement.cs (Statement.ResolveUnreachable): New public method.
13013         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
13014         (Block.Resolve): Resolve unreachable statements.
13015
13016 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13017
13018         * expression.cs: We need to fix the case where we do
13019         not have a temp variable here.
13020
13021         * assign.cs: Only expression compound assignments need
13022         temporary variables.
13023
13024 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
13025
13026         * flowanalysis.cs: Reduce memory allocation in a few ways:
13027           - A block with no variables should not allocate a bit
13028             vector for itself.
13029           - A method with no out parameters does not need any tracking
13030             for assignment of the parameters, so we need not allocate
13031             any data for it.
13032           - The arrays:
13033                 public readonly Type[] VariableTypes;
13034                 public readonly string[] VariableNames;
13035             Are redundant. The data is already stored in the variable
13036             map, so we need not allocate another array for it.
13037           - We need to add alot of checks for if (params | locals) == null
13038             due to the first two changes.
13039
13040 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
13041
13042         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
13043         implement IMemoryLocation, we store a copy on a local variable and
13044         take the address of it.  Patch from Benjamin Jemlich
13045
13046         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
13047         to use a special "type_name_expression" rule which reduces the
13048         number of "QualifiedIdentifier" classes created, and instead
13049         directly creates MemberAccess expressions.
13050
13051 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
13052
13053         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
13054         that fixes #52853.  Null literal assignment to ValueType
13055
13056         * class.cs (MethodData.Emit): Instead of checking the name of the
13057         method to determine if its a destructor, create a new derived
13058         class from Method called Destructor, and test for that.  
13059
13060         * cs-parser.jay: Create a Destructor object instead of a Method.  
13061
13062         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
13063
13064         Fixes: 52933
13065
13066 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
13067
13068         * expression.cs (Binary.ResolveOperator): Perform an implicit
13069         conversion from MethodGroups to their delegate types on the
13070         Addition operation.
13071
13072         * delegate.cs: Introduce a new class DelegateCreation that is the
13073         base class for `NewDelegate' and `ImplicitDelegateCreation',
13074         factor some code in here.
13075
13076         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
13077         conversion from MethodGroups to compatible delegate types. 
13078
13079         * ecore.cs (Expression.Resolve): Do not flag error 654
13080         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
13081         we allow conversions from MethodGroups to delegate types now.
13082
13083         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
13084         assignments in v2 either.
13085
13086 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
13087
13088         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
13089         static read-only fields in ctors.
13090
13091         Applied patch from Benjamin Jemlich 
13092
13093         * expression.cs (UnaryMutator): Avoid leaking local variables. 
13094
13095 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
13096
13097         * cs-tokenizer.cs (IsCastToken): Allow the various native types
13098         here to return true, as they can be used like this:
13099
13100                 (XXX) int.MEMBER ()
13101
13102         Fixed 49836 and all the other dups
13103
13104 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
13105
13106         * driver.cs: Implement /win32res and /win32icon.
13107
13108 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
13109
13110         * cs-parser.jay: Add a rule to improve error handling for the
13111         common mistake of placing modifiers after the type.
13112
13113 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
13114
13115         * cs-parser.jay (interface_event_declaration): Catch
13116         initialization of events on interfaces, and report cs0068
13117
13118         * cs-parser.jay (interface_event_declaration): Catch
13119         initialization of events. 
13120
13121         * ecore.cs: Better report missing constructors.
13122
13123         * expression.cs (Binary.ResolveOperator): My previous bug fix had
13124         the error reporting done in the wrong place.  Fix.
13125
13126         * expression.cs (Binary.ResolveOperator): Catch the 
13127         operator + (E x, E y) error earlier, and later allow for implicit
13128         conversions in operator +/- (E e, U x) from U to the underlying
13129         type of E.
13130
13131         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
13132         52596, if the container class is abstract, the default constructor
13133         is protected otherwise its public (before, we were always public).
13134
13135         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
13136         fixed statement.
13137
13138         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
13139         Jemlich that fixes bug #52597, MCS was generating invalid code for
13140         idisposable structs.   Thanks to Ben for following up with this
13141         bug as well.
13142
13143 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
13144
13145         * driver.cs: Allow assemblies without code to be generated, fixes
13146         52230.
13147
13148 2004-01-07  Nick Drochak <ndrochak@gol.com>
13149
13150         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
13151
13152 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
13153
13154         * cs-parser.jay: Add rules to improve error reporting if fields or
13155         methods are declared at the namespace level (error 116)
13156
13157         * Add rules to catch event add/remove
13158
13159 2004-01-04  David Sheldon <dave-mono@earth.li>
13160
13161   * expression.cs: Added matching ")" to error message for 
13162   CS0077
13163
13164 2004-01-03 Todd Berman <tberman@gentoo.org>
13165
13166         * ecore.cs, attribute.cs:
13167         Applying fix from #52429.
13168
13169 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13170
13171         * ecore.cs, expression.cs, statement.cs:
13172         Total rewrite of how we handle branching. We
13173         now handle complex boolean expressions with fewer
13174         jumps. As well if (x == 0) no longer emits a ceq.
13175
13176         if (x is Foo) is much faster now, because we generate
13177         better code.
13178
13179         Overall, we get a pretty big improvement on our benchmark
13180         tests. The code we generate is smaller and more readable.
13181
13182         I did a full two-stage bootstrap. The patch was reviewed
13183         by Martin and Miguel.
13184
13185 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13186
13187         * cs-parser.jay: Make primary_expression not take a QI.
13188         we dont need this because the member_access rule covers
13189         us here. So we replace the rule with just IDENTIFIER.
13190
13191         This has two good effects. First, we remove a s/r conflict.
13192         Second, we allocate many fewer QualifiedIdentifier objects.
13193
13194 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13195
13196         * attribute.cs: Handle MarshalAs attributes as pseudo, and
13197         set the correct information via SRE. This prevents
13198         hanging on the MS runtime. Fixes #29374.
13199
13200 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13201
13202         * convert.cs: correctly handle conversions to value types
13203         from Enum and ValueType as unboxing conversions.
13204
13205         Fixes bug #52569. Patch by Benjamin Jemlich.
13206
13207 2004-01-02  Ravi Pratap  <ravi@ximian.com>
13208
13209         * expression.cs (BetterConversion): Prefer int -> uint
13210         over int -> ulong (csc's behaviour). This fixed bug #52046.
13211
13212 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13213
13214         * decl.cs (MemberCache.FindMembers): now returns a
13215         MemberInfo [].
13216
13217         * typemanager.cs: In general, go with with ^^.
13218         (CopyNewMethods): take an IList.
13219         (RealMemberLookup): Only allocate an arraylist
13220         if we copy from two sets of methods.
13221
13222         This change basically does two things:
13223         1) Fewer array lists allocated due to CopyNewMethods.
13224         2) the explicit cast in MemberList costed ALOT.
13225
13226 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
13227
13228         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
13229         a hashtable to avoid needless string allocations when an identifier is
13230         used more than once (the common case).
13231
13232 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13233
13234         * pending.cs: MS's TypeBuilder.GetInterfaces ()
13235         is broken, it will not return anything. So, we
13236         have to use the information we have in mcs to
13237         do the task.
13238
13239         * typemanager.cs: Add a cache for GetInterfaces,
13240         since this will now be used more often (due to ^^)
13241
13242         (GetExplicitInterfaces) New method that gets the
13243         declared, not effective, interfaces on a type
13244         builder (eg, if you have interface IFoo, interface
13245         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
13246         { IBar }.
13247
13248         This patch makes MCS able to bootstrap itself on
13249         Windows again.
13250
13251 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13252
13253         * expression.cs: Remove the Nop's that Miguel put
13254         in by mistake.
13255
13256 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13257
13258         * report.cs, codegen.cs: Give the real stack trace to
13259         the error when an exception is thrown.
13260
13261 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13262
13263         * decl.cs: only allocate hashtables for ifaces if 
13264         it is an iface!
13265
13266 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13267
13268         * expression.cs: fix the error from cs0121-2.cs
13269         (a parent interface has two child interfaces that
13270         have a function with the same name and 0 params
13271         and the function is called through the parent).
13272
13273 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13274
13275         * class.cs, rootcontext.cs, typmanager.cs: do not
13276         leak pointers.
13277
13278 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13279
13280         * codegen.cs: remove stack for the ec flow branching.
13281         It is already a linked list, so no need.
13282
13283 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
13284
13285         * Makefile: Allow custom profiler here.
13286
13287 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13288
13289         * typemanager.cs (LookupType):
13290           - Use a static char [], because split takes
13291             a param array for args, so it was allocating
13292             every time.
13293           - Do not store true in a hashtable, it boxes.
13294
13295 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13296
13297         * flowanalysis.cs: bytify common enums.
13298
13299 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13300
13301         * modifiers.cs: Add a new set of flags for the
13302         flags allowed on explicit interface impls.
13303         * cs-parser.jay: catch the use of modifiers in
13304         interfaces correctly.
13305         * class.cs: catch private void IFoo.Blah ().
13306
13307         All related to bug #50572.
13308
13309 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13310
13311         * decl.cs: Rewrite the consistant accessability checking.
13312         Accessability is not linear, it must be implemented in
13313         a tableish way. Fixes #49704.
13314
13315 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13316
13317         * expression.cs: Handle negation in a checked context.
13318         We must use subtraction from zero. Fixes #38674.
13319
13320 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13321
13322         * class.cs: Ignore static void main in DLLs.
13323         * rootcontext.cs: Handle the target type here,
13324         since we are have to access it from class.cs
13325         * driver.cs: account for the above.
13326
13327 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13328
13329         * report.cs: Give line numbers and files if available.
13330
13331 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
13332
13333         * driver.cs: Implement /addmodule.
13334
13335         * typemanager.cs:  Change 'modules' field so it now contains Modules not
13336         ModuleBuilders.
13337
13338 2003-12-20  Martin Baulig  <martin@ximian.com>
13339
13340         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
13341         (FieldBase.IsAssigned): Removed this field.
13342         (FieldBase.SetAssigned): New public method.
13343         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
13344
13345 2003-12-20  Martin Baulig  <martin@ximian.com>
13346
13347         * expression.cs (LocalVariableReference.DoResolve): Don't set
13348         `vi.Used' if we're called from DoResolveLValue().
13349
13350         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
13351         returns the usage vector it just merged into the current one -
13352         pass this one to UsageWarning().
13353         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
13354         of the `EmitContext', don't call this recursively on our children.
13355
13356 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
13357
13358         * driver.cs: Implement /target:module.
13359
13360 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
13361
13362         * support.cs (CharArrayHashtable): New helper class.
13363
13364         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
13365         char arrays, not strings, so we can avoid creating a string in
13366         consume_identifier if the identifier is a keyword.
13367
13368 2003-12-16  Martin Baulig  <martin@ximian.com>
13369
13370         * statement.cs (LocalInfo.Assigned): Removed this property.
13371         (LocalInfo.Flags): Removed `Assigned'.
13372         (LocalInfo.IsAssigned): New public method; takes the EmitContext
13373         and uses flow analysis.
13374         (Block.UsageWarning): Made this method private.
13375         (Block.Resolve): Call UsageWarning() if appropriate.
13376
13377         * expression.cs (LocalVariableReference.DoResolve): Always set
13378         LocalInfo.Used here.
13379
13380 2003-12-13  Martin Baulig  <martin@ximian.com>
13381
13382         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
13383         any value here; we're now using flow analysis to figure out
13384         whether a statement/block returns a value.
13385
13386 2003-12-13  Martin Baulig  <martin@ximian.com>
13387
13388         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
13389         working again.
13390         (FlowBranching.MergeFinally): Don't call
13391         `branching.CheckOutParameters()' here, this is called in
13392         MergeTopBlock().
13393         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
13394         when adding the `finally' vector.       
13395
13396 2003-12-13  Martin Baulig  <martin@ximian.com>
13397
13398         * flowanalysis.cs
13399         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
13400         actually work and also fix #48962.
13401
13402 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13403
13404         * decl.cs: Do not check System.Object for nested types,
13405         since we know it does not have any. Big bang for buck:
13406
13407         BEFORE:
13408            Run 1:   8.35 seconds
13409            Run 2:   8.32 seconds
13410            corlib:  17.99 seconds
13411         AFTER:
13412            Run 1:   8.17 seconds
13413            Run 2:   8.17 seconds
13414            corlib:  17.39 seconds
13415
13416 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
13417
13418         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
13419         time we are returning 0 members, so we save alot here.
13420
13421 2003-12-11  Martin Baulig  <martin@ximian.com>
13422
13423         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
13424         `MergeChild()', also just take the `FlowBranching' as argument;
13425         call Merge() on it and return the result.
13426         (FlowBranching.Merge): We don't need to do anything if we just
13427         have one sibling.
13428
13429 2003-12-11  Martin Baulig  <martin@ximian.com>
13430
13431         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
13432         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
13433         Maurer for this idea.
13434
13435 2003-12-11  Martin Baulig  <martin@ximian.com>
13436
13437         * flowanalysis.cs (MergeResult): This class is now gone; we now
13438         use the `UsageVector' for this.  The reason for this is that if a
13439         branching just has one sibling, we don't need to "merge" them at
13440         all - that's the next step to do.
13441         (FlowBranching.Merge): We now return a `UsageVector' instead of a
13442         `MergeResult'.
13443
13444 2003-12-11  Martin Baulig  <martin@ximian.com>
13445
13446         Reworked flow analyis and made it more precise and bug-free.  The
13447         most important change is that we're now using a special `Reachability'
13448         class instead of having "magic" meanings of `FlowReturns'.  I'll
13449         do some more cleanups and optimizations and also add some more
13450         documentation this week.
13451
13452         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
13453         largely reworked this class.
13454         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
13455         the new `Reachability' class instead of having "magic" values here.
13456         (FlowBranching): We're now using an instance of `Reachability'
13457         instead of having separate `Returns', `Breaks' etc. fields.
13458
13459         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
13460         based on flow analysis; ignore the return value of block.Emit ().
13461
13462 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
13463
13464         * driver.cs typemanager.cs: Find the mono extensions to corlib even
13465         if they are private.
13466
13467 2003-12-09  Martin Baulig  <martin@ximian.com>
13468
13469         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
13470         call them directly on the UsageVector.
13471
13472 2003-12-09  Martin Baulig  <martin@ximian.com>
13473
13474         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
13475         Changed return type from `FlowReturns' to `Reachability'.
13476
13477 2003-12-09  Martin Baulig  <martin@ximian.com>
13478
13479         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
13480         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
13481         `Reachable' fields with a single `Reachability' one.
13482
13483 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13484
13485         * class.cs (FindMembers): Remove foreach's.
13486
13487         Bootstrap times:
13488
13489         BEFORE
13490                 Run 1:   8.74 seconds
13491                 Run 2:   8.71 seconds
13492
13493         AFTER
13494                 Run 1:   8.64 seconds
13495                 Run 2:   8.58 seconds
13496
13497
13498 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13499
13500         * cs-parser.jay:
13501         * gen-treedump.cs:
13502         * statement.cs:
13503         This patch does a few things:
13504                 1. EmptyStatement is now a singleton, so it is never reallocated.
13505                 2. All blah is EmptyStatement constructs have been changed to
13506                    blah == EmptyStatement.Value, which is much faster and valid
13507                    now that EmptyStatement is a singleton.
13508                 3. When resolving a block, rather than allocating a new array for
13509                    the non-empty statements, empty statements are replaced with
13510                    EmptyStatement.Value
13511                 4. Some recursive functions have been made non-recursive.
13512         Mainly the performance impact is from (3), however (1) and (2) are needed for
13513         this to work. (4) does not make a big difference in normal situations, however
13514         it makes the profile look saner.
13515
13516         Bootstrap times:
13517
13518         BEFORE
13519         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13520         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13521         Total memory allocated: 56397 KB
13522
13523         AFTER
13524         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13525         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13526         Total memory allocated: 55666 KB
13527
13528 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13529
13530         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13531         than the hashtable in a hashtable version
13532
13533         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13534         we always end up concating a string. This results in a huge perf
13535         loss, because many strings have to be tracked by the GC. In this
13536         patch, we first use a hashtable that works with two keys, so that
13537         the strings do not need to be concat'ed.
13538
13539         Bootstrap times:
13540         BEFORE
13541                 Run 1:   8.74 seconds
13542                 Run 2:   8.71 seconds
13543
13544         AFTER
13545                 Run 1:   8.65 seconds
13546                 Run 2:   8.56 seconds
13547
13548 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13549
13550         * Makefile: Add a new target `do-time' that does a quick and simple
13551         profile, leaving easy to parse output.
13552
13553 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13554
13555         * codegen.cs (Init): Create the dynamic assembly with 
13556         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13557
13558 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13559
13560         * support.cs: Make the PtrHashtable use only one
13561         instance of its comparer.
13562
13563 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13564
13565         * typemanager.cs: Fix lookup of GetNamespaces.
13566
13567 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13568
13569         * expression.cs: Removed redundant line.
13570
13571         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13572         ArrayLists, use for loops with bounds.  
13573
13574         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13575         arraylist.
13576
13577         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13578         arraylists, use for loop with bounds.
13579
13580         The above three changes give us a 0.071 second performance
13581         improvement out of 3.294 seconds down to 3.223.  On my machine
13582         the above changes reduced the memory usage by 1,387 KB during
13583         compiler bootstrap.
13584
13585         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13586         QualifiedIdentifiers.  Before we created a new string through
13587         concatenation, and mostly later on, the result would be
13588         manipulated by DecomposeQI through string manipulation.
13589
13590         This reduced the compiler memory usage for bootstrapping from
13591         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13592         compile times in 0.05 seconds.
13593
13594 2003-11-28  Dick Porter  <dick@ximian.com>
13595
13596         * support.cs: Do string compares with the Invariant culture.
13597
13598         * rootcontext.cs: 
13599         * gen-treedump.cs: 
13600         * expression.cs: 
13601         * driver.cs: 
13602         * decl.cs: 
13603         * codegen.cs: 
13604         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13605         the comparison is done with the Invariant culture.
13606
13607 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13608
13609         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13610         GetEnumerator method.
13611
13612         (ProbeCollectionType): Iterate starting at the most specific type
13613         upwards looking for a GetEnumerator
13614
13615         * expression.cs: Shift count can be up to 31 for int/uint and 63
13616         for long/ulong.
13617
13618 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
13619
13620         * statement.cs (Block.LookupLabel): Also look for the label on the
13621         children blocks.  Use a hash table to keep track of visited
13622         nodes. 
13623
13624         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
13625         we actually did transform the other operand, otherwise fall back
13626         to the common codepath that casts to long.
13627
13628         * cs-tokenizer.cs: Use the same code pattern as the int case.
13629         Maybe I should do the parsing myself, and avoid depending on the
13630         Parse routines to get this done.
13631
13632 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
13633
13634         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13635         which fixes bug 51347.  This time test it.
13636
13637         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
13638         attributes for example can not tell the difference between these.
13639         The difference was only a syntax feature of the language. 
13640
13641         * attribute.cs: Apply attributes to delegates.
13642
13643         * delegate.cs: Call the apply attributes method.
13644
13645 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
13646
13647         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
13648         comparing 0 vs Byte.MinValue, not the value
13649
13650         (ImplicitConversionRequired): When reporting a conversion error,
13651         use error 31 to print out the constant error instead of the
13652         simpler 29.
13653
13654         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13655         which fixes bug 51347.
13656
13657 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
13658
13659         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
13660         which fixes the -warnaserror command line option.
13661
13662 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
13663
13664         * cfold.cs (DoNumericPromotions): During constant folding of
13665         additions on UIntConstant, special case intconstants with
13666         IntConstants like we do on the expression binary operator. 
13667
13668 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
13669
13670         * convert.cs (ImplicitReferenceConversion): We were missing a case
13671         (System.Enum are not value types or class types, so we need to
13672         classify them separatedly).
13673
13674         * driver.cs: We do not support error 2007.
13675
13676 2003-11-12 Jackson Harper <jackson@ximian.com>
13677
13678         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
13679         system directory. Also use the full file name so users can
13680         libraries names mscorlib-o-tron.dll in a non system dir.
13681         
13682 2004-01-04  David Sheldon <dave-mono@earth.li>
13683
13684         * expression.cs: Added matching ")" to error message for CS0077.
13685
13686 2003-12-19  Martin Baulig  <martin@ximian.com>
13687
13688         * typemanager.cs (TypeManager.IsEqualGenericType): New public
13689         static method; see documentation in the method.
13690         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
13691
13692         * convert.cs (Convert.ImplicitReferenceConversion,
13693         Convert.ImplicitReferenceConversionExists): Add support for
13694         generic type declarations; see gen-36.cs.
13695
13696 2003-12-19  Martin Baulig  <martin@ximian.com>
13697
13698         * pending.cs (Pending.InterfaceMethod): Use
13699         `Type.IsAssignableFrom()' instead of `=='.
13700
13701 2003-12-18  Martin Baulig  <martin@ximian.com>
13702
13703         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
13704         byref types first.
13705
13706         * convert.cs (Convert.ImplicitStandardConversionExists): Use
13707         `expr_type.Equals (target_type)' instead of `=='.
13708
13709 2003-12-08  Martin Baulig  <martin@ximian.com>
13710
13711         * generics.cs (Constraints.Types): Removed.
13712         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
13713         to Type's.
13714         (Constraints.ResolveTypes): New public method; resolves the
13715         TypeExpr's to Type's.
13716         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
13717         longer takes the constraints.
13718         (TypeParameter.DefineMethod): Likewise.
13719         (TypeParameter.DefineType): New public method.  Calls
13720         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
13721         the constraints.
13722
13723 2003-12-08  Martin Baulig  <martin@ximian.com>
13724
13725         * convert.cs (Convert.ImplicitConversionStandard): Use
13726         `expr_type.Equals (target_type)' instead of `=='.
13727
13728 2003-12-08  Martin Baulig  <martin@ximian.com>
13729
13730         * typemanager.cs (TypeManager.GetReferenceType): Call
13731         `Type.MakeByRefType ()'.
13732
13733 2003-12-08  Martin Baulig  <martin@ximian.com>
13734
13735         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
13736         just has some special meaning in some situations.  For instance,
13737         it is allowed to use `where' as the name of a variable etc.
13738
13739 2003-12-04  Martin Baulig  <martin@ximian.com>
13740
13741         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13742         `Type.MakeArrayType()' for array types.
13743
13744 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
13745
13746         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
13747         debugging message.
13748
13749         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
13750         corlib to compile.
13751
13752 2003-11-16  Martin Baulig  <martin@ximian.com>
13753
13754         * codegen.cs (EmitContext.IsGeneric): Removed.
13755
13756         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
13757         ResolveGeneric() on the DeclSpace.
13758
13759 2003-11-16  Martin Baulig  <martin@ximian.com>
13760
13761         * generic.cs (TypeArguments.Resolve):
13762         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
13763         `ResolveType()' on it to get the Type.
13764
13765 2003-11-15  Martin Baulig  <martin@ximian.com>
13766
13767         * generic.cs (ConstructedType.GetInterfaces): Override this.
13768
13769 2003-11-14  Martin Baulig  <martin@ximian.com>
13770
13771         * interface.cs (Interface.DefineType): Define all type parameters
13772         before adding the interfaces we inherit.
13773
13774 2003-11-11  Martin Baulig  <martin@ximian.com>
13775
13776         * generic.cs (ConstructedType.ResolveType): Always call
13777         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
13778
13779 2003-11-10  Martin Baulig  <martin@ximian.com>
13780
13781         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
13782         (TypeManager.InitCoreTypes): Initialize them here, but instead of
13783         calling `ResolveType()' on them, directly assign their `Type'.
13784
13785 2003-11-08  Martin Baulig  <martin@ximian.com>
13786
13787         * generic.cs (ConstructedType): Override `IsClass' etc.
13788
13789 2003-11-08  Martin Baulig  <martin@ximian.com>
13790
13791         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
13792         return value and the `out parent' parameter.
13793         (TypeContainer.DefineType): Moved the CS0644 check into
13794         GetClassBases().  Don't pass the interface types to the
13795         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
13796         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
13797
13798         * ecore.cs (TypeExpr.IsAttribute): New property.
13799         (TypeExpr.GetInterfaces): New method.
13800
13801         * interface.cs (Interface.GetInterfaceTypeByName): Return a
13802         TypeExpr instead of a Type.
13803         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
13804         (Interface.DefineType): Don't pass the interface types to the
13805         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
13806         them later and then call `TypeBulider.AddInterfaceImplementation()'.
13807
13808         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
13809         instead of a `Type[]'.
13810         (TypeManager.RegisterBuilder): Likewise.
13811         (TypeManager.AddUserInterface): Likewise.
13812         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
13813         `Type[]' and also return a `TypeExpr[]'.
13814         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
13815
13816 2003-11-08  Martin Baulig  <martin@ximian.com>
13817
13818         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
13819         Expression.     
13820
13821 2003-11-08  Martin Baulig  <martin@ximian.com>
13822
13823         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
13824         TypeManager.ResolveExpressionTypes().
13825
13826         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
13827         instead of an Expression.
13828         (TypeExpr): This is now an abstract base class for `TypeExpression'.
13829         (TypeExpression): New public class; formerly known as `TypeExpr'.
13830
13831         * expression.cs (ComposedCast): Derive from TypeExpr.
13832
13833         * typemanager.cs (TypeManager.system_*_expr): These are now
13834         TypExpr's instead of Expression's.
13835         (TypeManager.ResolveExpressionTypes): New public static function;
13836         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
13837         of them.        
13838
13839 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
13840
13841         * expression.cs (New.DoResolve): Do not dereference value that
13842         might be a null return.
13843
13844         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
13845         sure that the constant value has the right type.  Fixes an
13846         unreported bug, similar to 50425.
13847
13848         * const.cs (Const.LookupConstantValue): Call
13849         ImplicitStandardConversionExists before doing a conversion to
13850         avoid havng the TypeManager.ChangeType do conversions.
13851
13852         Reduced the number of casts used
13853
13854         (Const.ChangeType): New routine to enable reuse of the constant
13855         type changing code from statement.
13856
13857         * typemanager.cs (ChangeType): Move common initialization to
13858         static global variables.
13859
13860         Fixes #50425.
13861
13862         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
13863         every value type to go through, even if it was void.  Fix that. 
13864
13865         * cs-tokenizer.cs: Use is_identifier_start_character on the start
13866         character of the define, and the is_identifier_part_character for
13867         the rest of the string.
13868
13869 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
13870
13871         * expression.cs (UnaryMutator.EmitCode): When I updated
13872         LocalVariableReference.DoResolve, I overdid it, and dropped an
13873         optimization done on local variable references.
13874
13875 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
13876
13877         * ecore.cs: Convert the return from Ldlen into an int.
13878
13879 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
13880
13881         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
13882         the accessibility, this is a special case for toplevel non-public
13883         classes (internal for instance).
13884
13885 2003-10-20  Nick Drochak <ndrochak@gol.com>
13886
13887         * ecore.cs: Fix typo and build.  Needed another right paren.
13888
13889 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
13890
13891         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
13892         `internal' case regular and protected, but not allowing protected
13893         to be evaluated later.  Bug 49840
13894
13895 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
13896
13897         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
13898         to kb.Nlast, and not the kb.nFirst to isolate the switch
13899         statement.
13900
13901         Extract the underlying type, so enumerations of long/ulong are
13902         treated like long/ulong.
13903
13904 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
13905
13906         * expression.cs (New): Overload the meaning of RequestedType to
13907         track the possible creation of the NewDelegate type, since
13908         DoResolve is invoked more than once for new constructors on field
13909         initialization.
13910
13911         See bugs: #48800 and #37014
13912
13913         * cs-parser.jay (declare_local_constants): Take an arraylist
13914         instead of a single constant.
13915
13916         (local_constant_declaration): It should take a
13917         constant_declarators, not a constant_declarator.  Fixes 49487
13918
13919         * convert.cs: Fix error report.
13920
13921 2003-10-13 Jackson Harper <jackson@ximian.com>
13922
13923         * typemanager.cs (TypeToCoreType): Add float and double this fixes
13924         bug #49611
13925         
13926 2003-11-03  Martin Baulig  <martin@ximian.com>
13927
13928         * expression.cs (ArrayAccess.GetStoreOpcode): Added
13929         `out bool has_type_arg'; if set, we need to pass the type to
13930         ig.Emit().
13931         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
13932         Stelem_Any/Ldelem_Any for generic parameters.   
13933
13934 2003-11-02  Martin Baulig  <martin@ximian.com>
13935
13936         * expression.cs (Invocation.EmitCall): Use
13937         `TypeManager.IsValueType()' to check whether it's a value type.
13938         Don't set `struct_call' when calling a method on a type parameter.
13939
13940 2003-11-02  Martin Baulig  <martin@ximian.com>
13941
13942         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
13943         and removed the TypeBuilder argument.
13944
13945         * typemanager.cs (TypeManager.IsValueType): Return
13946         `t.IsGenericParameter || t.IsValueType'.
13947
13948 2003-10-25  Martin Baulig  <martin@ximian.com>
13949
13950         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
13951         call ConstructedType.Resolve() on it.
13952
13953         * generic.cs (ConstructedType.Resolve): Set `type' on success.
13954
13955 2003-10-25  Martin Baulig  <martin@ximian.com>
13956
13957         * class.cs (TypeContainer.GetClassBases): Changed
13958         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
13959         CS8214 reporting here.
13960         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
13961         instead of a `Type' for our parent.  In case of a recursive
13962         declaration (see tests/gen-23.cs for an example), our parent is a
13963         ConstructedType and it doesn't have its type set.  So, first
13964         create our own TypeBuilder, then call constructed.Resolve() to get
13965         the parent's type and finally TypeBuilder.SetParent() it.
13966
13967         * ecore.cs (TypeExpr.Name): New public virtual property.
13968
13969         * generic.cs
13970         (ConstructedType): We're now a TypeExpr and not just an Expression.
13971         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
13972         arguments here; this is done later.
13973         (ConstructedType.Resolve): New public method to resolve the type
13974         arguments and bind them.
13975
13976 2003-10-21  Martin Baulig  <martin@ximian.com>
13977
13978         * convert.cs: Use `TypeManager.IsValueType' instead of
13979         'type.IsValueType' everywhere.
13980
13981         * typemanager.cs (TypeManager.IsValueType): Return true for type
13982         parameters.  The reason for this is that we need to box a type
13983         parameter when converting it to a reference type.
13984
13985         * cs-parser.jay: Added support for default value expressions.
13986
13987         * generics.cs (DefaultValueExpression): New public class.       
13988
13989 2003-10-17  Martin Baulig  <martin@ximian.com>
13990
13991         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
13992         TypeContainer so we can also use this for Interfaces.
13993         (TypeParameter.Resolve): Likewise.
13994
13995         * interface.cs (Interface.DefineType): Added support for generic
13996         interfaces.
13997
13998         * cs-parser.jay: Added support for generic structs and interfaces.
13999
14000 2003-10-17  Martin Baulig  <martin@ximian.com>
14001
14002         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
14003         call generic methods :-)
14004
14005 2003-10-16  Martin Baulig  <martin@ximian.com>
14006
14007         * cs-parser.jay (namespace_or_type_name): Only create a
14008         GenericMemberAccess if we actually have type arguments.
14009
14010 2003-10-13  Martin Baulig  <martin@ximian.com>
14011
14012         * class.cs (Method.Define): If we're a generic method, call
14013         TypeBuilder.DefineGenericMethod () before resolving
14014         the parameters.
14015         (MethodData): Added .ctor which takes an additional MethodBuilder
14016         argument; this is used for generic methods.
14017         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
14018         we already have a MethodBuilder.
14019
14020 2003-10-10  Martin Baulig  <martin@ximian.com>
14021
14022         * class.cs (Method): Added .ctor which takes a `GenericMethod'
14023         instead of a `DeclSpace'.  This is used for generic methods.
14024
14025         * cs-parser.jay (method_header): Added support for generic
14026         methods; create a `GenericMethod' instance and pass it to the
14027         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
14028         parameters and locals.
14029
14030         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
14031         since we already have the location.  Check whether we're a generic
14032         type declaration or a generic method and create the correct type
14033         parameter.
14034
14035         * generic.cs (TypeParameter.DefineMethod): New public method.
14036         (GenericMethod): New public class; derives from DeclSpace and is
14037         used for generic methods.       
14038
14039 2003-10-09  Martin Baulig  <martin@ximian.com>
14040
14041         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
14042         to the .ctor.
14043         (MethodCore.DoDefineParameters): Removed the TypeContainer
14044         argument; use the DeclSpace which was passed to the .ctor instead.
14045         (MethodCore.CheckParameter): Take a DeclSpace instead of a
14046         TypeContainer; we only need a DeclSpace here.
14047
14048 2003-10-09  Martin Baulig  <martin@ximian.com>
14049
14050         * class.cs (MethodData): Added additional `DeclSpace ds' argument
14051         to the .ctor.
14052         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
14053         EmitContext's .ctor.    
14054
14055 2003-10-09  Martin Baulig  <martin@ximian.com>
14056
14057         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
14058         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
14059         AsAccessible(), moved them as well.
14060
14061         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
14062
14063 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
14064
14065         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
14066         generation for >=, as spotted by Paolo, bug 48679.  
14067         Patch from David Waite.
14068
14069         * cs-tokenizer.cs: Add handling for #pragma.
14070
14071         * cs-parser.jay: Allow for both yield and yield return in the
14072         syntax.  The anti-cobolization of C# fight will go on!
14073
14074         * class.cs (TypeBuilder.DefineType): Catch error condition here
14075         (Parent.DefineType erroring out and returning null).
14076
14077         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
14078         coping with enumerations variables, we were mistakenly processing
14079         them as a regular value type instead of built-in types.  Fixes the
14080         bug #48063
14081
14082         * typemanager.cs (IsBuiltinOrEnum): New method.
14083
14084 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
14085
14086         * cs-parser.jay: Upgrade: yield now needs the return clause.
14087
14088 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
14089
14090         * cs-parser.jay : Renamed yyName to yyNames related to jay.
14091
14092 2003-09-29  Martin Baulig  <martin@ximian.com>
14093
14094         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
14095         inflated generic methods.
14096
14097         * generics.cs (ConstructedType): Distinguish between open and
14098         closed constructed types; correctly resolve the arguments.
14099
14100 2003-09-22  Martin Baulig  <martin@ximian.com>
14101
14102         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
14103         all type arguments meet their constraints.
14104
14105 2003-09-19  Martin Baulig  <martin@ximian.com>
14106
14107         * decl.cs (MemberCache.SetupCacheForInterface): Take a
14108         `MemberCache parent' argument.  Normally, an interface doesn't
14109         have a parent type except System.Object, but we use this in gmcs
14110         for generic type parameters.
14111
14112 2003-09-18  Martin Baulig  <martin@ximian.com>
14113
14114         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
14115         on `type.IsInterface'; don't check whether the type has a parent
14116         to determine whether it's an interface.
14117
14118 2003-09-17  Martin Baulig  <martin@ximian.com>
14119
14120         * generic.cs (ConstructedType.ToString): Always use `name' as the
14121         type name.
14122
14123 2003-09-15  Martin Baulig  <martin@ximian.com>
14124
14125         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
14126
14127         * generic.cs (Constraints.Resolve): New public method; this is
14128         called to resolve the constraint types and to check whether all
14129         the constraints are correct.
14130         (Constraints.Types): New public property.
14131         (TypeParameter.Resolve): New public method; resolves all the
14132         type's constraints.
14133
14134         * class.cs (TypeContainer.DefineType): Call
14135         TypeParameter.Resolve() before actually defining the type.
14136
14137 2003-09-15  Martin Baulig  <martin@ximian.com>
14138
14139         * class.cs (TypeContainer.DefineType): Added an error flag to
14140         avoid reporting duplicate CS0146's ("class definition is
14141         circular.").
14142
14143         * driver.cs (Driver.MainDriver): Abort if
14144         RootContext.ResolveTree() reported any errors.
14145
14146 2003-09-07  Martin Baulig  <martin@ximian.com>
14147
14148         * report.cs (Error, Warning): Added overloaded versions which take
14149         a `params object[] args' and call String.Format().
14150
14151 2003-09-07  Martin Baulig  <martin@ximian.com>
14152
14153         * decl.cs (DeclSpace..ctor): Don't call
14154         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
14155         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
14156         (DeclSpace.RecordDecl): New method.
14157
14158         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
14159
14160 2003-09-02  Ravi Pratap  <ravi@ximian.com>
14161
14162         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
14163         value attributes to be applied to ParameterBuilders.
14164
14165         * class.cs (MethodCore.LabelParameters): Make static and more
14166         generic so that it can be used from other places - like interface
14167         methods, for instance.
14168
14169         * interface.cs (Interface.Emit): Call LabelParameters before
14170         emitting attributes on the InterfaceMethod.
14171
14172 2003-09-07  Martin Baulig  <martin@ximian.com>
14173
14174         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
14175         if the number of type parameters doesn't match.
14176
14177 2003-09-04  Martin Baulig  <martin@ximian.com>
14178
14179         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
14180         for arrays of generic type params (ie. `!0[]').
14181
14182 2003-09-04  Martin Baulig  <martin@ximian.com>
14183
14184         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
14185         for the moment.
14186
14187 2003-09-04  Martin Baulig  <martin@ximian.com>
14188
14189         * decl.cs (DeclSpace.LookupGeneric): New method.
14190         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
14191         moment.
14192
14193         * generic.cs (TypeParameterExpr): Take a TypeParameter as
14194         argument, not just a string.
14195         (TypeParameter.Define): New public method; this is called to
14196         actually define the generic parameter; after this, you can use the
14197         new `Type' property to get the type.
14198
14199 2003-09-04  Martin Baulig  <martin@ximian.com>
14200
14201         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
14202         is now an ArrayList; initialize the result of the `TypeParameters'
14203         property here.
14204         (DeclSpace.GetGenericData): Removed.
14205         (DeclSpace.LookupGeneric): Temporarily removed; we need to
14206         implement this in a different way.
14207         (DeclSpace.GetTypeParameters): Removed; there's now a
14208         `TypeParameters' property.
14209         (DeclSpace.TypeParameters): New public property.
14210
14211         * generic.cs (Constraints): Make this class public.
14212         (TypeParameter): New public class.
14213
14214 2003-09-04  Martin Baulig  <martin@ximian.com>
14215
14216         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
14217         generic parameters.
14218
14219         * class.cs (TypeContainer.DefineType): Call
14220         TypeBuilder.DefineGenericParameter () on all generic parameters if
14221         this is a generic type.
14222
14223 2003-08-28  Martin Baulig  <martin@ximian.com>
14224
14225         * sample-stack.il: Compile this with ilasm: "ilasm /dll
14226         sample-stack.il".
14227
14228         * sample-hello.cs: Compile this with gmcs: "gmcs
14229         /r:sample-stack.dll sample-hello.cs".
14230
14231 2003-08-28  Martin Baulig  <martin@ximian.com>
14232
14233         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
14234         the parameters to the generic type.
14235
14236 2003-08-28  Martin Baulig  <martin@ximian.com>
14237
14238         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
14239
14240 2003-08-28  Martin Baulig  <martin@ximian.com>
14241
14242         * cs-parser.jay (opt_type_argument_list): Use
14243         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
14244         (primary_expression): Replace `qualified_identifier' with `type_name'.
14245         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
14246
14247         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
14248         parser to check whether it is syntactically a type parameter list;
14249         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
14250         this case.
14251
14252 2003-08-26  Martin Baulig  <martin@ximian.com>
14253
14254         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
14255         resolving aliases; fixes #47927.
14256
14257 2003-08-26  Martin Baulig  <martin@ximian.com>
14258
14259         * statement.cs (Using.DoResolve): This is internally emitting a
14260         try/finally clause, so we need to set ec.NeedExplicitReturn if we
14261         do not always return.  Fixes #47681.
14262
14263 2003-08-26  Martin Baulig  <martin@ximian.com>
14264
14265         * decl.cs (MemberCore): Moved WarningNotHiding(),
14266         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
14267         into MemberBase.
14268         (AdditionResult): Make this nested in DeclSpace.
14269         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
14270         argument; call NamespaceEntry.Define() unless we're nested in a
14271         class or struct.
14272
14273         * namespace.cs (Namespace.DefineName): New public function.  This
14274         is called from DeclSpace's .ctor to add 
14275         (Namespace.Lookup): Include DeclSpaces in the lookup.
14276
14277         * class.cs (Operator): Derive from MemberBase, not MemberCore.
14278
14279         * const.cs (Const): Derive from MemberBase, not MemberCore.     
14280
14281 2003-08-25  Martin Baulig  <martin@ximian.com>
14282
14283         * convert.cs (Convert.ExplicitReferenceConversion): When
14284         converting from an interface type to a class, unbox if the target
14285         type is a struct type.  Fixes #47822.
14286
14287 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14288
14289         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
14290         #47854.
14291
14292 2003-08-22  Martin Baulig  <martin@ximian.com>
14293
14294         * class.cs (TypeManager.DefineType): When defining a nested type,
14295         call DefineType() on our parent; fixes #47801.
14296
14297 2003-08-22  Martin Baulig  <martin@ximian.com>
14298
14299         * class.cs (MethodData.Define): While checking if a method is an
14300         interface implementation, improve the test a bit more to fix #47654.
14301
14302 2003-08-22  Martin Baulig  <martin@ximian.com>
14303
14304         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
14305         correctly; fixes #47722.
14306
14307 2003-08-22  Martin Baulig  <martin@ximian.com>
14308
14309         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
14310         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
14311
14312         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
14313
14314 2003-08-22  Martin Baulig  <martin@ximian.com>
14315
14316         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
14317         can only be assigned in static constructors.  Fixes #47161.
14318
14319 2003-08-22  Martin Baulig  <martin@ximian.com>
14320
14321         Rewrote and improved the flow analysis code.
14322
14323         * flowbranching.cs (FlowBranching): Make this class abstract.
14324         (FlowBranching.CreateBranching): New static function to create a
14325         new flow branching.
14326         (FlowBranchingBlock, FlowBranchingException): New classes.
14327         (FlowBranching.UsageVector.Type): New public readonly field.
14328         (FlowBranching.UsageVector.Breaks): Removed the setter.
14329         (FlowBranching.UsageVector.Returns): Removed the setter.
14330         (FlowBranching.UsageVector): Added Break(), Return(),
14331         NeverReachable() and Throw() methods to modify the reachability.
14332         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
14333         done by FlowBranching.Merge().
14334         (FlowBranching.UsageVector.MergeChild): New method; merges the
14335         merge result into the current vector.
14336         (FlowBranching.Merge): New abstract method to merge a branching.
14337
14338 2003-08-12  Martin Baulig  <martin@ximian.com>
14339
14340         * expression.cs (Indirection.CacheTemporaries): Create the
14341         LocalTemporary with the pointer type, not its element type.
14342
14343 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
14344
14345         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
14346         token was a keyword or not.
14347
14348         Add `error' options where an IDENTIFIER was expected;  Provide
14349         CheckToken and CheckIdentifierToken convenience error reporting
14350         functions. 
14351
14352         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
14353
14354         * decl.cs: Rename `NamespaceEntry Namespace' public field into
14355         NameSpaceEntry NameSpaceEntry.
14356
14357         (LookupInterfaceOrClass): Avoid creating a full qualified name
14358         from namespace and name: avoid doing lookups when we know the
14359         namespace is non-existant.   Use new Tree.LookupByNamespace which
14360         looks up DeclSpaces based on their namespace, name pair.
14361
14362         * driver.cs: Provide a new `parser verbose' to display the
14363         exception thrown during parsing.  This is turned off by default
14364         now, so the output of a failure from mcs is more graceful.
14365
14366         * namespace.cs: Track all the namespaces defined in a hashtable
14367         for quick lookup.
14368
14369         (IsNamespace): New method
14370
14371 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
14372
14373         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
14374         we know that we need to concatenate (full typename can never be
14375         null). 
14376
14377         * class.cs: ditto.
14378
14379         * statement.cs: Use a bitfield;  Do not initialize to null things
14380         which are done by the constructor by default.
14381
14382         * cs-parser.jay: bug fix, parameter was 4, not 3.
14383
14384         * expression.cs: Just use the property;
14385
14386         * statement.cs: No need for GetVariableInfo method.
14387
14388 2003-08-08  Martin Baulig  <martin@ximian.com>
14389
14390         * flowanalysis.cs (FlowReturns): This is now nested in the
14391         `FlowBranching' class.
14392         (MyBitVector): Moved this here from statement.cs.
14393         (FlowBranching.SiblingType): New enum type.
14394         (FlowBranching.CreateSibling): Added `SiblingType' argument.
14395
14396 2003-08-07  Martin Baulig  <martin@ximian.com>
14397
14398         * flowanalysis.cs (FlowBranchingType): This is now nested in the
14399         `FlowBranching' class and called `BranchingType'.
14400
14401 2003-08-07  Martin Baulig  <martin@ximian.com>
14402
14403         * flowanalysis.cs: Moved all the control flow analysis code into
14404         its own file.
14405
14406 2003-08-07  Martin Baulig  <martin@ximian.com>
14407
14408         * assign.cs (Assign.DoResolve): `target' must either be an
14409         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
14410         #37319.
14411
14412 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
14413
14414         * expression.cs (BinaryMethod): This kind of expression is created by the
14415         Binary class if it determines that the operator has to be handled
14416         by a method.
14417
14418         (BinaryDelegate): This kind of expression is created if we are
14419         dealing with a + or - operator on delegates.
14420
14421         (Binary): remove method, argumetns, and DelegateOperator: when
14422         dealing with methods, 
14423
14424         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
14425
14426         * statement.cs (Block): use bitfields for the three extra booleans
14427         we had in use.   Remove unused topblock parameter.
14428
14429         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
14430
14431         * assign.cs: Drop extra unneeded tests.
14432
14433 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
14434
14435         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
14436
14437         * statement.cs (Foreach): Use VariableStorage instead of
14438         LocalBuilders.   
14439
14440         * codegen.cs (VariableStorage): New class used by clients that
14441         require a variable stored: locals or fields for variables that
14442         need to live across yield.
14443
14444         Maybe provide a convenience api for EmitThis+EmitLoad?
14445
14446         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
14447         these bad boys.
14448
14449 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
14450
14451         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
14452         RemapParameterLValue): New methods that are used to turn a
14453         precomputed FieldInfo into an expression like this:
14454
14455                 instance.FieldInfo
14456
14457         The idea is to use this instead of making LocalVariableReference
14458         have more than one meaning.
14459
14460         * cs-parser.jay: Add error production to BASE.
14461
14462         * ecore.cs: Deal with TypeManager.GetField returning null, which
14463         is now a valid return value.
14464
14465         (FieldExprNoAddress): New expression for Fields whose address can
14466         not be taken.
14467
14468         * expression.cs (LocalVariableReference): During the resolve
14469         phases, create new expressions if we are in a remapping context.
14470         Remove code that dealt with remapping here.
14471
14472         (ParameterReference): same.
14473
14474         (ProxyInstance): New expression, like the `This' expression, but
14475         it is born fully resolved.  We know what we are doing, so remove
14476         the errors that are targeted to user-provided uses of `this'.
14477
14478         * statement.cs (Foreach): our variable is now stored as an
14479         Expression;  During resolution, follow the protocol, dont just
14480         assume it will return this.
14481
14482 2003-08-06  Martin Baulig  <martin@ximian.com>
14483
14484         * support.cs (SeekableStreamReader.cs): New public class.
14485
14486         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14487         SeekableStreamReader instead of the normal StreamReader.
14488
14489 2003-08-04  Martin Baulig  <martin@ximian.com>
14490
14491         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14492         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14493         deambiguate casts and delegate invocations.
14494         (parenthesized_expression): Use the new tokens to ensure this is
14495         not a cast of method invocation.
14496
14497         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14498         when reading a `)' and Deambiguate_CloseParens () was previously
14499         called.
14500
14501         * expression.cs (ParenthesizedExpression): New class.  This is
14502         just used for the CS0075 test.
14503         (Binary.DoResolve): Check for CS0075.   
14504
14505 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14506
14507         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14508         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14509         reference comparison.
14510
14511         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14512         examine the ReturnType for equality - this is necessary in the
14513         cases of implicit and explicit operators whose signature also
14514         includes the return type.
14515
14516 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14517
14518         * namespace.cs: Cache the result of the namespace computation,
14519         instead of computing it every time.
14520
14521 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14522
14523         * decl.cs: Use a global arraylist that we reuse over invocations
14524         to avoid excesive memory consumption.  Reduces memory usage on an
14525         mcs compile by one meg (45 average).
14526
14527         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14528         private, work around that.
14529
14530 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14531
14532         * literal.cs (IntLiteral): Define Zero and One static literals. 
14533
14534         * cs-parser.jay (integer_literal): use static literals to reduce
14535         memory usage for the most used literals (0, 1 and -1).  211kb
14536         reduced in memory usage.
14537
14538         Replace all calls to `new ArrayList' with `new
14539         ArrayList(4)' which is a good average number for most allocations,
14540         and also requires only 16 bytes of memory for its buffer by
14541         default. 
14542
14543         This reduced MCS memory usage in seven megabytes for the RSS after
14544         bootstrapping.
14545
14546 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14547
14548         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14549         handle params methods the correct way by forming only one
14550         applicable set with params and normal methods in them. Earlier we
14551         were looking at params methods only if we found no normal methods
14552         which was not the correct thing to do.
14553
14554         (Invocation.BetterFunction): Take separate arguments indicating
14555         when candidate and the best method are params methods in their
14556         expanded form.
14557
14558         This fixes bugs #43367 and #46199.
14559
14560         * attribute.cs: Documentation updates.
14561
14562         (CheckAttribute): Rename to CheckAttributeTarget.
14563         (GetValidPlaces): Rename to GetValidTargets.
14564
14565         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14566         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14567
14568         Fixes bug #44468.
14569
14570 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14571
14572         * codegen.cs: Compute IsGeneric correctly.
14573
14574         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14575         resolution. 
14576
14577         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14578         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14579         regressions, and I was chasing more bugs than I required.
14580
14581         * interface.cs: Use expressions for base type names (like classes
14582         and structs have been doing for a while now), and resolve that.
14583         This patch should probably go into head as well.
14584
14585         This makes it one less user of FindType.
14586
14587 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14588
14589         This compiler can not self host currently.  Need to fix that.
14590         
14591         * Makefile: compile to `gmcs.exe'
14592
14593         * driver.cs: Turn on v2 by default on gmcs.
14594
14595         * generic.cs (ConstructedType): Does no longer take a container
14596         type argument;  That will be taken care of later.
14597
14598         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14599         Use SimpleName to resolve for now, so we can continue the work on
14600         the parser, until we get Type.GetType that understands generics.
14601
14602         (ConstructedType.ToString): Implement
14603
14604         (TypeArguments.Resolve): Resolve the child expressions as types. 
14605         
14606         * cs-parser.jay: Rename interface_constraints to
14607         type_parameter_constraints
14608
14609         (namespace_or_type_name): Only use constructed types for the basic
14610         construction, we will deal with identifier<...> later.
14611
14612         (type/type_name): No longer call DecomposeQI, as
14613         namespace_or_type_name is always decoded now.
14614         
14615 2003-07-22  Ravi Pratap  <ravi@ximian.com>
14616
14617         * expression.cs (Invocation.OverloadResolve): Follow the spec more
14618         closely: we eliminate methods in base types when we have an
14619         applicable method in a top-level type.
14620
14621         Please see section 14.5.5.1 for an exact description of what goes
14622         on. 
14623
14624         This fixes bug #45127 and a host of other related to corlib compilation.
14625
14626         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
14627         array is the method corresponding to the top-level type (this is
14628         because of the changes made to icall.c) so we change this
14629         accordingly.
14630
14631         (MethodGroupExpr.Name): This too.
14632
14633         * typemanager.cs (GetElementType): New method which does the right
14634         thing when compiling corlib. 
14635
14636         * everywhere: Make use of the above in the relevant places.
14637
14638 2003-07-22  Martin Baulig  <martin@ximian.com>
14639
14640         * cs-parser.jay (invocation_expression): Moved
14641         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
14642         `cast_expression', but create a InvocationOrCast which later
14643         resolves to either an Invocation or a Cast.
14644
14645         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
14646         method; call this before EmitStatement() to make sure that this
14647         expression can be used as a statement.
14648
14649         * expression.cs (InvocationOrCast): New class; resolves to either
14650         an Invocation or a Cast.
14651
14652         * statement.cs (StatementExpression): Call ResolveStatement() on
14653         the ExpressionStatement before emitting it.
14654
14655 2003-07-21  Martin Baulig  <martin@ximian.com>
14656
14657         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
14658         `ref' and `out' attributes match; fixes #46220.
14659         (MemberAccess.ResolveMemberAccess): You can't reference a type
14660         through an expression; fixes #33180.
14661         (Indexers.GetIndexersForType): Don't return the indexers from
14662         interfaces the class implements; fixes #46502.
14663
14664 2003-07-21  Martin Baulig  <martin@ximian.com>
14665
14666         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
14667         CS0661 checks; fixes bug #30442.
14668
14669 2003-07-21  Martin Baulig  <martin@ximian.com>
14670
14671         * decl.cs (AdditionResult): Added `Error'.
14672
14673         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
14674
14675         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
14676         cs0031.cs actually work.
14677
14678  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14679  
14680         * cs-parser.jay (namespace_name): do not use
14681         namespace_or_type_name, use qualified_identifier, because
14682         namespace_or_type_name will soon return a composed expression
14683         instead of a string.
14684  
14685         (namespace_or_type_name): Instead of returning a string, now this
14686         production returns an expression.
14687  
14688         * codegen.cs (EmitContext): Setup IsGeneric property based on
14689         whether our DeclSpace is generic, our the method is generic.
14690  
14691         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
14692         the method is generic.
14693  
14694         * cs-parser.jay (type_arguments, opt_type_argument_list,
14695         type_parameters, type_parameter_list, opt_type_parameter_list,
14696         type_parameter,, opt_type_parameter_constraints_clauses,
14697         type_parameter_constraints_clauses,
14698         type_parameter_constraint_clause, type_parameter_constraint,
14699         interface_constraints): Add new production
14700  
14701         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
14702         DeclSpace is generic or not.
14703  
14704         (DeclSpace.SetParameterInfo): New routine, used to set the
14705         parameter info for a type.
14706  
14707         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
14708         returns a GenericTypeExpr
14709  
14710         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
14711         generic, lookup the generic argument.
14712  
14713         * attribute.cs: Do not allow TypeParameterExpressions in
14714         Attributes.
14715  
14716         * class.cs: Do not allow the Main method to be defined in a
14717         Generic container.
14718  
14719         * expression.cs (SizeOf): Do not allow generic types to be used as
14720         arguments to sizeof.
14721  
14722         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
14723         it: whether a type is generic or not.  Only works for types we are
14724         currently building for now.
14725         
14726 2003-07-20  Martin Baulig  <martin@ximian.com>
14727
14728         * namespace.cs: Fixed that bug which caused a crash when compiling
14729         the debugger's GUI.
14730
14731 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14732
14733         * typemanager.cs (LookupTypeReflection): Never expose types which
14734         are NotPublic, NestedPrivate, NestedAssembly, or
14735         NestedFamANDAssem.  We used to return these, and later do a check
14736         that would report a meaningful error, but the problem is that we
14737         would not get the real match, if there was a name override.
14738
14739 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
14740
14741         * namespace.cs (Namespace, Name): Do not compute the namespace
14742         name dynamically, compute it in the constructor.  This reduced
14743         memory usage by 1697 KB.
14744
14745         * driver.cs: Use --pause to pause at the end.
14746
14747 2003-07-17  Peter Williams  <peter@newton.cx>
14748
14749         * Makefile: Change the name of the test target so that it doesn't
14750         conflict with the recursive test target.
14751
14752 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
14753
14754         * expression.cs (LocalVariableReference.Emit, EmitAssign,
14755         AddressOf): Do not use EmitThis, that was wrong, use the actual
14756         this pointer.
14757
14758 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
14759
14760         * class.cs (MethodData.Define): While checking if a method is an
14761         interface implementation, improve the test: If we are not public
14762         (use new test here: use the computed MethodAttributes directly,
14763         instead of the parsed modifier flags) check if the `implementing'
14764         method comes from an interface or not.
14765
14766         * pending.cs (VerifyPendingMethods): Slightly better error
14767         message.
14768
14769         * makefile: add test target that does the mcs bootstrap.
14770
14771 2003-07-16  Ravi Pratap  <ravi@ximian.com>
14772
14773         * interface.cs (Define): Do nothing here since there are no
14774         members to populate etc. Move the attribute emission out of here
14775         since this was just totally the wrong place to put it. Attribute
14776         application happens during the 'Emit' phase, not in the 'Define'
14777         phase.
14778
14779         (Emit): Add this method and move the attribute emission here
14780
14781         * rootcontext.cs (EmitCode): Call the Emit method on interface
14782         types too.
14783
14784 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14785
14786         * expression.cs (OverloadResolve): Report error only if Location
14787         is not 'Null' which means that there was a probe going on.
14788
14789 2003-07-14  Martin Baulig  <martin@ximian.com>
14790
14791         * expression.cs (ConditionalLogicalOperator): New public class to
14792         implement user defined conditional logical operators.
14793         This is section 14.11.2 in the spec and bug #40505.
14794
14795 2003-07-14  Martin Baulig  <martin@ximian.com>
14796
14797         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
14798
14799 2003-07-14  Martin Baulig  <martin@ximian.com>
14800
14801         * codegen.cs (EmitContext.InFixedInitializer): New public field.
14802
14803         * ecore.cs (IVariable.VerifyFixed): New interface method.
14804
14805         * expression.cs (Unary.ResolveOperator): When resolving the `&'
14806         operator, check whether the variable is actually fixed.  Fixes bug
14807         #36055.  Set a variable definitely assigned when taking its
14808         address as required by the spec.
14809
14810         * statement.cs (LocalInfo.IsFixed): New field.
14811         (LocalInfo.MakePinned): Set `IsFixed' to true.
14812
14813 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14814
14815         * attribute.cs (Attribute.Resolve): While doing a Member lookup
14816         for .ctors, ensure that we only ask for members declared in the
14817         attribute type (BindingFlags.DeclaredOnly).
14818
14819         Fixes bug #43632.
14820
14821         * expression.cs (Error_WrongNumArguments): Report error 1501
14822         correctly the way CSC does.
14823
14824 2003-07-13  Martin Baulig  <martin@ximian.com>
14825
14826         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
14827         lookup on the fully qualified name, to make things like "X.X" work
14828         where "X.X" is a fully qualified type name, but we also have a
14829         namespace "X" in the using list.  Fixes #41975.
14830
14831 2003-07-13  Martin Baulig  <martin@ximian.com>
14832
14833         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
14834         function. If we're a CompoundAssign, we need to create an embedded
14835         CompoundAssign, not an embedded Assign.
14836         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
14837         Fixes #45854.
14838
14839 2003-07-13  Martin Baulig  <martin@ximian.com>
14840
14841         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
14842         work to fix bug #46088.
14843
14844 2003-07-13  Ravi Pratap <ravi@ximian.com>
14845
14846         * class.cs (Operator.Emit): Do not emit attributes here - it is
14847         taken care of by the Method class that we delegate too. This takes
14848         care of bug #45876.
14849
14850 2003-07-10  Martin Baulig  <martin@ximian.com>
14851
14852         * expression.cs (TypeOfVoid): New class.
14853         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
14854
14855 2003-07-10  Martin Baulig  <martin@ximian.com>
14856
14857         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
14858         bug #35957.
14859
14860 2003-07-10  Martin Baulig  <martin@ximian.com>
14861
14862         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
14863         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
14864
14865         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
14866
14867         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
14868
14869 2003-07-10  Martin Baulig  <martin@ximian.com>
14870
14871         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
14872         of decimal.  Fixes #42850.
14873
14874         NOTE: I also fixed the created byte blob, but this doesn't work on
14875         the MS runtime and csc never produces any byte blobs for decimal
14876         arrays.
14877
14878 2003-07-10  Martin Baulig  <martin@ximian.com>
14879
14880         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
14881         structs; fixes #32068.
14882         (Block.AddChildVariableNames): Fixed #44302.
14883
14884 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14885
14886         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
14887
14888 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14889
14890         * attribute.cs: And this test is onger needed.
14891
14892 2003-07-08  Martin Baulig  <martin@ximian.com>
14893
14894         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
14895         inaccessible types.  Fixes #36313.
14896
14897         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
14898
14899         * namespace.cs (NamespaceEntry): Create implicit entries for all
14900         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
14901         implicit entries for N1.N2 and N1.
14902
14903 2003-07-08  Martin Baulig  <martin@ximian.com>
14904
14905         Rewrote the handling of namespaces to fix a lot of the issues
14906         wrt. `using' aliases etc.
14907
14908         * namespace.cs (Namespace): Splitted this class into a
14909         per-assembly `Namespace' and a per-file `NamespaceEntry'.
14910
14911         * typemanager.cs (TypeManager.IsNamespace): Removed.
14912         (TypeManager.ComputeNamespaces): Only compute namespaces from
14913         loaded assemblies here, not the namespaces from the assembly we're
14914         currently compiling.
14915
14916 2003-07-08  Martin Baulig  <martin@ximian.com>
14917
14918         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
14919
14920 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14921
14922         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
14923         already fixed it.  
14924
14925         I thought about the memory savings here, but LookupTypeReflection
14926         is used under already very constrained scenarios.  Compiling
14927         corlib or mcs only exposes one hit, so it would not really reduce
14928         any memory consumption.
14929
14930 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14931
14932         * typemanager.cs: fixes bug #45889 by only adding public types from
14933         other assemblies to the list of known types.
14934
14935 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14936
14937         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
14938         on the type we resolved.
14939
14940 2003-07-05  Martin Baulig  <martin@ximian.com>
14941
14942         * pending.cs (PendingImplementation.ParentImplements): Don't
14943         create the proxy if the parent is abstract.
14944
14945         * class.cs (TypeContainer.DefineIndexers): Process explicit
14946         interface implementations first.  Fixes #37714.
14947
14948 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
14949
14950         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
14951         defined recursively;  but since we modify the input parameters
14952         (left is set to `this' temporarily), we reset this value if the
14953         left_is_explicit is false, which gives the original semantics to
14954         the code.  
14955
14956         * literal.cs (NullPointer): new class used to represent a null
14957         literal in a pointer context.
14958
14959         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
14960         type is a pointer, use a NullPointer object instead of a
14961         NullLiteral.   Closes 43687
14962
14963         (ExplicitConversion): Convert pointer values using
14964         the conv opcode to the proper type.
14965
14966         * ecore.cs (New): change ValueTypeVariable property into a method,
14967         that returns whether the valuetype is suitable for being used.
14968
14969         * expression.cs (Binary.DoNumericPromotions): Only return if we
14970         the int constant was a valid uint, and we can return both left and
14971         right as uints.  If not, we continue processing, to trigger the
14972         type conversion.  This fixes 39018.
14973
14974         * statement.cs (Block.EmitMeta): During constant resolution, set
14975         the CurrentBlock property on the emitcontext, so that we resolve
14976         constants propertly.
14977
14978 2003-07-02  Martin Baulig  <martin@ximian.com>
14979
14980         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
14981         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
14982
14983         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
14984         than emitting it here.
14985
14986         * statement.cs: Fixed some more flow analysis bugs.
14987
14988 2003-07-02  Martin Baulig  <martin@ximian.com>
14989
14990         * class.cs (MethodData.Define): When implementing interface
14991         methods, set Final unless we're Virtual.
14992
14993         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
14994         check work for interface methods.
14995
14996 2003-07-01  Martin Baulig  <martin@ximian.com>
14997
14998         * ecore.cs (EmitContext.This): Replaced this property with a
14999         GetThis() method which takes a Location argument.  This ensures
15000         that we get the correct error location for a CS0188.
15001
15002 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
15003
15004         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
15005         ImplicitStandardConversion.
15006
15007         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
15008
15009 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
15010
15011         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
15012         optimization.
15013
15014 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
15015
15016         * class.cs (Constructor.Define): Turn off initlocals for unsafe
15017         constructors.
15018
15019         (MethodData.Define): Turn off initlocals for unsafe methods.
15020
15021 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
15022
15023         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
15024         complete;  Fixes #37521.
15025
15026         * delegate.cs: Use Modifiers.TypeAttr to compute the
15027         TypeAttributes, instead of rolling our own.  This makes the flags
15028         correct for the delegates.
15029
15030 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
15031
15032         * class.cs (Constructor.Define): Set the private flag for static
15033         constructors as well.
15034
15035         * cs-parser.jay (statement_expression): Set the return value to
15036         null, to avoid a crash when we catch an error.
15037
15038 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
15039
15040         * cs-parser.jay: Applied patch from Jackson that adds support for
15041         extern and unsafe modifiers to destructor declarations.
15042
15043         * expression.cs: Report error 21 if the user is trying to index a
15044         System.Array.
15045
15046         * driver.cs: Add an error message, suggested by the bug report.
15047
15048         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
15049         if we do not have a ": this ()" constructor initializer.  Fixes 45149
15050
15051 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
15052
15053         * namespace.cs: Add some information to reduce FAQs.
15054
15055 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
15056
15057         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
15058         underlying enumeration types.  Fixes #43915.
15059
15060         * expression.cs: Treat ushort/short as legal values to be used in
15061         bitwise operations.
15062
15063 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
15064
15065         * delegate.cs: transfer custom attributes for paramenters from
15066         the delegate declaration to Invoke and BeginInvoke.
15067
15068 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
15069
15070         * attribute.cs: handle custom marshalers and emit marshal info
15071         for fields, too.
15072
15073 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
15074
15075         * makefile.gnu: Added anonymous.cs to the compiler sources.
15076
15077 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
15078
15079         * iterators.cs: Change the name of the proxy class to include two
15080         underscores.
15081
15082         * cs-parser.jay: Update grammar to include anonymous methods.
15083
15084         * anonymous.cs: new file.
15085
15086 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
15087
15088         * class.cs (Field.Define): Add missing test for pointers and
15089         safety. 
15090
15091 2003-05-27  Ravi Pratap  <ravi@ximian.com>
15092
15093         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
15094         we use the stobj opcode.
15095
15096         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
15097         since it wasn't the correct fix. 
15098
15099         It still is puzzling that we are required to use stobj for IntPtr
15100         which seems to be a ValueType.
15101
15102 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
15103
15104         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
15105         during regular simple name resolution.   Now, the trick is that
15106         instead of returning for processing the simplename, we do a
15107         TypeManager.LookupType (ie, a rooted lookup as opposed to a
15108         contextual lookup type).   If a match is found, return that, if
15109         not, return for further composition.
15110
15111         This fixes long-standing 30485.
15112
15113         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15114         using the address to initialize an object, do an Stobj instead of
15115         using the regular Stelem.
15116
15117         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
15118         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
15119         Because if we are a BaseIndexerAccess that value will be true.
15120         Fixes 43643.
15121
15122         * statement.cs (GotoCase.Resolve): Return after reporting an
15123         error, do not attempt to continue. 
15124
15125         * expression.cs (PointerArithmetic.Emit): If our operand is a
15126         long, convert our constants to match the operand before
15127         multiplying.  Convert to I type before adding.   Fixes 43670.
15128
15129 2003-05-14  Ravi Pratap  <ravi@ximian.com>
15130
15131         * enum.cs (ImplicitConversionExists) : Rename to
15132         ImplicitEnumConversionExists to remove ambiguity. 
15133
15134         * ecore.cs (NullCast): New type of cast expression class which
15135         basically is very similar to EmptyCast with the difference being
15136         it still is a constant since it is used only to cast a null to
15137         something else
15138         (eg. (string) null)
15139
15140         * convert.cs (ImplicitReferenceConversion): When casting a null
15141         literal, we return a NullCast.
15142
15143         * literal.cs (NullLiteralTyped): Remove - I don't see why this
15144         should be around anymore.
15145
15146         The renaming (reported was slightly wrong). Corrections:
15147
15148         ConvertImplicitStandard -> ImplicitConversionStandard
15149         ConvertExplicitStandard -> ExplicitConversionStandard
15150
15151         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
15152         before passing them in !
15153
15154         * convert.cs (ImplicitConversionStandard): When comparing for
15155         equal expr and target types, ensure that expr is not a
15156         NullLiteral.
15157
15158         In general, we must not be checking (expr_type ==
15159         target_type) in the top level conversion methods
15160         (ImplicitConversion, ExplicitConversion etc). This checking is
15161         done in the methods that they delegate to.
15162
15163 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
15164
15165         * convert.cs: Move Error_CannotConvertType,
15166         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
15167         ImplicitNumericConversion, ImplicitConversionExists,
15168         ImplicitUserConversionExists, StandardConversionExists,
15169         FindMostEncompassedType, FindMostSpecificSource,
15170         FindMostSpecificTarget, ImplicitUserConversion,
15171         ExplicitUserConversion, GetConversionOperators,
15172         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
15173         TryImplicitIntConversion, Error_CannotConvertImplicit,
15174         ConvertImplicitRequired, ConvertNumericExplicit,
15175         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
15176         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
15177         its own file.
15178
15179         Perform the following renames:
15180
15181         StandardConversionExists -> ImplicitStandardConversionExists
15182         ConvertImplicit -> ImplicitConversion
15183         ConvertImplicitStandard -> ImplicitStandardConversion
15184         TryImplicitIntConversion -> ImplicitIntConversion
15185         ConvertImplicitRequired -> ImplicitConversionRequired
15186         ConvertNumericExplicit -> ExplicitNumericConversion
15187         ConvertReferenceExplicit -> ExplicitReferenceConversion
15188         ConvertExplicit -> ExplicitConversion
15189         ConvertExplicitStandard -> ExplicitStandardConversion
15190
15191 2003-05-19  Martin Baulig  <martin@ximian.com>
15192
15193         * statement.cs (TypeInfo.StructInfo): Made this type protected.
15194         (TypeInfo): Added support for structs having structs as fields.
15195
15196         * ecore.cs (FieldExpr): Implement IVariable.
15197         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
15198         VariableInfo for the field.
15199
15200 2003-05-18  Martin Baulig  <martin@ximian.com>
15201
15202         * expression.cs (This.DoResolve): Report a CS0027 if we're
15203         emitting a field initializer.
15204
15205 2003-05-18  Martin Baulig  <martin@ximian.com>
15206
15207         * expression.cs (This.ResolveBase): New public function.
15208         (This.DoResolve): Check for CS0188.
15209
15210         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
15211         This.Resolve().
15212
15213         * ecore.cs (MethodGroupExpr.DoResolve): Set the
15214         `instance_expression' to null if we don't have any non-static
15215         methods.
15216
15217 2003-05-18  Martin Baulig  <martin@ximian.com>
15218
15219         Reworked the way how local variables and parameters are handled by
15220         the flow analysis code.
15221
15222         * statement.cs (TypeInfo, VariableMap): New public classes.
15223         (VariableInfo): New public class.  This is now responsible for
15224         checking whether a variable has been assigned.  It is used for
15225         parameters and local variables.
15226         (Block.EmitMeta): Take the InternalParameters as argument; compute
15227         the layout of the flow vectors here.
15228         (Block.LocalMap, Block.ParameterMap): New public properties.
15229         (FlowBranching): The .ctor doesn't get the InternalParameters
15230         anymore since Block.EmitMeta() now computes the layout of the flow
15231         vector.
15232         (MyStructInfo): This class is now known as `StructInfo' and nested
15233         in `TypeInfo'; we don't access this directly anymore.
15234
15235         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
15236         property and removed IsAssigned(), IsFieldAssigned(),
15237         SetAssigned() and SetFieldAssigned(); we now call them on the
15238         VariableInfo so we don't need to duplicate this code everywhere.
15239
15240         * expression.cs (ParameterReference): Added `Block block' argument
15241         to the .ctor.
15242         (LocalVariableReference, ParameterReference, This): The new
15243         VariableInfo class is now responsible for all the definite
15244         assignment stuff.
15245
15246         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
15247         IsParameterAssigned, SetParameterAssigned): Removed.
15248
15249 2003-05-18  Martin Baulig  <martin@ximian.com>
15250
15251         * typemanager.cs (InitCoreTypes): Try calling
15252         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
15253         the 3-args-version.  Corlib now also needs our `void_type'.
15254         (GetMethod): Added overloaded version which takes an optional
15255         `bool report_errors' to allow lookups of optional methods.
15256
15257 2003-05-12  Martin Baulig  <martin@ximian.com>
15258
15259         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
15260         only used for locals and not for parameters.
15261
15262 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
15263
15264         * support.cs (InternalParameters.ParameterType): Return the
15265         ExternalType of the parameter.
15266
15267         * parameter.cs (Parameter.ExternalType): drop the two arguments,
15268         they were unused.
15269
15270 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
15271
15272         * class.cs (MethodData.Define): Do not set the `newslot' on
15273         interface members, if they are also flagged as "override".
15274
15275         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
15276         better code for ++i and i++.  This only works for static fields
15277         and local variables.
15278
15279         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
15280         want to pull the DeclSpace out of the builder_to_declspace instead
15281         of the TypeBuilder (like in TypeContainer.FindMembers).
15282
15283         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
15284         instead of LookupTypeContainer.  Fixes the crash on .NET for
15285         looking up interface members.
15286
15287         * const.cs: Create our own emit context during the Definition
15288         stage, so that constants are evaluated in the proper context, when
15289         a recursive definition happens.
15290
15291 2003-05-11  Martin Baulig  <martin@ximian.com>
15292
15293         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
15294         new block for a switch section.
15295         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
15296         the adding/lookup in the switch block.  Fixes #39828.
15297
15298 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
15299
15300         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
15301         functionality: I needed to convert the data after I had performed
15302         the add/sub operation into the operands type size.
15303
15304         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
15305         pass the type for the box operation, otherwise the resulting
15306         object would have been of type object.
15307
15308         (BoxedCast): Add constructor to specify the type to box as.
15309
15310 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
15311
15312         * iterators.cs: I was reusing the `count' variable inadvertently,
15313         take steps to not allow this to happen.
15314
15315 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
15316
15317         * attribute.cs (Attribute.Resolve): Params attributes are encoded
15318         by creating an array at the point where the params starts and
15319         putting all those arguments there, then adjusting the size of the
15320         array.
15321
15322 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
15323
15324         * expression.cs (New.AddressOf): Implement interface
15325         IMemoryLocation.  This is used when the `new' operator is used in
15326         the context of an invocation to a method on a value type.
15327
15328         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
15329         example. 
15330
15331         * namespace.cs: Also check the using aliases here.
15332
15333         * driver.cs: Move the test for using validity after the types have
15334         been entered, so we do a single pass that also includes the using
15335         aliases. 
15336
15337         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
15338         in the regular case.   CreateSiblingForFinally is doing extra
15339         error checking.
15340
15341         * attribute.cs (GetAttributeArgumentExpression): Store the result
15342         on an out value, and use the return value to indicate failure
15343         instead of using null (which is a valid return for Constant.GetValue).
15344
15345         * statement.cs: Perform the analysis flow for the increment
15346         portion after the statement, because this will be the real flow of
15347         execution.  Fixes #42385
15348
15349         * codegen.cs (EmitContext.EmitArgument,
15350         EmitContext.EmitStoreArgument): New helper functions when the
15351         RemapToProxy flag is set.
15352
15353         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
15354         function.
15355
15356         Add support for remapping parameters. 
15357
15358         * iterators.cs: Propagate parameter values;  Store parameter
15359         values in the proxy classes.
15360
15361 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
15362
15363         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
15364         need a proxy reference;  I do not know what I was thinking
15365
15366         * cs-parser.jay (constructor_initializer): catch another error,
15367         and display nice message.
15368
15369         (field_declaration): catch void field declaration
15370         to flag a better error. 
15371
15372         * class.cs (MemberBase.CheckBase): Report an error instead of a
15373         warning if a new protected member is declared in a struct. 
15374         (Field.Define): catch the error of readonly/volatile.
15375
15376         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
15377
15378         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
15379         volatile variable is taken
15380
15381 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
15382
15383         * statement.cs (Fixed.Resolve): Report an error if we are not in
15384         an unsafe context.
15385
15386 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
15387
15388         * typemanager.cs: reuse the code that handles type clashes for
15389         delegates and enumerations.
15390
15391         * class.cs (Report28): Always report.
15392
15393         * expression.cs (EncodeAsAttribute): Allow nulls here.
15394
15395 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
15396
15397         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
15398         the functionality for testing whether an expression is valid for
15399         an attribute here.  Also handle the case of arrays of elements
15400         being stored. 
15401
15402         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
15403         encoding a linear array into an array of objects that are suitable
15404         to be passed to an CustomAttributeBuilder.
15405
15406         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
15407
15408         * ecore.cs: (FieldExpr): Handle field remapping here.
15409
15410         * iteratators.cs: Pass the instance variable (if the method is an
15411         instance method) to the constructors, so we can access the field
15412         variables on the class.
15413
15414         TODO: Test this with structs.  I think the THIS variable on
15415         structs might have to be a pointer, and not a refenrece
15416
15417 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
15418
15419         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
15420         local variables to fields in a proxy class.
15421
15422         * iterators.cs (PopulateProxy): Rename our internal fields to
15423         <XXX>.  
15424         Create a <THIS> field if we are an instance method, so we can
15425         reference our parent container variables.
15426         (MapVariable): Called back from the EmitContext code to enter a
15427         new variable to field mapping into the proxy class (we just create
15428         a FieldBuilder).
15429
15430         * expression.cs
15431         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
15432         for using the remapped locals to fields.
15433
15434         I placed the code here, because that gives the same semantics to
15435         local variables, and only changes the Emit code.
15436
15437         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
15438         statements inside iterators.
15439         (VariableInfo): Add a FieldBuilder for the cases when we are
15440         remapping local variables to fields in a proxy class
15441
15442         * ecore.cs (SimpleNameResolve): Avoid testing two times for
15443         current_block != null.
15444
15445         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
15446         not cope with strings, as it has been moved to the
15447         TableSwitchEmit.  Fixed bug in switch generation.
15448
15449         * expression.cs (New.DoResolve): Provide more context for the user
15450         when reporting an error.
15451
15452         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
15453         pointers. 
15454
15455         * expression.cs (MemberAccess.DoResolve): When we get a type back,
15456         check the permissions for it.  Note than in a type-resolution
15457         context the check was already present in DeclSpace.ResolveType,
15458         but was missing from the MemberAccess.
15459
15460         (ArrayCreation.CheckIndices): warn if the user has
15461         more nested levels of expressions, but there are no more
15462         dimensions specified.  Avoids crash on bug 41906.
15463
15464 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
15465
15466         * statement.cs (Block): replace Implicit bool, for a generic
15467         flags.   
15468         New flag: `Unchecked'.  This is used during the EmitMeta phase
15469         (which is out-of-line with the regular Resolve/Emit process for a
15470         statement, as this is done ahead of time, but still gets a chance
15471         to call constant resolve).
15472
15473         (Block.Flags): new enum for adding a new flag.
15474
15475         (Block.EmitMeta): track the state of unchecked.
15476
15477         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
15478         to enable constant resolution to work there as well.
15479
15480 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
15481
15482         * typemanager.cs (ienumerable_type): Also look up
15483         System.Collections.IEnumerable. 
15484
15485 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
15486
15487         TODO: Test more than one conditional per method.
15488
15489         * class.cs (Indexer.Define): Report the location where the user is
15490         referencing the unsupported feature.
15491
15492         (MethodData): Overload the use of `conditionals' to
15493         minimize the creation of needless ArrayLists.   This saves roughly
15494         212kb on my machine.
15495
15496         (Method): Implement the new IIteratorContainer interface.
15497         (Method.SetYields): Implement the method by setting the ModFlags
15498         to contain METHOD_YIELDS.
15499
15500         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15501         which just got set to null.
15502
15503         * iterators.cs: New file.
15504
15505         (Yield, YieldBreak): New statements.
15506
15507         * statement.cs (Return.Resolve): Flag an error if we are used in
15508         an iterator method.
15509
15510         * codegen.cs (InIterator): New flag set if the code is being
15511         compiled in an iterator method.
15512
15513         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15514         internal modifier, and we just use it to avoid adding extra
15515         fields, as this is seldom used.  
15516
15517         * cs-parser.jay: Add yield_statement (yield and yield break).
15518
15519         * driver.cs: New flag -v2 to turn on version 2 features. 
15520
15521         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15522         hashtable when v2 is enabled.
15523
15524 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15525
15526         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15527         there is already a namespace defined with this name.
15528
15529         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15530         people upgraded their corlibs.
15531
15532         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15533         always use fully qualified types, no need to use the compiler
15534         front end.
15535
15536         (TypeManager.IsNamespace): Use binarysearch.
15537
15538         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15539         AddDelegate): I did not quite use the new IsValid API properly: I
15540         have to pass the short-name and the fullname.  I was passing only
15541         the basename instead of the fullname sometimes. 
15542
15543         (TypeContainer.DefineType): call NamespaceClash.
15544
15545         * interface.cs (Interface.DefineType): use NamespaceClash before
15546         defining the type.
15547
15548         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15549         defining the type.
15550
15551         * enum.cs: (Enum.DefineType): use NamespaceClash before
15552         defining the type.
15553
15554         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15555         speed increase.  First, use the negative_hits cache when we get a
15556         negative.  Second, add the type with its full original name
15557         instead of the new . and + encoded name (reflection uses + to
15558         separate type from a nested type).  Use LookupTypeReflection
15559         directly which bypasses the type->name hashtable (that we already
15560         know does not contain the type.
15561
15562         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15563         location/container type. 
15564
15565         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15566
15567 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15568
15569         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15570
15571         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15572         method is being referenced in the method group from a static
15573         context, and report error 120 if so.
15574
15575         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15576         Error118. 
15577
15578         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15579         is created, we create the A namespace).
15580
15581         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15582         Fixes #41591
15583
15584 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15585
15586         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15587         invocation to ModuleBuilder.GetType with the same values will
15588         return a new type instance, so we need to cache its return
15589         values. 
15590
15591         * expression.cs (Binary.ResolveOperator): Only allow the compare
15592         operators on enums if they are of the same type.
15593
15594         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15595         types of ValueType on their own case.  Before we were giving them
15596         the same treatment as objects.
15597
15598         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15599         fullname.  Short name is used to compare against container name.
15600         Fullname is used to check against defined namespace names.
15601
15602         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15603         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15604
15605         (Method.CheckBase): Call parent.
15606         (MemberBase.CheckBase): Check for protected members on sealed
15607         classes.
15608         (PropertyBase.CheckBase): Call parent.
15609         (Field.Define): Call parent.
15610
15611         * report.cs: Negative error codes are now mapped to 8000 - code,
15612         so that the display is render more nicely.
15613
15614         * typemanager.cs: Do not use try/catch, instead report a regular
15615         error. 
15616
15617         (GetPointerType, GetReferenceType): These methods provide
15618         mechanisms to obtain the T* and T& from a T.  We had the code
15619         previously scattered around the code base, and it also used
15620         TypeManager.LookupType that would go through plenty of caches.
15621         This one goes directly to the type source.
15622
15623         In some places we did the Type.GetType followed by
15624         ModuleBuilder.GetType, but not in others, so this unifies the
15625         processing as well.
15626
15627         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
15628         statements now that we have namespace information.
15629
15630         * typemanager.cs (IsNamespace): New method, returns whether the
15631         string presented is a namespace or not.
15632
15633         (ComputeNamespaces): New public entry point, computes the list of
15634         available namespaces, using the GetNamespaces API call in Mono, or
15635         the slower version in MS.NET.   
15636
15637         Now before we start the semantic analysis phase, we have a
15638         complete list of namespaces including everything that the user has
15639         provided.
15640
15641         Deleted old code to cache namespaces in .nsc files.
15642
15643 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
15644
15645         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
15646         class/struct location definition Location for the implicit
15647         constructor location.
15648
15649         (Operator.Define): Use the location of the operator for the
15650         implicit Method definition.
15651
15652         (Constructor.Emit): use the constructor location for the implicit
15653         base initializer constructor.
15654
15655         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
15656         and the Expression class now contains two new methods:
15657
15658         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
15659         isolate type lookup from the rest of the resolution process.
15660
15661         Since we use Expressions to hold type definitions due to the way
15662         we parse the input we have historically overloaded Resolve to
15663         perform the Type lookups if a special flag is passed.  Now this is
15664         eliminated and two methods take their place. 
15665
15666         The differences in the two methods between xStep and xTerminal is
15667         that xStep is involved in our current lookup system that uses
15668         SimpleNames to compose a name, while xTerminal is used just to
15669         catch the case where the simplename lookup failed.
15670
15671 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
15672
15673         * expression.cs (ResolveMemberAccess): Remove redundant code.
15674         TypeExpr expressions are always born fully resolved.
15675
15676         * interface.cs (PopulateMethod): Do not lookup the types twice.
15677         We were doing it once during SemanticAnalysis and once during
15678         PopulateMethod.
15679
15680         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
15681         in local variable type definitions, were being returned as a
15682         SimpleName (we decomposed everything into a string), that is
15683         because primary_expression was being used instead of a type in the
15684         grammar (reduce/reduce conflicts).
15685
15686         The part that was wrong is that we converted the expression into a
15687         string (an oversimplification in one hand, compounded with primary
15688         expressions doing string concatenation).
15689
15690         So things like:
15691
15692         A.B.C [] x;
15693
15694         Would return "A.B.C[]" as a SimpleName.  This stopped things like
15695         using clauses from working on this particular context.  And a type
15696         was being matched directly against "A.B.C[]".
15697
15698         We now use the correct approach, and allow for ComposedCast to be
15699         part of the unary expression.  So the "A.B.C []" become a composed
15700         cast of "A.B.C" (as a nested group of MemberAccess with a
15701         SimpleName at the end) plus the rank composition "[]". 
15702
15703         Also fixes 35567
15704
15705 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
15706
15707         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
15708         for the access level checking.
15709
15710         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
15711         `TypeContainer container', because I kept getting confused when I
15712         was debugging this code.
15713
15714         * expression.cs (Indexers): Instead of tracking getters/setters,
15715         we now track them in parallel.  We create one arraylist less, but
15716         most importantly it is possible now for the LValue code to find a
15717         matching get for a set.
15718
15719         (IndexerAccess.DoResolveLValue): Update the code.
15720         GetIndexersForType has been modified already to extract all the
15721         indexers from a type.  The code assumed it did not.
15722
15723         Also make the code set the correct return type for the indexer.
15724         This was fixed a long time ago for properties, but was missing for
15725         indexers.  It used to be void_type.
15726
15727         (Binary.Emit): Test first for doubles instead of
15728         floats, as they are more common.
15729
15730         (Binary.EmitBranchable): Use the .un version of the branch opcodes
15731         when dealing with floats and the <=, >= operators.  This fixes bug
15732         #39314 
15733
15734         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
15735         to load the array value by emitting a load on the foreach variable
15736         type.  This was incorrect.  
15737
15738         We now emit the code to load an element using the the array
15739         variable type, and then we emit the conversion operator.
15740
15741         Fixed #40176
15742
15743 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
15744
15745         * attribute.cs: Avoid allocation of ArrayLists in the common case.
15746
15747 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
15748
15749         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
15750         test for protection before we test for signatures. 
15751
15752         (MethodSignature.ToString): implement.
15753
15754         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
15755         to the case where we reduced into a LongConstant.
15756
15757         * decl.cs (CheckAccessLevel): If the type is an array, we can not
15758         depend on whether the information is acurrate, because the
15759         Microsoft runtime will always claim that the array type is public,
15760         regardless of the real state.
15761
15762         If the type is a pointer, another problem happens: the type is
15763         reported as non-public in Microsoft.  
15764
15765         In both cases we have to call CheckAccessLevel recursively with
15766         the underlying type as the argument to be tested.
15767
15768 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
15769
15770         * assign.cs (Assign.Emit): If we are dealing with a compound
15771         assignment expression, we should use the code path that stores the
15772         intermediate result in a temporary value.  This fixes #40903.
15773
15774         *expression.cs (Indirection.ToString): Provide ToString method for
15775         debugging. 
15776
15777 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
15778
15779         * class.cs: Null out fields holding references to Block objects so
15780         they can be garbage collected.
15781
15782         * expression.cs (OverloadResolve): Remove unused local.
15783
15784 2003-04-07  Martin Baulig  <martin@ximian.com>
15785
15786         * codegen.cs (EmitContext.CurrentFile): New public field.
15787         (EmitContext.Mark): Use the CurrentFile to check whether the
15788         location is in the correct file.
15789         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
15790
15791 2003-04-07  Martin Baulig  <martin@ximian.com>
15792
15793         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
15794
15795         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
15796         location.  [FIXME: The location argument which gets passed to this
15797         method is sometimes wrong!]
15798
15799 2003-04-07  Nick Drochak <ndrochak@gol.com>
15800
15801         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
15802
15803 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
15804
15805         * expression.cs (Indirection.EmitAssign): We were using the
15806         temporary, but returning immediately instead of continuing the
15807         EmitAssing flow.
15808
15809 2003-04-06  Martin Baulig  <martin@ximian.com>
15810
15811         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
15812         if it's a nested child, but also deriving from the outer class.
15813         See test 190.cs.
15814
15815         * typemanager.cs (IsNestedChildOf): Make this work if it's a
15816         nested child, but also deriving from the outer class.  See
15817         test-190.cs.
15818         (FilterWithClosure): We may access private members of the outer
15819         class if we're a nested child and deriving from the outer class.
15820         (RealMemberLookup): Only set `closure_private_ok' if the
15821         `original_bf' contained BindingFlags.NonPublic.
15822
15823 2003-04-05  Martin Baulig  <martin@ximian.com>
15824
15825         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
15826         probe if its a type parameter, and if so, flag an error.
15827
15828         * decl.cs: Move here the SetParameterInfo code from class.cs.
15829         Handle IsGeneric here.
15830
15831         Handle a variety of errors in the parameter info definition.
15832
15833         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
15834         type parameters here.
15835
15836         * cs-parser.jay (class_declaration): report errors for parameters
15837         here as well.
15838
15839 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
15840
15841         * generic.cs: New file, contains support code for generics.
15842
15843         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
15844         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
15845
15846         Update parser for the above removals.
15847
15848         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
15849         now taken care of in the parser.
15850
15851 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
15852
15853         * class.cs (Event.Define): Do not allow abstract events to have
15854         initializers. 
15855
15856 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
15857
15858         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
15859         block in event declarations.
15860
15861         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
15862         value type, get its address.
15863
15864         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
15865         leaving a class on the stack instead of a boolean value (int
15866         0/1).  Change the code so we compare against null, and then the
15867         result against zero.
15868
15869         * class.cs (TypeContainer.GetClassBases): We were checking for the
15870         parent class being sealed too late.
15871
15872         * expression.cs (Binary.Emit): For <= and >= when dealing with
15873         floating point values, use cgt.un and clt.un instead of cgt and
15874         clt alone.
15875
15876 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
15877
15878         * statement.cs: Apply the same optimization as MS: skip the 
15879         GetEnumerator returning an IEnumerator, and use the one returning a 
15880         CharEnumerator instead. This allows us to avoid the try-finally block 
15881         and the boxing.
15882
15883 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
15884
15885         * cs-parser.jay: Attributes cannot be applied to
15886                          namespaces. Fixes #40473
15887
15888 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15889
15890         * class.cs:
15891         (Add*): check if the name is valid using the full name for constants,
15892         fields, properties and events.
15893
15894 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
15895
15896         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
15897         char constants to be part of the enumeration.
15898
15899         * expression.cs (Conditional.DoResolve): Add support for operator
15900         true. Implements the missing functionality from 14.12
15901
15902         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
15903         operator true/false as required by the spec.
15904
15905         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
15906         implicit conversion to boolean.
15907
15908         * statement.cs (Statement.ResolveBoolean): A boolean expression is
15909         also one where the type implements `operator true'. 
15910
15911         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
15912         get an expression that will invoke operator true based on an
15913         expression.  
15914
15915         (GetConversionOperators): Removed the hack that called op_True
15916         here.  
15917
15918         (Expression.ResolveBoolean): Move this from Statement.
15919
15920 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
15921
15922         * ecore.cs (FieldExpr): do not allow initialization of initonly
15923         fields on derived classes
15924
15925 2003-03-13  Martin Baulig  <martin@ximian.com>
15926
15927         * statement.cs (Block.Emit): Call ig.BeginScope() and
15928         ig.EndScope() when compiling with debugging info; call
15929         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
15930
15931 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
15932
15933         * expression.cs (Indexers): Do not construct immediately, allow
15934         for new members to be appended as we go.  Fixes 38143
15935
15936 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15937
15938         * expression.cs: save/restore context when resolving an unchecked
15939         expression.
15940
15941 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
15942
15943         * cfold.cs: Catch division by zero in modulus operator during
15944         constant folding.
15945
15946 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
15947
15948         * interface.cs (Interface.DefineMembers): Avoid defining members
15949         twice. 
15950
15951 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
15952
15953         * driver.cs: handle the +/- options for -noconfig
15954
15955         * statement.cs (Unckeched.Resolve): Also track the state of
15956         unchecked in the Resolve phase.
15957
15958 2003-02-27  Martin Baulig  <martin@ximian.com>
15959
15960         * ecore.cs (Expression.MemberLookup): Don't create a
15961         MethodGroupExpr for something which is not a method.  Fixes #38291.
15962
15963 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
15964
15965         * class.cs (MemberBase.CheckParameters): Also check that the type
15966         is unmanaged if it is a pointer.
15967
15968         * expression.cs (SizeOf.Resolve): Add location information.
15969
15970         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
15971         a managed type is declared.
15972
15973         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
15974         parameter modifiers as well.  Fixes bug 38606
15975
15976         * class.cs: Very sad.  Am backing out the speed up changes
15977         introduced by the ArrayList -> Array in the TypeContainer, as they
15978         were not actually that much faster, and introduced a bug (no error
15979         reports on duplicated methods).
15980
15981         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
15982         source first, this will guarantee that we have a valid expression
15983         before calling in lower levels functions that will require a
15984         resolved object.  Then use this original_source in the
15985         target.ResolveLValue instead of the original source that was
15986         passed to us.
15987
15988         Another change.  Use target.Resolve instead of LValueResolve.
15989         Although we are resolving for LValues, we will let the Assign code
15990         take care of that (it will be called again from Resolve).  This
15991         basically allows code like this:
15992
15993         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
15994         class Y { void A (X x) { x [0] += o; }
15995
15996         The problem was that the indexer was trying to resolve for
15997         set_Item (idx, object o) and never finding one.  The real set_Item
15998         was set_Item (idx, X).  By delaying the process we get the right
15999         semantics. 
16000
16001         Fixes bug 36505
16002
16003 2003-02-23  Martin Baulig  <martin@ximian.com>
16004
16005         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
16006         while calling DoEmit ().
16007
16008         * codegen.cs (EmitContext.Mark): Don't mark locations in other
16009         source files; if you use the #line directive inside a method, the
16010         compiler stops emitting line numbers for the debugger until it
16011         reaches the end of the method or another #line directive which
16012         restores the original file.
16013
16014 2003-02-23  Martin Baulig  <martin@ximian.com>
16015
16016         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
16017
16018 2003-02-23  Martin Baulig  <martin@ximian.com>
16019
16020         * statement.cs (Block.AddChildVariableNames): We need to call this
16021         recursively, not just for our immediate children.
16022
16023 2003-02-23  Martin Baulig  <martin@ximian.com>
16024
16025         * class.cs (Event.Define): Always make the field private, like csc does.
16026
16027         * typemanager.cs (TypeManager.RealMemberLookup): Make events
16028         actually work, fixes bug #37521.
16029
16030 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
16031
16032         * delegate.cs: When creating the various temporary "Parameters"
16033         classes, make sure that we call the ComputeAndDefineParameterTypes
16034         on those new parameters (just like we do with the formal ones), to
16035         allow them to be resolved in the context of the DeclSpace.
16036
16037         This fixes the bug that Dick observed in Bugzilla #38530.
16038
16039 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
16040
16041         * expression.cs (ResolveMemberAccess): When resolving a constant,
16042         do not attempt to pull a constant if the value was not able to
16043         generate a valid constant.
16044
16045         * const.cs (LookupConstantValue): Do not report more errors than required.
16046
16047 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16048
16049         * expression.cs: fixes bug #38328.
16050
16051 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16052
16053         * class.cs: Changed all the various members that can be part of a
16054         class from being an ArrayList to be an Array of the right type.
16055         During the DefineType type_list, interface_list, delegate_list and
16056         enum_list are turned into types, interfaces, delegates and enums
16057         arrays.  
16058
16059         And during the member population, indexer_list, event_list,
16060         constant_list, field_list, instance_constructor_list, method_list,
16061         operator_list and property_list are turned into their real arrays.
16062
16063         Although we could probably perform this operation earlier, for
16064         good error reporting we need to keep the lists and remove the
16065         lists for longer than required.
16066
16067         This optimization was triggered by Paolo profiling the compiler
16068         speed on the output of `gen-sample-program.pl' perl script. 
16069
16070         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
16071         not crash in methods like MemberLookupFailed that use this field.  
16072
16073         This problem arises when the compiler fails to resolve a type
16074         during interface type definition for example.
16075
16076 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
16077
16078         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
16079         inherit from System.Object, so we have to stop at null, not only
16080         when reaching System.Object.
16081
16082 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
16083
16084         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
16085         DeclaredOnly because the parent indexer might have had a different
16086         name, but did not loop until the top of the hierarchy was reached.
16087
16088         The problem this one fixes is 35492: when a class implemented an
16089         indexer from an interface, we were getting the interface method
16090         (which was abstract) and we were flagging an error (can not invoke
16091         abstract method).
16092
16093         This also keeps bug 33089 functioning, and test-148 functioning.
16094
16095         * typemanager.cs (IsSpecialMethod): The correct way of figuring
16096         out if a method is special is to see if it is declared in a
16097         property or event, or whether it is one of the predefined operator
16098         names.   This should fix correctly #36804.
16099
16100 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
16101
16102         The goal here is to remove the dependency on EmptyCast.Peel ().
16103         Killing it completely.
16104
16105         The problem is that currently in a number of places where
16106         constants are expected, we have to "probe" for an EmptyCast, and
16107         Peel, which is not the correct thing to do, as this will be
16108         repetitive and will likely lead to errors. 
16109
16110         The idea is to remove any EmptyCasts that are used in casts that
16111         can be reduced to constants, so we only have to cope with
16112         constants. 
16113
16114         This bug hunt was triggered by Bug 37363 and the desire to remove
16115         the duplicate pattern where we were "peeling" emptycasts to check
16116         whether they were constants.  Now constants will always be
16117         constants.
16118
16119         * ecore.cs: Use an enumconstant here instead of wrapping with
16120         EmptyCast.  
16121
16122         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
16123         throwing me off.  By handling this we can get rid of a few hacks.
16124
16125         * statement.cs (Switch): Removed Peel() code.
16126
16127 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
16128
16129         * class.cs: Location information for error 508
16130
16131         * expression.cs (New.DoResolve): Add a guard against double
16132         resolution of an expression.  
16133
16134         The New DoResolve might be called twice when initializing field
16135         expressions (see EmitFieldInitializers, the call to
16136         GetInitializerExpression will perform a resolve on the expression,
16137         and later the assign will trigger another resolution
16138
16139         This leads to bugs (#37014)
16140
16141         * delegate.cs: The signature for EndInvoke should contain any ref
16142         or out parameters as well.  We were not doing this in the past. 
16143
16144         * class.cs (Field.Define): Do not overwrite the type definition
16145         inside the `volatile' group.  Turns out that volatile enumerations
16146         were changing the type here to perform a validity test, which
16147         broke conversions. 
16148
16149 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
16150
16151         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
16152         and structs, we do not want to load the instance variable
16153
16154         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
16155         enum_type has to be handled like an object reference (implicit
16156         conversions exists from this to object), but the regular IsClass
16157         and IsValueType tests will never return true for this one.
16158
16159         Also we use TypeManager.IsValueType instead of type.IsValueType,
16160         just for consistency with the rest of the code (this is only
16161         needed if we ever use the construct exposed by test-180.cs inside
16162         corlib, which we dont today).
16163
16164 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
16165
16166         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
16167         just InternalCall.
16168
16169 2003-02-09  Martin Baulig  <martin@ximian.com>
16170
16171         * namespace.cs (Namespace..ctor): Added SourceFile argument.
16172         (Namespace.DefineNamespaces): New static public method; this is
16173         called when we're compiling with debugging to add all namespaces
16174         to the symbol file.
16175
16176         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
16177         pass it to the Namespace's .ctor.
16178
16179         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
16180         and MethodBase arguments; pass the namespace ID to the symwriter;
16181         pass the MethodBase instead of the token to the symwriter.
16182         (SymbolWriter.DefineNamespace): New method to add a namespace to
16183         the symbol file.
16184
16185 2003-02-09  Martin Baulig  <martin@ximian.com>
16186
16187         * symbolwriter.cs: New file.  This is a wrapper around
16188         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
16189         methods here in near future.
16190
16191 2003-02-09  Martin Baulig  <martin@ximian.com>
16192
16193         * codegen.cs (EmitContext.Mark): Just pass the arguments to
16194         ILGenerator.MarkSequencePoint() which are actually used by the
16195         symbol writer.
16196
16197 2003-02-09  Martin Baulig  <martin@ximian.com>
16198
16199         * location.cs (SourceFile): New public sealed class.  This
16200         contains the name and an index which is used in the location's token.
16201         (Location): Reserve an appropriate number of bits in the token for
16202         the source file instead of walking over that list, this gives us a
16203         really huge performance improvement when compiling with debugging.
16204
16205         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
16206         `SourceFile' argument instead of a string.
16207         (Driver.ProcessFile): Add all the files via Location.AddFile(),
16208         but don't parse/tokenize here, we need to generate the list of all
16209         source files before we do that.
16210         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
16211         the files.
16212
16213         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
16214         instead of a string.
16215
16216         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
16217         of a string.
16218
16219 2003-02-09  Martin Baulig  <martin@ximian.com>
16220
16221         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
16222         filename on `#line default'.
16223
16224 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
16225
16226         * statement.cs: don't clear the pinned var when the fixed statement
16227         returns from the method (fixes bug#37752).
16228
16229 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
16230
16231         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
16232         to IsValueType.
16233
16234 2003-02-07  Martin Baulig  <martin@ximian.com>
16235
16236         * driver.cs: Removed the `--debug-args' command line argument.
16237
16238         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
16239         automatically by the AsssemblyBuilder.
16240         (CodeGen.InitializeSymbolWriter): We don't need to call any
16241         initialization function on the symbol writer anymore.  This method
16242         doesn't take any arguments.
16243
16244 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
16245
16246         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
16247         from referenced assemblies as well.
16248
16249 2003-02-02  Martin Baulig  <martin@ximian.com>
16250
16251         * class.cs (MethodData.Emit): Generate debugging info for external methods.
16252
16253 2003-02-02  Martin Baulig  <martin@ximian.com>
16254
16255         * class.cs (Constructor.Emit): Open the symbol writer before
16256         emitting the constructor initializer.
16257         (ConstructorInitializer.Emit): Call ec.Mark() to allow
16258         single-stepping through constructor initializers.
16259
16260 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
16261
16262         * class.cs: Handle error 549: do not allow virtual methods in
16263         sealed classes. 
16264
16265 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
16266
16267         * decl.cs: Check access levels when resolving types
16268
16269 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
16270
16271         * statement.cs: Add parameters and locals set in catch blocks that might 
16272         return to set vector
16273
16274 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
16275
16276         * class.cs (Operator): Set the SpecialName flags for operators.
16277
16278         * expression.cs (Invocation.DoResolve): Only block calls to
16279         accessors and operators on SpecialName methods.
16280
16281         (Cast.TryReduce): Handle conversions from char constants.
16282
16283
16284 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
16285
16286         * statement.cs: small memory and time optimization in FlowBranching.
16287
16288 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
16289
16290         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
16291         problem that the last fix but in the other sid (Set).
16292
16293         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
16294         access when there is no indexer in the hierarchy.
16295
16296 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
16297
16298         * class.cs: Combine some if statements.
16299
16300 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16301
16302         * driver.cs: fixed bug #37187.
16303
16304 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
16305
16306         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
16307         any indexer, it's needed to build a list with all the indexers in the
16308         hierarchy (AllGetters), else we have problems. Fixes #35653.
16309
16310 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
16311
16312         * class.cs (MethodData.Define): It is wrong for an interface
16313         implementation to be static in both cases: explicit and implicit.
16314         We were only handling this in one case.
16315
16316         Improve the if situation there to not have negations.
16317
16318         * class.cs (Field.Define): Turns out that we do not need to check
16319         the unsafe bit on field definition, only on usage.  Remove the test.
16320
16321 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16322
16323         * driver.cs: use assembly.Location instead of Codebase (the latest
16324         patch made mcs fail when using MS assemblies).
16325
16326 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
16327
16328         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
16329         get the path to *corlib.dll.
16330
16331 2003-01-21  Nick Drochak <ndrochak@gol.com>
16332
16333         * cs-tokenizer.cs:
16334         * pending.cs:
16335         * typemanager.cs: Remove compiler warnings
16336
16337 2003-01-20  Duncan Mak  <duncan@ximian.com>
16338
16339         * AssemblyInfo.cs: Bump the version number to 0.19.
16340
16341 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16342
16343         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
16344
16345 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
16346
16347         * class.cs (Constructor::Emit): Emit debugging info for constructors.
16348
16349 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
16350
16351         * cs-parser.jay: Small fix: we were not comparing the constructor
16352         name correctly.   Thanks to Zoltan for the initial pointer.
16353
16354 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
16355
16356         * cs-tokenizer.cs: Set file name when specified with #line
16357
16358 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
16359
16360         * cs-parser.jay: Only perform the constructor checks here if we
16361         are named like the class;  This will help provider a better
16362         error.  The constructor path is taken when a type definition is
16363         not found, but most likely the user forgot to add the type, so
16364         report that rather than the constructor error.
16365
16366 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
16367
16368         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
16369         allocations.
16370
16371 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16372
16373         * cs-parser.jay: Add cleanup call.
16374
16375 2003-01-13  Duncan Mak  <duncan@ximian.com>
16376
16377         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
16378         consistent with other methods.
16379
16380 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16381
16382         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
16383
16384 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
16385
16386         * attribute.cs: only set GuidAttr to true when we have a
16387         GuidAttribute.
16388
16389 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16390
16391         * ecore.cs:
16392         * expression.cs:
16393         * typemanager.cs: fixes to allow mcs compile corlib with the new
16394         Type.IsSubclassOf fix.
16395
16396 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
16397
16398         * expression.cs (LocalVariableReference.DoResolve): Classify a
16399         constant as a value, not as a variable.   Also, set the type for
16400         the variable.
16401
16402         * cs-parser.jay (fixed_statement): take a type instead of a
16403         pointer_type, so we can produce a better error message later.
16404
16405         * statement.cs (Fixed.Resolve): Flag types that are not pointers
16406         as an error.  
16407
16408         (For.DoEmit): Make inifinite loops have a
16409         non-conditional branch back.
16410
16411         (Fixed.DoEmit): First populate the pinned variables, then emit the
16412         statement, then clear the variables.  Before I was emitting the
16413         code once for each fixed piece.
16414
16415
16416 2003-01-08  Martin Baulig  <martin@ximian.com>
16417
16418         * statement.cs (FlowBranching.MergeChild): A break in a
16419         SWITCH_SECTION does not leave a loop.  Fixes #36155.
16420
16421 2003-01-08  Martin Baulig  <martin@ximian.com>
16422
16423         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
16424         lives in the same number space than `param_map'.  Fixes #36154.
16425
16426 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
16427
16428         * cs-parser.jay (constructor_declaration): Set the
16429         Constructor.ModFlags before probing for it.  This makes the
16430         compiler report 514, 515 and 132 (the code was there, but got
16431         broken). 
16432
16433         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
16434         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
16435         (GotoCase.Resolve): Set `Returns' to ALWAYS.
16436
16437 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
16438
16439         * enum.cs: create the enum static fields using the enum type.
16440
16441 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
16442
16443         * class.cs: don't try to create the ParamBuilder for the return
16444         type if it's not needed (and handle it breaking for the ms runtime
16445         anyway).
16446
16447 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
16448
16449         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
16450
16451 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
16452
16453         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
16454         the command.   This showed up while compiling the JANET source
16455         code, which used \r as its only newline separator.
16456
16457 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
16458
16459         * class.cs (Method.Define): If we are an operator (because it
16460         reuses our code), then set the SpecialName and HideBySig.  #36128
16461
16462 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
16463
16464         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
16465         exception, report error 120 `object reference required'.
16466
16467         * driver.cs: Add --pause option, used during to measure the size
16468         of the process as it goes with --timestamp.
16469
16470         * expression.cs (Invocation.DoResolve): Do not allow methods with
16471         SpecialName to be invoked.
16472
16473 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
16474
16475         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
16476         number before adding it.
16477
16478 2002-12-21  Ravi Pratap  <ravi@ximian.com>
16479
16480         * ecore.cs (StandardImplicitConversion): When in an unsafe
16481         context, we allow conversion between void * to any other pointer
16482         type. This fixes bug #35973.
16483
16484 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
16485
16486         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16487         is not thrown when extensionless outputs are used 
16488
16489 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16490
16491         * rootcontext.cs: fixed compilation of corlib.
16492
16493 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16494
16495         * attribute.cs (Attributes.Contains): Add new method.
16496
16497         * class.cs (MethodCore.LabelParameters): if the parameter is an
16498         `out' parameter, check that no attribute `[In]' has been passed.
16499
16500         * enum.cs: Handle the `value__' name in an enumeration.
16501
16502 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16503
16504         * decl.cs: Added special case to allow overrides on "protected
16505         internal" methods
16506
16507 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16508
16509         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16510         since it makes much more sense.
16511
16512         (Attributes.ctor): Don't require a Location parameter.
16513
16514         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16515
16516         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16517         since we already have that information per attribute.
16518
16519         * everywhere : make appropriate changes.
16520
16521         * class.cs (LabelParameters): Write the code which actually
16522         applies attributes to the return type. We can't do this on the MS
16523         .NET runtime so we flag a warning in the case an exception is
16524         thrown.
16525
16526 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16527
16528         * const.cs: Handle implicit null conversions here too.
16529
16530 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16531
16532         * class.cs (MethodCore.LabelParameters): Remove the extra
16533         Type [] parameter since it is completely unnecessary. Instead
16534         pass in the method's attributes so that we can extract
16535         the "return" attribute.
16536
16537 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16538
16539         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16540         of ignoring it and letting the compile continue.
16541
16542         * typemanager.cs (ChangeType): use an extra argument to return an
16543         error condition instead of throwing an exception.
16544
16545 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16546
16547         * expression.cs (Unary.TryReduce): mimic the code for the regular
16548         code path.  Perform an implicit cast in the cases where we can
16549         implicitly convert to one of the integral types, and then reduce
16550         based on that constant.   This fixes bug #35483.
16551
16552 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16553
16554         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16555
16556 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16557
16558         * namespace.cs: fixed bug #35489.
16559
16560 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16561
16562         * class.cs: Remove some dead code.
16563
16564         * cs-parser.jay: Estimate the number of methods needed
16565         (RootContext.MethodCount);
16566
16567         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16568         numbers instead of StringBuilders.
16569
16570         * support.cs (PtrHashtable): Add constructor with initial size;
16571         We can now reduce reallocations of the method table.
16572
16573 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16574
16575         * attribute.cs (ApplyAttributes): Keep track of the emitted
16576         attributes on a per-target basis. This fixes bug #35413.
16577
16578 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16579
16580         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16581         default to the Windows 1252 encoding.
16582
16583         (UnixParseOption): Support version, thanks to Alp for the missing
16584         pointer. 
16585
16586         * AssemblyInfo.cs: Add nice assembly information.
16587
16588         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16589         (bug 35169).
16590
16591         * cs-parser.jay: Allow a trailing comma before the close bracked
16592         in the attribute_section production.
16593
16594         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16595         address of the instance was being taken, I will take this out,
16596         because we take the address of the object immediately here.
16597
16598 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16599
16600         * typemanager.cs (AreMultipleAllowed): Take care of the most
16601         obvious case where attribute type is not in the current assembly -
16602         stupid me ;-)
16603
16604 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16605
16606         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16607         definitions, instead of doing that afterwards.  
16608
16609         Also we use a nice little hack, depending on the constructor, we
16610         know if we are a "composed" name or a simple name.  Hence, we
16611         avoid the IndexOf test, and we avoid 
16612
16613         * codegen.cs: Add code to assist in a bug reporter to track down
16614         the source of a compiler crash. 
16615
16616 2002-12-07  Ravi Pratap  <ravi@ximian.com>
16617
16618         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
16619         types have been emitted for a given element and flag an error
16620         if something which does not have AllowMultiple set is used more
16621         than once.
16622
16623         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
16624         attribute types and their corresponding AllowMultiple properties
16625
16626         (AreMultipleAllowed): Check the property for a given type.
16627
16628         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
16629         property in the case we have a TypeContainer.
16630
16631         (Attributes.AddAttribute): Detect duplicates and just skip on
16632         adding them. This trivial fix catches a pretty gross error in our
16633         attribute emission - global attributes were being emitted twice!
16634
16635         Bugzilla bug #33187 is now fixed.
16636
16637 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
16638
16639         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
16640         instead of pp_and).
16641
16642         * expression.cs (Binary.ResolveOperator): I can only use the
16643         Concat (string, string, string) and Concat (string, string,
16644         string, string) if the child is actually a concatenation of
16645         strings. 
16646
16647 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
16648
16649         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
16650         context where we need a 2-character lookahead.
16651
16652         * pending.cs (PendingImplementation): Rework so we can keep track
16653         of interface types all the time, and flag those which were
16654         implemented by parents as optional.
16655
16656 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
16657
16658         * expression.cs (Binary.ResolveOperator): Use
16659         String.Concat(string,string,string) or
16660         String.Concat(string,string,string,string) when possible. 
16661
16662         * typemanager: More helper methods.
16663
16664
16665 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
16666
16667         * pending.cs: remove the bogus return from GetMissingInterfaces()
16668         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
16669
16670 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16671
16672         * namespace.cs: avoid duplicated 'using xxx' being added to
16673         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
16674         when we get more than one 'using' statement for the same namespace.
16675         Report a CS0105 warning for it.
16676
16677 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
16678
16679         * cs-tokenizer.cs (consume_identifier): use read directly, instead
16680         of calling getChar/putback, uses internal knowledge of it.    
16681
16682         (xtoken): Reorder tokenizer so most common patterns are checked
16683         first.  This reduces the compilation time in another 5% (from 8.11s
16684         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
16685
16686         The parsing time is 22% of the compilation in mcs, and from that
16687         64% is spent on the tokenization process.  
16688
16689         I tried using a binary search for keywords, but this is slower
16690         than the hashtable.  Another option would be to do a couple of
16691         things:
16692
16693                 * Not use a StringBuilder, instead use an array of chars,
16694                   with a set value.  Notice that this way we could catch
16695                   the 645 error without having to do it *afterwards*.
16696
16697                 * We could write a hand-parser to avoid the hashtable
16698                   compares altogether.
16699
16700         The identifier consumption process takes 37% of the tokenization
16701         time.  Another 15% is spent on is_number.  56% of the time spent
16702         on is_number is spent on Int64.Parse:
16703
16704                 * We could probably choose based on the string length to
16705                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
16706                   computations. 
16707
16708         Another 3% is spend on wrapping `xtoken' in the `token' function.
16709
16710         Handle 0xa0 as whitespace (#34752)
16711
16712 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
16713
16714         * typemanager.cs (IsCLRType): New routine to tell whether a type
16715         is one of the builtin types.  
16716
16717         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
16718         typecode in more places instead of doing pointer comparissions.
16719         We could leverage some knowledge about the way the typecodes are
16720         laid out.
16721
16722         New code to cache namespaces in assemblies, it is currently not
16723         invoked, to be used soon.
16724
16725         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
16726
16727         * expression.cs (Binary.ResolveOperator): specially handle
16728         strings, and do not perform user-defined operator overloading for
16729         built-in types.
16730
16731 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
16732
16733         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
16734         internalcall as it is a pretty simple operation;  Avoid whenever
16735         possible to call Char.IsLetter.
16736
16737         (consume_identifier): Cut by half the number of
16738         hashtable calls by merging the is_keyword and GetKeyword behavior.
16739
16740         Do not short-circuit, because if we do, we
16741         report errors (ie, #if false && true would produce an invalid
16742         directive error);
16743
16744
16745 2002-11-24  Martin Baulig  <martin@ximian.com>
16746
16747         * expression.cs (Cast.TryReduce): If we're in checked syntax,
16748         check constant ranges and report a CS0221.  Fixes #33186.
16749
16750 2002-11-24  Martin Baulig  <martin@ximian.com>
16751
16752         * cs-parser.jay: Make this work for uninitialized variable
16753         declarations in the `for' initializer.  Fixes #32416.
16754
16755 2002-11-24  Martin Baulig  <martin@ximian.com>
16756
16757         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
16758         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
16759
16760 2002-11-24  Martin Baulig  <martin@ximian.com>
16761
16762         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
16763         argument; if true, we also check for user-defined conversions.
16764         This is only needed if both arguments are of a user-defined type.
16765         Fixes #30443, added test-175.cs.
16766         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
16767
16768         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
16769
16770 2002-11-24  Martin Baulig  <martin@ximian.com>
16771
16772         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
16773         function to get the store opcode.
16774         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
16775         only emit the Ldelema if the store opcode is Stobj.  You must run
16776         both test-34 and test-167 to test this.  Fixes #34529.
16777
16778 2002-11-23  Martin Baulig  <martin@ximian.com>
16779
16780         * ecore.cs (Expression.MemberLookup): Added additional
16781         `qualifier_type' argument which is used when we're being called
16782         from MemberAccess.DoResolve() and null if we're called from a
16783         SimpleName lookup.
16784         (Expression.MemberLookupFailed): New method to report errors; this
16785         does the CS1540 check and reports the correct error message.
16786
16787         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
16788         argument for the CS1540 check and redone the way how we're dealing
16789         with private members.  See the comment in the source code for details.
16790         (FilterWithClosure): Reverted this back to revision 1.197; renamed
16791         `closure_start_type' to `closure_qualifier_type' and check whether
16792         it's not null.  It was not this filter being broken, it was just
16793         being called with the wrong arguments.
16794
16795         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
16796         and pass it the correct `qualifier_type'; this also does the error
16797         handling for us.
16798
16799 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
16800
16801         * expression.cs (Invocation.EmitParams): If the we are dealing
16802         with a non-built-in value type, load its address as well.
16803
16804         (ArrayCreation): Use a a pretty constant instead
16805         of the hardcoded value 2.   Use 6 instead of 2 for the number of
16806         static initializers.  
16807
16808         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
16809         because they are not really value types, just glorified integers. 
16810
16811         * driver.cs: Do not append .exe, the CSC compiler does not do it.
16812
16813         * ecore.cs: Remove redundant code for enumerations, make them use
16814         the same code path as everything else, fixes the casting issue
16815         with enumerations in Windows.Forms.
16816
16817         * attribute.cs: Do only cast to string if it is a string, the
16818         validation happens later.
16819
16820         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
16821         people upgrade their corlibs.
16822
16823         * ecore.cs: Oops, enumerations were not following the entire code path
16824
16825 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
16826
16827         * typemanager.cs (FilterWithClosure): Commented out the test for
16828         1540 in typemanager.cs, as it has problems when accessing
16829         protected methods from a parent class (see test-174.cs). 
16830
16831         * attribute.cs (Attribute.ValidateGuid): new method.
16832         (Attribute.Resolve): Use above.
16833
16834 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
16835
16836         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
16837
16838         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
16839         handling for enumerations, as we only needed the TypeContainer
16840         functionality to begin with (this is required for the fix below to
16841         work for enums that reference constants in a container class for
16842         example). 
16843
16844         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
16845
16846         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
16847         a valid TypeBuilder to perform lookups on.o
16848
16849         * class.cs (InheritableMemberSignatureCompare): Use true in the
16850         call to GetGetMethod and GetSetMethod, because we are comparing
16851         the signature, and we need to get the methods *even* if they are
16852         private. 
16853
16854         (PropertyBase.CheckBase): ditto.
16855
16856         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
16857         GotoCase.Resolve): Use Peel on EmpytCasts.
16858
16859         * ecore.cs (EmptyCast): drop child, add Peel method.
16860
16861 2002-11-17  Martin Baulig  <martin@ximian.com>
16862
16863         * ecore.cs (EmptyCast.Child): New public property.
16864
16865         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
16866         label resolved to an EmptyCast.  Fixes #34162.
16867         (GotoCase.Resolve): Likewise.
16868         (Block.EmitMeta): Likewise.
16869
16870 2002-11-17  Martin Baulig  <martin@ximian.com>
16871
16872         * expression.cs (Invocation.BetterConversion): Prefer int over
16873         uint; short over ushort; long over ulong for integer literals.
16874         Use ImplicitConversionExists instead of StandardConversionExists
16875         since we also need to check for user-defined implicit conversions.
16876         Fixes #34165.  Added test-173.cs.
16877
16878 2002-11-16  Martin Baulig  <martin@ximian.com>
16879
16880         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
16881         with the `true' and `false' literals.  Fixes #33151.
16882
16883 2002-11-16  Martin Baulig  <martin@ximian.com>
16884
16885         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
16886         October 22nd; don't do the cs1540 check for static members.
16887
16888         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
16889         now using our own filter here and doing the cs1540 check again.
16890
16891 2002-11-16  Martin Baulig  <martin@ximian.com>
16892
16893         * support.cs (InternalParameters): Don't crash if we don't have
16894         any fixed parameters.  Fixes #33532.
16895
16896 2002-11-16  Martin Baulig  <martin@ximian.com>
16897
16898         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
16899         when looking up static methods to make this work on Windows.
16900         Fixes #33773.
16901
16902 2002-11-16  Martin Baulig  <martin@ximian.com>
16903
16904         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
16905         a setter rather than using PropertyInfo.CanWrite.
16906
16907 2002-11-15  Nick Drochak  <ndrochak@gol.com>
16908
16909         * class.cs: Allow acces to block member by subclasses. Fixes build
16910         breaker.
16911
16912 2002-11-14  Martin Baulig  <martin@ximian.com>
16913
16914         * class.cs (Constructor.Emit): Added the extern/block check.
16915         Fixes bug #33678.
16916
16917 2002-11-14  Martin Baulig  <martin@ximian.com>
16918
16919         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
16920         iteration while looking for indexers, this is needed because the
16921         indexer may have a different name in our base classes.  Fixed the
16922         error reporting (no indexers at all, not get accessor, no
16923         overloaded match).  Fixes bug #33089.
16924         (IndexerAccess.DoResolveLValue): Likewise.
16925
16926 2002-11-14  Martin Baulig  <martin@ximian.com>
16927
16928         * class.cs (PropertyBase.CheckBase): Make this work for multiple
16929         indexers.  Fixes the first part of bug #33089.
16930         (MethodSignature.InheritableMemberSignatureCompare): Added support
16931         for properties.
16932
16933 2002-11-13  Ravi Pratap  <ravi@ximian.com>
16934
16935         * attribute.cs (Attribute.Resolve): Catch the
16936         NullReferenceException and report it since it isn't supposed to
16937         happen. 
16938
16939 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
16940
16941         * expression.cs (Binary.EmitBranchable): Also handle the cases for
16942         LogicalOr and LogicalAnd that can benefit from recursively
16943         handling EmitBranchable.  The code now should be nice for Paolo.
16944
16945 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
16946
16947         * typemanager.cs (LookupType): Added a negative-hit hashtable for
16948         the Type lookups, as we perform quite a number of lookups on
16949         non-Types.  This can be removed once we can deterministically tell
16950         whether we have a type or a namespace in advance.
16951
16952         But this might require special hacks from our corlib.
16953
16954         * TODO: updated.
16955
16956         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
16957         and double which avoids a conversion from an integer to a double.
16958
16959         * expression.cs: tiny optimization, avoid calling IsConstant,
16960         because it effectively performs the lookup twice.
16961
16962 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
16963
16964         But a bogus return here to keep the semantics of the old code
16965         until the Mono runtime is fixed.
16966
16967         * pending.cs (GetMissingInterfaces): New method used to remove all
16968         the interfaces that are already implemented by our parent
16969         classes from the list of pending methods. 
16970
16971         * interface.cs: Add checks for calls after ResolveTypeExpr.
16972
16973 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
16974
16975         * class.cs (Class.Emit): Report warning 67: event not used if the
16976         warning level is beyond 3.
16977
16978         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
16979         being a NullLiteral.
16980
16981         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
16982         specifiers. 
16983
16984         * class.cs (TypeContainer.GetClassBases): Cover a missing code
16985         path that might fail if a type can not be resolved.
16986
16987         * expression.cs (Binary.Emit): Emit unsigned versions of the
16988         operators. 
16989
16990         * driver.cs: use error 5.
16991
16992 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
16993
16994         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
16995
16996 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
16997
16998         * cs-parser.jay (switch_section): A beautiful patch from Martin
16999         Baulig that fixed 33094.
17000
17001 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
17002
17003         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
17004         Check whether the base is abstract and report an error if so.
17005
17006         * expression.cs (IndexerAccess.DoResolveLValue,
17007         IndexerAccess.DoResolve): ditto. 
17008
17009         (Invocation.DoResolve): ditto.
17010
17011         (Invocation.FullMethodDesc): Improve the report string.
17012
17013         * statement.cs (Block): Eliminate IsVariableDefined as it is
17014         basically just a wrapper for GetVariableInfo.
17015
17016         * ecore.cs (SimpleName): Use new 
17017
17018         * support.cs (ReflectionParamter.ParameterType): We unwrap the
17019         type, as we return the actual parameter ref/unref state on a
17020         different call.
17021
17022 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
17023
17024         * support.cs: Return proper flags REF/OUT fixing the previous
17025         commit.  
17026
17027         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
17028         not used to mean `ref' but `ref or out' in ParameterReference
17029
17030         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
17031         full type signature instead of calling TypeManger.CSharpName
17032         ourselves. 
17033
17034         * support.cs (InternalParameters.ParameterDesc): Do not compare
17035         directly to the modflags, because REF/OUT will actually be bitsets
17036         if set. 
17037
17038         * delegate.cs (VerifyMethod): Check also the modifiers.
17039
17040         * cs-tokenizer.cs: Fix bug where floating point values with an
17041         exponent where a sign was missing was ignored.
17042
17043         * driver.cs: Allow multiple assemblies to be specified in a single
17044         /r: argument
17045
17046 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
17047
17048         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
17049         because identifiers after a parenthesis would end up in this kind
17050         of production, and we needed to desamiguate it for having casts
17051         like:
17052
17053                 (UserDefinedType *) xxx
17054
17055 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
17056
17057         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
17058         we should set on the Bindingflags.NonPublic, but not turn on
17059         private_ok.  private_ok controls whether a Private member is
17060         returned (this is chekced on the filter routine), while the
17061         BindingFlags.NonPublic just controls whether private/protected
17062         will be allowed.   This fixes the problem part of the problem of
17063         private properties being allowed to be used in derived classes.
17064
17065         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
17066         so we can call the children DoResolveLValue method (this will
17067         properly signal errors on lvalue assignments to base properties)
17068
17069         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
17070         getter are null, and we have a property info, we know that this
17071         happened because the lookup failed, so we report an error 122 for
17072         protection level violation.
17073
17074         We also silently return if setter and getter are null in the
17075         resolve functions, this condition only happens if we have flagged
17076         the error before.  This is the other half of the problem. 
17077
17078         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
17079         not have accessibility information, that is why we were returning
17080         true in the filter function in typemanager.cs.
17081
17082         To properly report 122 (property is inaccessible because of its
17083         protection level) correctly, we report this error in ResolveAccess
17084         by failing if both the setter and the getter are lacking (ie, the
17085         lookup failed). 
17086
17087         DoResolve and DoLResolve have been modified to check for both
17088         setter/getter being null and returning silently, the reason being
17089         that I did not want to put the knowledge about this error in upper
17090         layers, like:
17091
17092         int old = Report.Errors;
17093         x = new PropertyExpr (...);
17094         if (old != Report.Errors)
17095                 return null;
17096         else
17097                 return x;
17098
17099         So the property expr is returned, but it is invalid, so the error
17100         will be flagged during the resolve process. 
17101
17102         * class.cs: Remove InheritablePropertySignatureCompare from the
17103         class, as we no longer depend on the property signature to compute
17104         whether it is possible to implement a method or not.
17105
17106         The reason is that calling PropertyInfo.GetGetMethod will return
17107         null (in .NET, in Mono it works, and we should change this), in
17108         cases where the Get Method does not exist in that particular
17109         class.
17110
17111         So this code:
17112
17113         class X { public virtual int A { get { return 1; } } }
17114         class Y : X { }
17115         class Z : Y { public override int A { get { return 2; } } }
17116
17117         Would fail in Z because the parent (Y) would not have the property
17118         defined.  So we avoid this completely now (because the alternative
17119         fix was ugly and slow), and we now depend exclusively on the
17120         method names.
17121
17122         (PropertyBase.CheckBase): Use a method-base mechanism to find our
17123         reference method, instead of using the property.
17124
17125         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
17126         routines are gone now.
17127
17128         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
17129         names, they were incorrectly named.
17130
17131         * cs-tokenizer.cs: Return are more gentle token on failure. 
17132
17133         * pending.cs (PendingImplementation.InterfaceMethod): This routine
17134         had an out-of-sync index variable, which caused it to remove from
17135         the list of pending methods the wrong method sometimes.
17136
17137 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
17138
17139         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
17140         CanWrite, because those refer to this particular instance of the
17141         property, and do not take into account the fact that we can
17142         override single members of a property.
17143
17144         Constructor requires an EmitContext.  The resolution process does
17145         not happen here, but we need to compute the accessors before,
17146         because the resolution does not always happen for properties.
17147
17148         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
17149         subclass, before we did not update this flag, but we did update
17150         bindingflags. 
17151
17152         (GetAccessors): Drop this routine, as it did not work in the
17153         presence of partially overwritten set/get methods. 
17154
17155         Notice that this broke the cs1540 detection, but that will require
17156         more thinking. 
17157
17158 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17159
17160         * class.cs:
17161         * codegen.cs:
17162         * driver.cs: issue a warning instead of an error if we don't support
17163         debugging for the platform. Also ignore a couple of errors that may
17164         arise when trying to write the symbols. Undo my previous patch.
17165
17166 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17167
17168         * driver.cs: ignore /debug switch except for Unix platforms.
17169
17170 2002-10-23  Nick Drochak  <ndrochak@gol.com>
17171
17172         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
17173
17174 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
17175
17176         * driver.cs: Do not make mcs-debug conditional, so we do not break
17177         builds that use it.
17178
17179         * statement.cs (UsageVector.MergeChildren): I would like Martin to
17180         review this patch.  But basically after all the children variables
17181         have been merged, the value of "Breaks" was not being set to
17182         new_breaks for Switch blocks.  I think that it should be set after
17183         it has executed.  Currently I set this to the value of new_breaks,
17184         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
17185         conservative, but I do not understand this code very well.
17186
17187         I did not break anything in the build, so that is good ;-)
17188
17189         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
17190
17191 2002-10-20  Mark Crichton  <crichton@gimp.org>
17192
17193         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
17194
17195 2002-10-20  Nick Drochak  <ndrochak@gol.com>
17196
17197         * cfold.cs: Fixed compile blocker.
17198
17199 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
17200
17201         * driver.cs: I was chekcing the key, not the file.
17202
17203 2002-10-19  Ravi Pratap  <ravi@ximian.com>
17204
17205         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
17206         message that we were generating - we just need to silently return
17207         a null.
17208
17209 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
17210
17211         * class.cs (Event.Define): Change my previous commit, as this
17212         breaks the debugger.  This is a temporary hack, as it seems like
17213         the compiler is generating events incorrectly to begin with.
17214
17215         * expression.cs (Binary.ResolveOperator): Added support for 
17216         "U operator - (E x, E y)"
17217
17218         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
17219         y)".
17220
17221         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
17222         init-only variables, but this path did not take into account that
17223         there might be also instance readonly variables.  Correct this
17224         problem. 
17225
17226         This fixes bug 32253
17227
17228         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
17229         delegates as well.
17230
17231         * driver.cs: Change the extension for modules to `netmodule'
17232
17233         * cs-parser.jay: Improved slightly the location tracking for
17234         the debugger symbols.
17235
17236         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
17237         modifiers that were specified instead of the hardcoded value
17238         (FamAndAssem).  This was basically ignoring the static modifier,
17239         and others.  Fixes 32429.
17240
17241         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
17242         fixed a bug in the process (32476)
17243
17244         * expression.cs (ArrayAccess.EmitAssign): Patch from
17245         hwang_rob@yahoo.ca that fixes bug 31834.3
17246
17247 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
17248
17249         * driver.cs: Make the module extension .netmodule.
17250
17251 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
17252
17253         * driver.cs: Report an error if the resource file is not found
17254         instead of crashing.
17255
17256         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
17257         false, like Emit does.
17258
17259 2002-10-16  Nick Drochak  <ndrochak@gol.com>
17260
17261         * typemanager.cs: Remove unused private member.  Also reported mcs
17262         bug to report this as a warning like csc.
17263
17264 2002-10-15  Martin Baulig  <martin@gnome.org>
17265
17266         * statement.cs (Statement.Emit): Made this a virtual method; emits
17267         the line number info and calls DoEmit().
17268         (Statement.DoEmit): New protected abstract method, formerly knows
17269         as Statement.Emit().
17270
17271         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
17272
17273 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
17274
17275         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
17276         have fixed a remaining problem: not every AddXXXX was adding a
17277         fully qualified name.  
17278
17279         Now everyone registers a fully qualified name in the DeclSpace as
17280         being defined instead of the partial name.  
17281
17282         Downsides: we are slower than we need to be due to the excess
17283         copies and the names being registered this way.  
17284
17285         The reason for this is that we currently depend (on the corlib
17286         bootstrap for instance) that types are fully qualified, because
17287         we dump all the types in the namespace, and we should really have
17288         types inserted into the proper namespace, so we can only store the
17289         basenames in the defined_names array.
17290
17291 2002-10-10  Martin Baulig  <martin@gnome.org>
17292
17293         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
17294         from bug #31834, see the bug report for a testcase which is
17295         miscompiled.
17296
17297 2002-10-10  Martin Baulig  <martin@gnome.org>
17298
17299         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
17300         flow analysis code for this.
17301
17302         * statement.cs (Do, While, For): Tell the flow analysis code about
17303         infinite loops.
17304         (FlowBranching.UsageVector): Added support for infinite loops.
17305         (Block.Resolve): Moved the dead code elimination here and use flow
17306         analysis to do it.
17307
17308 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
17309
17310         * class.cs (Field.Define): Catch cycles on struct type
17311         definitions. 
17312
17313         * typemanager.cs (IsUnmanagedtype): Do not recursively check
17314         fields if the fields are static.  We only need to check instance
17315         fields. 
17316
17317         * expression.cs (As.DoResolve): Test for reference type.
17318
17319         * statement.cs (Using.ResolveExpression): Use
17320         ConvertImplicitRequired, not ConvertImplicit which reports an
17321         error on failture
17322         (Using.ResolveLocalVariableDecls): ditto.
17323
17324         * expression.cs (Binary.ResolveOperator): Report errors in a few
17325         places where we had to.
17326
17327         * typemanager.cs (IsUnmanagedtype): Finish implementation.
17328
17329 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
17330
17331         * expression.cs: Use StoreFromPtr instead of extracting the type
17332         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
17333
17334         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
17335         an enumeration value to a System.Enum, but System.Enum is not a
17336         value type, but an class type, so we need to box.
17337
17338         (Expression.ConvertExplicit): One codepath could return
17339         errors but not flag them.  Fix this.  Fixes #31853
17340
17341         * parameter.cs (Resolve): Do not allow void as a parameter type.
17342
17343 2002-10-06  Martin Baulig  <martin@gnome.org>
17344
17345         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
17346         if it's a class type and not a struct.  Fixes #31815.
17347
17348 2002-10-06  Martin Baulig  <martin@gnome.org>
17349
17350         * statement.cs: Reworked the flow analysis code a bit to make it
17351         usable for dead code elimination.
17352
17353 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17354
17355         * cs-parser.jay: allow empty source files. Fixes bug #31781.
17356
17357 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17358
17359         * expression.cs (ComposedCast.DoResolveType): A quick workaround
17360         to fix the test 165, will investigate deeper.
17361
17362 2002-10-04  Martin Baulig  <martin@gnome.org>
17363
17364         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
17365         finally blocks actually work.
17366         (Try.Resolve): We don't need to create a sibling for `finally' if
17367         there is no finally block.
17368
17369 2002-10-04  Martin Baulig  <martin@gnome.org>
17370
17371         * class.cs (Constructor.Define): The default accessibility for a
17372         non-default constructor is private, not public.
17373
17374 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17375
17376         * class.cs (Constructor): Make AllowedModifiers public, add
17377         EXTERN.
17378
17379         * cs-parser.jay: Perform the modifiers test here, as the
17380         constructor for the Constructor class usually receives a zero
17381         because of the way we create it (first we create, later we
17382         customize, and we were never checking the modifiers).
17383
17384         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
17385         is a version of LookupTypeReflection that includes the type-name
17386         cache.  This can be used as a fast path for functions that know
17387         the fully qualified name and are only calling into *.GetType() to
17388         obtain a composed type.
17389
17390         This is also used by TypeManager.LookupType during its type
17391         composition.
17392
17393         (LookupType): We now also track the real type name, as sometimes
17394         we can get a quey for the real type name from things like
17395         ComposedCast.  This fixes bug 31422.
17396
17397         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
17398         complete type fullname, it does not have to go through the type
17399         resolution system to obtain the composed version of the type (for
17400         obtaining arrays or pointers).
17401
17402         (Conditional.Emit): Use the EmitBoolExpression to
17403         generate nicer code, as requested by Paolo.
17404
17405         (ArrayCreation.CheckIndices): Use the patch from
17406         hwang_rob@yahoo.ca to validate the array initializers. 
17407
17408 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
17409
17410         * class.cs (ConstructorInitializer.Emit): simplify code by using
17411         Invocation.EmitCall, and at the same time, fix the bugs in calling
17412         parent constructors that took variable arguments. 
17413
17414         * ecore.cs (Expression.ConvertNumericExplicit,
17415         Expression.ImplicitNumericConversion): Remove the code that
17416         manually wrapped decimal (InternalTypeConstructor call is now gone
17417         as well).
17418
17419         * expression.cs (Cast.TryReduce): Also handle decimal types when
17420         trying to perform a constant fold on the type.
17421
17422         * typemanager.cs (IsUnmanagedtype): Partially implemented.
17423
17424         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
17425         that only turned off an error report, and did nothing else. 
17426
17427 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
17428
17429         * driver.cs: Handle and ignore /fullpaths
17430
17431 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
17432
17433         * expression.cs (Binary.ResolveOperator): Catch the case where
17434         DoNumericPromotions returns true, 
17435
17436         (Binary.DoNumericPromotions): Simplify the code, and the tests.
17437
17438 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
17439
17440         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
17441         report error 70.
17442
17443 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
17444
17445         * ecore.cs (ConvertNumericExplicit): It is not enough that the
17446         conversion exists, but it is also required that the conversion be
17447         performed.  This manifested in "(Type64Enum) 2".  
17448
17449         * class.cs (TypeManager.AddMethod): The fix is not to change
17450         AddEnum, because that one was using a fully qualified name (every
17451         DeclSpace derivative does), but to change the AddMethod routine
17452         that was using an un-namespaced name.  This now correctly reports
17453         the duplicated name.
17454
17455         Revert patch until I can properly fix it.  The issue
17456         is that we have a shared Type space across all namespaces
17457         currently, which is wrong.
17458
17459         Options include making the Namespace a DeclSpace, and merge
17460         current_namespace/current_container in the parser.
17461
17462 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
17463
17464         * cs-parser.jay: Improve error reporting when we get a different
17465         kind of expression in local_variable_type and
17466         local_variable_pointer_type. 
17467
17468         Propagate this to avoid missleading errors being reported.
17469
17470         * ecore.cs (ImplicitReferenceConversion): treat
17471         TypeManager.value_type as a target just like object_type.   As
17472         code like this:
17473
17474         ValueType v = 1;
17475
17476         Is valid, and needs to result in the int 1 being boxed before it
17477         is assigned to the value type v.
17478
17479         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
17480         to validate the enumeration name.
17481
17482         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
17483         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
17484         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
17485
17486         * ecore.cs (TryImplicitIntConversion): When doing an
17487         implicit-enumeration-conversion, check if the type is 64-bits and
17488         perform a conversion before passing to EnumConstant.
17489
17490 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17491
17492         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17493         report ambiguous type references.  Unlike the MS version, we
17494         report what the ambiguity is.   Innovation at work ;-)
17495
17496         (DeclSpace.FindType): Require a location argument to
17497         display when we display an ambiguous error.
17498
17499         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17500
17501         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17502
17503         * expression.cs (EmitDynamicInitializers): Apply patch from
17504         hwang_rob@yahoo.ca that fixes the order in which we emit our
17505         initializers. 
17506
17507 2002-09-21  Martin Baulig  <martin@gnome.org>
17508
17509         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17510         delegate takes no arguments.
17511
17512 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17513
17514         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17515         from integers.
17516
17517         * expression.cs: Extract the underlying type.
17518
17519         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17520
17521         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17522
17523 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17524
17525         * class.cs (TypeContainer.DefineType): We can not use the nice
17526         PackingSize with the size set to 1 DefineType method, because it
17527         will not allow us to define the interfaces that the struct
17528         implements.
17529
17530         This completes the fixing of bug 27287
17531
17532         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17533         means also structs.  This fixes part of the problem. 
17534         (Expresion.ImplicitReferenceConversionExists): ditto.
17535
17536         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17537         error if there were no errors reported during the type lookup
17538         process, to avoid duplicates or redundant errors.  Without this
17539         you would get an ambiguous errors plus a type not found.  We have
17540         beaten the user enough with the first error.  
17541
17542         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17543         reference. 
17544
17545         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17546         during the resolution process, stop the lookup, this avoids
17547         repeated error reports (same error twice).
17548
17549         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17550
17551         * typemanager.cs (LookupType): Redo the type lookup code to match
17552         the needs of System.Reflection.  
17553
17554         The issue is that System.Reflection requires references to nested
17555         types to begin with a "+" sign instead of a dot.  So toplevel
17556         types look like: "NameSpace.TopLevelClass", and nested ones look
17557         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17558         levels. 
17559
17560 2002-09-19  Martin Baulig  <martin@gnome.org>
17561
17562         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17563         says that a method always returns or always throws an exception,
17564         don't report the CS0161.
17565
17566         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17567         set `Returns = new_returns'.
17568
17569 2002-09-19  Martin Baulig  <martin@gnome.org>
17570
17571         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17572         to an enum constant, check for a CS0176.
17573
17574 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17575
17576         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17577         for operators that must be in pairs and report errors.
17578
17579         * ecore.cs (SimpleName.DoResolveType): During the initial type
17580         resolution process, when we define types recursively, we must
17581         check first for types in our current scope before we perform
17582         lookups in the enclosing scopes.
17583
17584         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17585
17586         (Invocation.VerifyArgumentsCompat): Call
17587         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17588         I thought we were supposed to always call this, but there are a
17589         few places in the code where we dont do it.
17590
17591 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17592
17593         * driver.cs: Add support in -linkres and -resource to specify the
17594         name of the identifier.
17595
17596 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17597
17598         * ecore.cs (StandardConversionExists): Sync with the conversion
17599         code: allow anything-* to void* conversions.
17600
17601         (FindMostSpecificSource): Use an Expression argument
17602         instead of a Type, because we might be handed over a Literal which
17603         gets a few more implicit conversions that plain types do not.  So
17604         this information was being lost.
17605
17606         Also, we drop the temporary type-holder expression when not
17607         required.
17608
17609 2002-09-17  Martin Baulig  <martin@gnome.org>
17610
17611         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17612         this is an explicit interface implementation.
17613
17614 2002-09-17  Martin Baulig  <martin@gnome.org>
17615
17616         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
17617         different `IndexerName' attributes.
17618
17619         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
17620         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
17621         virtual CommonResolve().
17622
17623 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17624
17625         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
17626         and convert that to the UnderlyingType.
17627
17628         * statement.cs (Foreach.Resolve): Indexers are just like variables
17629         or PropertyAccesses.
17630
17631         * cs-tokenizer.cs (consume_string): Track line numbers and columns
17632         inside quoted strings, we were not doing this before.
17633
17634 2002-09-16  Martin Baulig  <martin@gnome.org>
17635
17636         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
17637         resolve it.  This is needed for the definite assignment check of the
17638         instance expression, fixes bug #29846.
17639         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
17640
17641 2002-09-16  Nick Drochak  <ndrochak@gol.com>
17642
17643         * parameter.cs: Fix compile error.  Cannot reference static member
17644         from an instance object.  Is this an mcs bug?
17645
17646 2002-09-14  Martin Baulig  <martin@gnome.org>
17647
17648         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
17649         multiple times.  Fixes bug #30295, added test-166.cs.
17650
17651 2002-09-14  Martin Baulig  <martin@gnome.org>
17652
17653         * statement.cs (Block.Emit): Don't emit unreachable code.
17654         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
17655         `break' statements.
17656         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
17657
17658 2002-09-14  Martin Baulig  <martin@gnome.org>
17659
17660         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
17661         is set.
17662
17663 2002-09-14  Martin Baulig  <martin@gnome.org>
17664
17665         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
17666         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
17667         be false on the ms runtime.
17668
17669 2002-09-13  Martin Baulig  <martin@gnome.org>
17670
17671         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
17672         the CS0038 error message.
17673
17674 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
17675
17676         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
17677         constant inside, return it.
17678
17679 2002-09-12  Martin Baulig  <martin@gnome.org>
17680
17681         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
17682         implicit conversion can be done between enum types.
17683
17684         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
17685         check whether an implicit conversion to the current enum's UnderlyingType
17686         exists and report an error if not.
17687
17688         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
17689         without debugging support.
17690
17691         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
17692         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
17693
17694 2002-09-12  Martin Baulig  <martin@gnome.org>
17695
17696         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
17697
17698         * ecore.cs (IMemberExpr.DeclaringType): New property.
17699         (SimpleName.SimpleNameResolve): Check whether we're accessing a
17700         nonstatic member of an outer type (CS0038).
17701
17702 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
17703
17704         * driver.cs: Activate the using-error detector at warning level
17705         4 (at least for MS-compatible APIs).
17706
17707         * namespace.cs (VerifyUsing): Small buglett fix.
17708
17709         * pending.cs (PendingImplementation): pass the container pointer. 
17710
17711         * interface.cs (GetMethods): Allow for recursive definition.  Long
17712         term, I would like to move every type to support recursive
17713         definitions, not the current ordering mechanism that we have right
17714         now.
17715
17716         The situation is this: Attributes are handled before interfaces,
17717         so we can apply attributes to interfaces.  But some attributes
17718         implement interfaces, we will now handle the simple cases
17719         (recursive definitions will just get an error).  
17720
17721         * parameter.cs: Only invalidate types at the end if we fail to
17722         lookup all types.  
17723
17724 2002-09-09  Martin Baulig  <martin@gnome.org>
17725
17726         * ecore.cs (PropertyExpr.Emit): Also check for
17727         TypeManager.system_int_array_get_length so this'll also work when
17728         compiling corlib.  Fixes #30003.
17729
17730 2002-09-09  Martin Baulig  <martin@gnome.org>
17731
17732         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
17733         and throw an exception if we can't get the type's size.  Fixed #30040,
17734         added test-165.cs.
17735
17736 2002-09-09  Martin Baulig  <martin@gnome.org>
17737
17738         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
17739
17740         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
17741         context.  Fixes bug #30027.
17742
17743         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
17744         virtual functions.  Fixes bug #30043, added test-164.cs.
17745
17746 2002-09-08  Ravi Pratap  <ravi@ximian.com>
17747
17748         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
17749
17750 2002-09-08  Nick Drochak  <ndrochak@gol.com>
17751
17752         * driver.cs: Use an object to get the windows codepage since it's not a
17753         static property.
17754
17755 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
17756
17757         * statement.cs (For.Emit): for infinite loops (test == null)
17758         return whether there is a break inside, not always "true".
17759
17760         * namespace.cs (UsingEntry): New struct to hold the name of the
17761         using definition, the location where it is defined, and whether it
17762         has been used in a successful type lookup.
17763
17764         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
17765         strings.
17766
17767         * decl.cs: ditto.
17768
17769 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17770
17771         * attribute.cs : Fix incorrect code which relied on catching
17772         a NullReferenceException to detect a null being passed in
17773         where an object was expected.
17774
17775 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
17776
17777         * statement.cs (Try): flag the catch variable as assigned
17778
17779         * expression.cs (Cast): Simplified by using ResolveType instead of
17780         manually resolving.
17781
17782         * statement.cs (Catch): Fix bug by using ResolveType.
17783
17784 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17785
17786         * expression.cs (BetterConversion): Special case for when we have
17787         a NullLiteral as the argument and we have to choose between string
17788         and object types - we choose string the way csc does.
17789
17790         * attribute.cs (Attribute.Resolve): Catch the
17791         NullReferenceException and report error #182 since the Mono
17792         runtime no more has the bug and having this exception raised means
17793         we tried to select a constructor which takes an object and is
17794         passed a null.
17795
17796 2002-09-05  Ravi Pratap  <ravi@ximian.com>
17797
17798         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
17799         message (1502, 1503) when we can't locate a method after overload
17800         resolution. This is much more informative and closes the bug
17801         Miguel reported.
17802
17803         * interface.cs (PopulateMethod): Return if there are no argument
17804         types. Fixes a NullReferenceException bug.
17805
17806         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
17807         expressions too. Previously we were checking only in one place for
17808         positional arguments leaving out named arguments.
17809
17810         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
17811         type to the enum type is not allowed. Remove code corresponding to
17812         that.
17813
17814         (ConvertNumericExplicit): Allow explicit conversions from
17815         the underlying type to enum type. This precisely follows the spec
17816         and closes a bug filed by Gonzalo.
17817
17818 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17819
17820         * compiler.csproj:
17821         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
17822
17823 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
17824
17825         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
17826         it was important that we stored the right value after the
17827         reduction in `converted'.
17828
17829 2002-09-04  Martin Baulig  <martin@gnome.org>
17830
17831         * location.cs (Location.SymbolDocument): Use full pathnames for the
17832         source files.
17833
17834 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
17835
17836         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
17837         of the expression resolve mechanism, because that will catch the
17838         SimpleName error failures.
17839
17840         (Conditional): If we can not resolve the
17841         expression, return, do not crash.
17842
17843 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17844
17845         * cs-tokenizer.cs:
17846         (location): display token name instead of its number.
17847
17848 2002-08-28  Martin Baulig  <martin@gnome.org>
17849
17850         * expression.cs (Binary.ResolveOperator): Don't silently return
17851         but return an error if an operator cannot be applied between two
17852         enum types.
17853
17854 2002-08-28  Martin Baulig  <martin@gnome.org>
17855
17856         * class.cs (Constructor.Define): Set the permission attributes
17857         correctly instead of making all constructors public.
17858
17859 2002-08-28  Martin Baulig  <martin@gnome.org>
17860
17861         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
17862         for private members before reporting a CS0103; if we find anything,
17863         it's a CS0122.
17864
17865 2002-08-28  Martin Baulig  <martin@gnome.org>
17866
17867         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
17868         to check whether `closure_start_type == closure_invocation_type',
17869         we also need to check whether `m.DeclaringType == closure_invocation_type'
17870         before bypassing the permission checks.  We might be accessing
17871         protected/private members from the base class.
17872         (TypeManager.RealMemberLookup): Only set private_ok if private
17873         members were requested via BindingFlags.NonPublic.
17874
17875         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
17876
17877         * expression.cs (MemberAccess.ResolveMemberAccess): Set
17878         MethodGroupExpr.IsExplicitImpl if appropriate.
17879         (Invocation.DoResolve): Don't report the CS0120 for explicit
17880         interface implementations.
17881
17882 2002-08-27  Martin Baulig  <martin@gnome.org>
17883
17884         * expression.cs (Invocation.DoResolve): If this is a static
17885         method and we don't have an InstanceExpression, we must report
17886         a CS0120.
17887
17888 2002-08-25  Martin Baulig  <martin@gnome.org>
17889
17890         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
17891         `==' between a valuetype and an object.
17892
17893 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
17894
17895         * ecore.cs (TypeExpr): Provide a ToString method.
17896
17897 2002-08-24  Martin Baulig  <martin@gnome.org>
17898
17899         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
17900         now called proggie.dbg and it's a binary file.
17901
17902 2002-08-23  Martin Baulig  <martin@gnome.org>
17903
17904         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
17905
17906 2002-08-23  Martin Baulig  <martin@gnome.org>
17907
17908         * struct.cs (MyStructInfo.ctor): Make this work with empty
17909         structs; it's not allowed to use foreach() on null.
17910
17911 2002-08-23  Martin Baulig  <martin@gnome.org>
17912
17913         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
17914         writer the full pathname of the generated assembly.
17915
17916 2002-08-23  Martin Baulig  <martin@gnome.org>
17917
17918         * statements.cs (FlowBranching.UsageVector.MergeChildren):
17919         A `finally' block never returns or breaks; improved handling of
17920         unreachable code.
17921
17922 2002-08-23  Martin Baulig  <martin@gnome.org>
17923
17924         * statement.cs (Throw.Resolve): Allow `throw null'.
17925
17926 2002-08-23  Martin Baulig  <martin@gnome.org>
17927
17928         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
17929         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
17930         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
17931         MemberLookup would return a wrong event if this is an explicit
17932         interface implementation and the class has an event with the same
17933         name.
17934
17935 2002-08-23  Martin Baulig  <martin@gnome.org>
17936
17937         * statement.cs (Block.AddChildVariableNames): New public method.
17938         (Block.AddChildVariableName): Likewise.
17939         (Block.IsVariableNameUsedInChildBlock): Likewise.
17940         (Block.AddVariable): Check whether a variable name has already
17941         been used in a child block.
17942
17943         * cs-parser.jay (declare_local_variables): Mark all variable names
17944         from the current block as being used in a child block in the
17945         implicit block.
17946
17947 2002-08-23  Martin Baulig  <martin@gnome.org>
17948
17949         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
17950         find the symbol writer.
17951
17952         * driver.cs: csc also allows the arguments to /define being
17953         separated by commas, not only by semicolons.
17954
17955 2002-08-23  Martin Baulig  <martin@gnome.org>
17956
17957         * interface.cs (Interface.GetMembers): Added static check for events.
17958
17959 2002-08-15  Martin Baulig  <martin@gnome.org>
17960
17961         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
17962         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
17963
17964         * ecore.cs (Expression.MemberLookup): Added documentation and explained
17965         why the MethodData.EmitDestructor() change was necessary.
17966
17967 2002-08-20  Martin Baulig  <martin@gnome.org>
17968
17969         * class.cs (TypeContainer.FindMembers): Added static check for events.
17970
17971         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
17972
17973         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
17974         use Type.GetEvents(), not Type.FindMembers().
17975
17976 2002-08-20  Martin Baulig  <martin@gnome.org>
17977
17978         * decl.cs (MemberCache): Added a special method cache which will
17979         be used for method-only searched.  This ensures that a method
17980         search will return a MethodInfo with the correct ReflectedType for
17981         inherited methods.      
17982
17983 2002-08-20  Martin Baulig  <martin@gnome.org>
17984
17985         * decl.cs (DeclSpace.FindMembers): Made this public.
17986
17987 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17988
17989         * delegate.cs: fixed build on windows.
17990         [FIXME:  Filed as bug #29150: MCS must report these errors.]
17991
17992 2002-08-19  Ravi Pratap  <ravi@ximian.com>
17993
17994         * ecore.cs (StandardConversionExists): Return a false
17995         if we are trying to convert the void type to anything else
17996         since that is not allowed.
17997
17998         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
17999         we flag error 70 in the event an event is trying to be accessed
18000         directly from outside the declaring type.
18001
18002 2002-08-20  Martin Baulig  <martin@gnome.org>
18003
18004         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
18005         MemberCache from typemanager.cs to decl.cs.
18006
18007 2002-08-19  Martin Baulig  <martin@gnome.org>
18008
18009         * class.cs (TypeContainer): Implement IMemberContainer.
18010         (TypeContainer.DefineMembers): Create the MemberCache.
18011         (TypeContainer.FindMembers): Do better BindingFlags checking; only
18012         return public members if BindingFlags.Public was given, check
18013         whether members are static.
18014
18015 2002-08-16  Martin Baulig  <martin@gnome.org>
18016
18017         * decl.cs (DeclSpace.Define): Splitted this in Define and
18018         DefineMembers.  DefineMembers is called first and initializes the
18019         MemberCache.
18020
18021         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
18022         DefineMembers() on all our DeclSpaces.
18023
18024         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
18025         but call DefineMembers() on all nested interfaces.  We call their
18026         Define() in our new Define() function.
18027
18028         * interface.cs (Interface): Implement IMemberContainer.
18029         (Interface.Define): Moved all code except the attribute stuf to
18030         DefineMembers().
18031         (Interface.DefineMembers): Initialize the member cache.
18032
18033         * typemanager.cs (IMemberFinder): Removed this interface, we don't
18034         need this anymore since we can use MemberCache.FindMembers directly.
18035
18036 2002-08-19  Martin Baulig  <martin@gnome.org>
18037
18038         * typemanager.cs (MemberCache): When creating the cache for an
18039         interface type, add all inherited members.
18040         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
18041         to `out bool used_cache' and documented it.
18042         (TypeManager.MemberLookup): If we already used the cache in the first
18043         iteration, we don't need to do the interfaces check.
18044
18045 2002-08-19  Martin Baulig  <martin@gnome.org>
18046
18047         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
18048         here from IMemberFinder and don't implement this interface anymore.
18049         (DeclSpace.MemberCache): Moved here from IMemberFinder.
18050
18051         * typemanager.cs (IMemberFinder): This interface is now only used by
18052         classes which actually support the member cache.
18053         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
18054         since we only put DeclSpaces into this Hashtable.
18055         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
18056         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
18057
18058 2002-08-16  Martin Baulig  <martin@gnome.org>
18059
18060         * typemanager.cs (ICachingMemberFinder): Removed.
18061         (IMemberFinder.MemberCache): New property.
18062         (TypeManager.FindMembers): Merged this with RealFindMembers().
18063         This function will never be called from TypeManager.MemberLookup()
18064         so we can't use the cache here, just the IMemberFinder.
18065         (TypeManager.MemberLookup_FindMembers): Check whether the
18066         IMemberFinder has a MemberCache and call the cache's FindMembers
18067         function.
18068         (MemberCache): Rewrote larger parts of this yet another time and
18069         cleaned it up a bit.
18070
18071 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
18072
18073         * driver.cs (LoadArgs): Support quoting.
18074
18075         (Usage): Show the CSC-like command line arguments.
18076
18077         Improved a few error messages.
18078
18079 2002-08-15  Martin Baulig  <martin@gnome.org>
18080
18081         * typemanager.cs (IMemberContainer.Type): New property.
18082         (IMemberContainer.IsInterface): New property.
18083
18084         The following changes are conditional to BROKEN_RUNTIME, which is
18085         defined at the top of the file.
18086
18087         * typemanager.cs (MemberCache.MemberCache): Don't add the base
18088         class'es members, but add all members from TypeHandle.ObjectType
18089         if we're an interface.
18090         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
18091         is the current type.
18092         (MemberCache.CacheEntry.Container): Removed this field.
18093         (TypeHandle.GetMembers): Include inherited members.
18094
18095 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18096
18097         * typemanager.cs: fixed compilation and added a comment on a field that
18098         is never used.
18099
18100 2002-08-15  Martin Baulig  <martin@gnome.org>
18101
18102         * class.cs (ConstructorInitializer.Resolve): In the
18103         Expression.MemberLookup call, use the queried_type as
18104         invocation_type.
18105
18106         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
18107         declared' attribute, it's always true.
18108         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
18109         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
18110         temporary wrapper for FindMembers which tells MemberLookup whether
18111         members from the base classes are included in the return value.
18112         This will go away soon.
18113         (TypeManager.MemberLookup): Use this temporary hack here; once the
18114         new MemberCache is completed, we don't need to do the DeclaredOnly
18115         looping here anymore since the MemberCache will take care of this.
18116         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
18117         (MemberCache): When creating the MemberCache for a class, get
18118         members from the current class and all its base classes.
18119         (MemberCache.CacheEntry.Container): New field.  This is a
18120         temporary hack until the Mono runtime is fixed to distinguish
18121         between ReflectedType and DeclaringType.  It allows us to use MCS
18122         with both the MS runtime and the unfixed Mono runtime without
18123         problems and without accecting performance.
18124         (MemberCache.SearchMembers): The DeclaredOnly looping from
18125         TypeManager.MemberLookup is now done here.      
18126
18127 2002-08-14  Martin Baulig  <martin@gnome.org>
18128
18129         * statement.cs (MyStructInfo.MyStructInfo): Don't call
18130         Type.GetFields on dynamic types but get the fields from the
18131         corresponding TypeContainer.
18132         (MyStructInfo.GetStructInfo): Added check for enum types.
18133
18134         * typemanager.cs (MemberList.IsSynchronized): Implemented.
18135         (MemberList.SyncRoot): Implemented.
18136         (TypeManager.FilterWithClosure): No need to check permissions if
18137         closure_start_type == closure_invocation_type, don't crash if
18138         closure_invocation_type is null.
18139
18140 2002-08-13  Martin Baulig  <martin@gnome.org>
18141
18142         Rewrote TypeContainer.FindMembers to use a member cache.  This
18143         gives us a speed increase of about 35% for the self-hosting MCS
18144         build and of about 15-20% for the class libs (both on GNU/Linux).
18145
18146         * report.cs (Timer): New class to get enhanced profiling.  This
18147         whole class is "TIMER" conditional since it remarkably slows down
18148         compilation speed.
18149
18150         * class.cs (MemberList): New class.  This is an IList wrapper
18151         which we're now using instead of passing MemberInfo[]'s around to
18152         avoid copying this array unnecessarily.
18153         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
18154         (ICachingMemberFinder, IMemberContainer): New interface.
18155         (TypeManager.FilterWithClosure): If `criteria' is null, the name
18156         has already been checked, otherwise use it for the name comparision.
18157         (TypeManager.FindMembers): Renamed to RealMemberFinder and
18158         provided wrapper which tries to use ICachingMemberFinder.FindMembers
18159         if possible.  Returns a MemberList, not a MemberInfo [].
18160         (TypeHandle): New class, implements IMemberContainer.  We create
18161         one instance of this class per type, it contains a MemberCache
18162         which is used to do the member lookups.
18163         (MemberCache): New class.  Each instance of this class contains
18164         all members of a type and a name-based hash table.
18165         (MemberCache.FindMembers): This is our new member lookup
18166         function.  First, it looks up all members of the requested name in
18167         the hash table.  Then, it walks this list and sorts out all
18168         applicable members and returns them.
18169
18170 2002-08-13  Martin Baulig  <martin@gnome.org>
18171
18172         In addition to a nice code cleanup, this gives us a performance
18173         increase of about 1.4% on GNU/Linux - not much, but it's already
18174         half a second for the self-hosting MCS compilation.
18175
18176         * typemanager.cs (IMemberFinder): New interface.  It is used by
18177         TypeManager.FindMembers to call FindMembers on a TypeContainer,
18178         Enum, Delegate or Interface.
18179         (TypeManager.finder_to_member_finder): New PtrHashtable.
18180         (TypeManager.finder_to_container): Removed.
18181         (TypeManager.finder_to_delegate): Removed.
18182         (TypeManager.finder_to_interface): Removed.
18183         (TypeManager.finder_to_enum): Removed.
18184
18185         * interface.cs (Interface): Implement IMemberFinder.
18186
18187         * delegate.cs (Delegate): Implement IMemberFinder.
18188
18189         * enum.cs (Enum): Implement IMemberFinder.
18190
18191         * class.cs (TypeContainer): Implement IMemberFinder.
18192
18193 2002-08-12  Martin Baulig  <martin@gnome.org>
18194
18195         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
18196
18197 2002-08-12  Martin Baulig  <martin@gnome.org>
18198
18199         * ecore.cs (ITypeExpression): New interface for expressions which
18200         resolve to a type.
18201         (TypeExpression): Renamed to TypeLookupExpression.
18202         (Expression.DoResolve): If we're doing a types-only lookup, the
18203         expression must implement the ITypeExpression interface and we
18204         call DoResolveType() on it.
18205         (SimpleName): Implement the new ITypeExpression interface.
18206         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
18207         hack, the situation that we're only looking up types can't happen
18208         anymore when this method is called.  Moved the type lookup code to
18209         DoResolveType() and call it.
18210         (SimpleName.DoResolveType): This ITypeExpression interface method
18211         is now doing the types-only lookup.
18212         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
18213         (ResolveFlags): Added MaskExprClass.
18214
18215         * expression.cs (MemberAccess): Implement the ITypeExpression
18216         interface.
18217         (MemberAccess.DoResolve): Added support for a types-only lookup
18218         when we're called via ITypeExpression.DoResolveType().
18219         (ComposedCast): Implement the ITypeExpression interface.
18220
18221         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
18222         Expression.Resolve() with ResolveFlags.Type instead.
18223
18224 2002-08-12  Martin Baulig  <martin@gnome.org>
18225
18226         * interface.cs (Interface.Define): Apply attributes.
18227
18228         * attribute.cs (Attribute.ApplyAttributes): Added support for
18229         interface attributes.
18230
18231 2002-08-11  Martin Baulig  <martin@gnome.org>
18232
18233         * statement.cs (Block.Emit): Only check the "this" variable if we
18234         do not always throw an exception.
18235
18236         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
18237         whether the property has a set accessor.
18238
18239 2002-08-11  Martin Baulig  <martin@gnome.org>
18240
18241         Added control flow analysis support for structs.
18242
18243         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
18244         with control flow analysis turned off.
18245         (IVariable): New interface.
18246         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
18247         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
18248         (FieldExpr.DoResolve): Resolve the instance expression with flow
18249         analysis turned off and do the definite assignment check after the
18250         resolving when we know what the expression will resolve to.
18251
18252         * expression.cs (LocalVariableReference, ParameterReference):
18253         Implement the new IVariable interface, only call the flow analysis
18254         code if ec.DoFlowAnalysis is true.
18255         (This): Added constructor which takes a Block argument.  Implement
18256         the new IVariable interface.
18257         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
18258         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
18259         This does the definite assignment checks for struct members.
18260
18261         * class.cs (Constructor.Emit): If this is a non-static `struct'
18262         constructor which doesn't have any initializer, call
18263         Block.AddThisVariable() to tell the flow analysis code that all
18264         struct elements must be initialized before control returns from
18265         the constructor.
18266
18267         * statement.cs (MyStructInfo): New public class.
18268         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
18269         argument to this indexer.  If non-zero, check an individual struct
18270         member, not the whole struct.
18271         (FlowBranching.CheckOutParameters): Check struct members.
18272         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
18273         overloaded versions of these methods which take an additional
18274         `int field_idx' argument to check struct members.
18275         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
18276         overloaded versions of these methods which take an additional
18277         `string field_name' argument to check struct member.s
18278         (VariableInfo): Implement the IVariable interface.
18279         (VariableInfo.StructInfo): New public property.  Returns the
18280         MyStructInfo instance of the variable if it's a struct or null.
18281         (Block.AddThisVariable): New public method.  This is called from
18282         Constructor.Emit() for non-static `struct' constructor which do
18283         not have any initializer.  It creates a special variable for the
18284         "this" instance variable which will be checked by the flow
18285         analysis code to ensure that all of the struct's fields are
18286         initialized before control returns from the constructor.
18287         (UsageVector): Added support for struct members.  If a
18288         variable/parameter is a struct with N members, we reserve a slot
18289         in the usage vector for each member.  A struct is considered fully
18290         initialized if either the struct itself (slot 0) or all its
18291         members are initialized.
18292
18293 2002-08-08  Martin Baulig  <martin@gnome.org>
18294
18295         * driver.cs (Driver.MainDriver): Only report an error CS5001
18296         if there were no compilation errors.
18297
18298         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
18299         `UnsafeContext' property to determine whether the parent is in
18300         unsafe context rather than checking the parent's ModFlags:
18301         classes nested in an unsafe class are unsafe as well.
18302
18303 2002-08-08  Martin Baulig  <martin@gnome.org>
18304
18305         * statement.cs (UsageVector.MergeChildren): Distinguish between
18306         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
18307         we return.  Added test17() and test18() to test-154.cs.
18308
18309 2002-08-08  Martin Baulig  <martin@gnome.org>
18310
18311         * typemanager.cs (TypeManager.FilterWithClosure): If we have
18312         Family access, make sure the invoking type isn't a subclass of the
18313         queried type (that'd be a CS1540).
18314
18315         * ecore.cs (Expression.MemberLookup): Added overloaded version of
18316         this method which takes an additional `Type invocation_type'.
18317
18318         * expression.cs (BaseAccess.DoResolve): Use the base type as
18319         invocation and query type.
18320         (MemberAccess.DoResolve): If the lookup failed and we're about to
18321         report a CS0122, try a lookup with the ec.ContainerType - if this
18322         succeeds, we must report a CS1540.
18323
18324 2002-08-08  Martin Baulig  <martin@gnome.org>
18325
18326         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
18327         (MethodGroupExpr): Implement the IMemberExpr interface.
18328
18329         * expression (MemberAccess.ResolveMemberAccess): No need to have
18330         any special code for MethodGroupExprs anymore, they're now
18331         IMemberExprs.   
18332
18333 2002-08-08  Martin Baulig  <martin@gnome.org>
18334
18335         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
18336         Family, FamANDAssem and FamORAssem permissions.
18337         (TypeManager.IsSubclassOrNestedChildOf): New public method.
18338
18339 2002-08-08  Martin Baulig  <martin@gnome.org>
18340
18341         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
18342         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
18343         or loop block.
18344
18345 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
18346
18347         * driver.cs: implemented /resource option to embed managed resources.
18348
18349 2002-08-07  Martin Baulig  <martin@gnome.org>
18350
18351         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
18352         (FieldBase.HasFieldInitializer): New public property.
18353         (FieldBase.GetInitializerExpression): New public method.  Resolves and
18354         returns the field initializer and makes sure it is only resolved once.
18355         (TypeContainer.EmitFieldInitializers): Call
18356         FieldBase.GetInitializerExpression to get the initializer, this ensures
18357         that it isn't resolved multiple times.
18358
18359         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
18360         the resolving process (SimpleName/MemberLookup) that we're currently
18361         emitting a field initializer (which must not access any instance members,
18362         this is an error CS0236).
18363
18364         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
18365         argument, if the `IsFieldInitializer' flag is set, we must report and
18366         error CS0236 and not an error CS0120.   
18367
18368 2002-08-07  Martin Baulig  <martin@gnome.org>
18369
18370         * ecore.cs (IMemberExpr): New public interface.
18371         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
18372         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
18373         if the expression is an IMemberExpr.
18374
18375         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
18376         to be null, implicitly default to `this' if we're non-static in
18377         this case.  Simplified the code a lot by using the new IMemberExpr
18378         interface.  Also fixed bug #28176 here.
18379
18380 2002-08-06  Martin Baulig  <martin@gnome.org>
18381
18382         * cs-parser.jay (SimpleLookup): Removed.  We need to create
18383         ParameterReferences during semantic analysis so that we can do a
18384         type-only search when resolving Cast, TypeOf and SizeOf.
18385         (block): Pass the `current_local_parameters' to the Block's
18386         constructor.
18387
18388         * class.cs (ConstructorInitializer): Added `Parameters parameters'
18389         argument to the constructor.
18390         (ConstructorInitializer.Resolve): Create a temporary implicit
18391         block with the parameters.
18392
18393         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
18394         references here if we aren't doing a type-only search.
18395
18396         * statement.cs (Block): Added constructor which takes a
18397         `Parameters parameters' argument.
18398         (Block.Parameters): New public property.
18399
18400         * support.cs (InternalParameters.Parameters): Renamed `parameters'
18401         to `Parameters' and made it public readonly.
18402
18403 2002-08-06  Martin Baulig  <martin@gnome.org>
18404
18405         * ecore.cs (Expression.Warning): Made this public as well.
18406
18407         * report.cs (Report.Debug): Print the contents of collections.
18408
18409 2002-08-06  Martin Baulig  <martin@gnome.org>
18410
18411         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
18412         used to tell Resolve() which kinds of expressions it may return.
18413         (Expression.Resolve): Added overloaded version of this method which
18414         takes a `ResolveFlags flags' argument.  This can be used to tell
18415         Resolve() which kinds of expressions it may return.  Reports a
18416         CS0118 on error.
18417         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
18418         ResolveFlags.SimpleName.
18419         (Expression.Error118): Added overloaded version of this method which
18420         takes a `ResolveFlags flags' argument.  It uses the flags to determine
18421         which kinds of expressions are allowed.
18422
18423         * expression.cs (Argument.ResolveMethodGroup): New public method.
18424         Resolves an argument, but allows a MethodGroup to be returned.
18425         This is used when invoking a delegate.
18426
18427         * TODO: Updated a bit.
18428
18429 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18430
18431         Fixed compilation with csc.
18432
18433         * ecore.cs: Expression.Error made public. Is this correct? Should
18434         Warning be made public too?
18435
18436         * expression.cs: use ea.Location instead of ea.loc.
18437         [FIXME:  Filed as bug #28607: MCS must report these errors.]
18438
18439 2002-08-06  Martin Baulig  <martin@gnome.org>
18440
18441         * ecore.cs (Expression.loc): Moved the location here instead of
18442         duplicating it in all derived classes.
18443         (Expression.Location): New public property.
18444         (Expression.Error, Expression.Warning): Made them non-static and
18445         removed the location argument.
18446         (Expression.Warning): Added overloaded version which takes an
18447         `int level' argument.
18448         (Expression.Error118): Make this non-static and removed the
18449         expression and location arguments.
18450         (TypeExpr): Added location argument to the constructor.
18451
18452         * expression.cs (StaticCallExpr): Added location argument to
18453         the constructor.
18454         (Indirection, PointerArithmetic): Likewise.
18455         (CheckedExpr, UnCheckedExpr): Likewise.
18456         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
18457         (StringPtr): Likewise.
18458
18459
18460 2002-08-05  Martin Baulig  <martin@gnome.org>
18461
18462         * expression.cs (BaseAccess.DoResolve): Actually report errors.
18463
18464         * assign.cs (Assign.DoResolve): Check whether the source
18465         expression is a value or variable.
18466
18467         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
18468         while resolving the corresponding blocks.
18469
18470         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
18471         an error, don't silently return null.
18472
18473         * statement.cs (Block.AddVariable): Do the error reporting here
18474         and distinguish between CS0128 and CS0136.
18475         (Block.DoResolve): Report all unused labels (warning CS0164).
18476         (LabeledStatement): Pass the location to the constructor.
18477         (LabeledStatement.HasBeenReferenced): New property.
18478         (LabeledStatement.Resolve): Set it to true here.
18479
18480         * statement.cs (Return.Emit): Return success even after reporting
18481         a type mismatch error (CS0126 or CS0127), this is what csc does and
18482         it avoids confusing the users with any consecutive errors.
18483
18484 2002-08-05  Martin Baulig  <martin@gnome.org>
18485
18486         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18487
18488         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18489
18490         * expression.cs (MemberAccess.DoResolve): Silently return if an
18491         error has already been reported.
18492
18493         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18494         error has already been reported.
18495
18496 2002-08-05  Martin Baulig  <martin@gnome.org>
18497
18498         * statement.cs (UsageVector): Only initialize the `parameters'
18499         vector if we actually have any "out" parameters.
18500
18501 2002-08-05  Martin Baulig  <martin@gnome.org>
18502
18503         * expression.cs (Binary.ResolveOperator): When combining delegates,
18504         they must have the same type.
18505
18506 2002-08-05  Martin Baulig  <martin@gnome.org>
18507
18508         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18509         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18510         work with the ms runtime and we also don't need it: if we're a
18511         PropertyBuilder and not in the `indexer_arguments' hash, then we
18512         are a property and not an indexer.
18513
18514         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18515         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18516         since the latter one doesn't work with the ms runtime.
18517
18518 2002-08-03  Martin Baulig  <martin@gnome.org>
18519
18520         Fixed bugs #27998 and #22735.
18521
18522         * class.cs (Method.IsOperator): New public field.
18523         (Method.CheckBase): Report CS0111 if there's already a method
18524         with the same parameters in the current class.  Report CS0508 when
18525         attempting to change the return type of an inherited method.
18526         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18527         and it's not marked abstract or extern.
18528         (PropertyBase): New abstract base class for Property and Indexer.
18529         (PropertyBase.CheckBase): Moved here from Property and made it work
18530         for indexers.
18531         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18532         the same so we can reuse it there.
18533         (Property, Indexer): Derive from PropertyBase.
18534         (MethodSignature.inheritable_property_signature_filter): New delegate
18535         to find properties and indexers.
18536
18537         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18538         argument and improved error reporting.
18539
18540         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18541         EmptyReadOnlyParameters and made it a property.
18542
18543         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18544         version of this method which takes a `PropertyInfo indexer'.
18545         (TypeManager.RegisterIndexer): New method.
18546
18547         * class.cs: Added myself as author of this file :-)
18548
18549 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18550
18551         * class.cs: fixed compilation on windoze.
18552
18553 2002-08-03  Martin Baulig  <martin@gnome.org>
18554
18555         * interface.cs (Interface.GetInterfaceBases): Check whether all
18556         base interfaces are at least as accessible than the current one.
18557
18558         * class.cs (TypeContainer.GetClassBases): Check whether base types
18559         are at least as accessible than the current type.
18560         (TypeContainer.AsAccessible): Implemented and made non-static.
18561         (MemberBase.CheckParameters): Report errors if the accessibility
18562         checks fail.
18563
18564         * delegate.cs (Delegate.Delegate): The default visibility is
18565         internal for top-level types and private for nested types.
18566         (Delegate.Define): Report errors if the accessibility checks fail.
18567
18568         * enum.cs (Enum.Enum): The default visibility is internal for
18569         top-level types and private for nested types.
18570         (Enum.DefineType): Compute the correct visibility.
18571
18572         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18573         function which takes a `bool is_toplevel' instead of a TypeContainer.
18574
18575         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18576         builtin type.
18577
18578 2002-08-02  Martin Baulig  <martin@gnome.org>
18579
18580         * expression.cs (LocalVariableReferenc): Added constructor which
18581         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18582         (LocalVariableReference.IsReadOnly): New property.
18583         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18584         variable is readonly, use our own readonly flag to do this; you can
18585         use the new constructor to get a writable reference to a read-only
18586         variable.
18587
18588         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18589         reference to the local variable.
18590
18591 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18592
18593         * rootcontext.cs (ResolveCore): Also include System.Exception
18594
18595         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18596         we reach an EmptyStatement.
18597
18598         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18599         is also fine.
18600
18601         * expression.cs (Binary.ResolveOperator): Check error result in
18602         two places.
18603
18604         use brtrue/brfalse directly and avoid compares to null.
18605
18606 2002-08-02  Martin Baulig  <martin@gnome.org>
18607
18608         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18609         Fixes bug #28407, added test-155.cs.
18610
18611 2002-08-01  Martin Baulig  <martin@gnome.org>
18612
18613         * class.cs (Event.EmitDefaultMethod): Make this work with static
18614         events.  Fixes #28311, added verify-3.cs.
18615
18616 2002-08-01  Martin Baulig  <martin@gnome.org>
18617
18618         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
18619         `is_disposable' fields.
18620         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
18621         `hm.is_disposable' if we're using the collection pattern.
18622         (Foreach.EmitCollectionForeach): Use the correct type for the
18623         enumerator's local variable, only emit the try/finally block if
18624         necessary (fixes #27713).
18625
18626 2002-08-01  Martin Baulig  <martin@gnome.org>
18627
18628         * ecore.cs (Expression.report118): Renamed to Error118 and made
18629         it public static.
18630
18631         * statement.cs (Throw.Resolve): Check whether the expression is of
18632         the correct type (CS0118) and whether the type derives from
18633         System.Exception (CS0155).
18634         (Catch.Resolve): New method.  Do the type lookup here and check
18635         whether it derives from System.Exception (CS0155).
18636         (Catch.CatchType, Catch.IsGeneral): New public properties.
18637
18638         * typemanager.cs (TypeManager.exception_type): Added.
18639
18640 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
18641
18642         * driver.cs: Updated About function.
18643
18644 2002-07-31  Martin Baulig  <martin@gnome.org>
18645
18646         Implemented Control Flow Analysis.
18647
18648         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
18649         (EmitContext.CurrentBranching): Added.
18650         (EmitContext.StartFlowBranching): Added.
18651         (EmitContext.EndFlowBranching): Added.
18652         (EmitContext.KillFlowBranching): Added.
18653         (EmitContext.IsVariableAssigned): Added.
18654         (EmitContext.SetVariableAssigned): Added.
18655         (EmitContext.IsParameterAssigned): Added.
18656         (EmitContext.SetParameterAssigned): Added.
18657         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
18658         Added control flow analysis stuff here.
18659
18660         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
18661         resolve the expression as lvalue.
18662         (LocalVariableReference.DoResolve): Check whether the variable has
18663         already been assigned.
18664         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
18665         the parameter as assigned here.
18666         (ParameterReference.DoResolve): Check whether the parameter has already
18667         been assigned.
18668         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
18669         expression as lvalue.
18670
18671         * statement.cs (FlowBranching): New class for the flow analysis code.
18672         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
18673         (LabeledStatement.IsDefined): New public property.
18674         (LabeledStatement.AddUsageVector): New public method to tell flow
18675         analyis that the label may be reached via a forward jump.
18676         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
18677         flow analysis.
18678         (VariableInfo.Number): New public field.  This is used by flow analysis
18679         to number all locals of a block.
18680         (Block.CountVariables): New public property.  This is the number of
18681         local variables in this block (including the locals from all parent
18682         blocks).
18683         (Block.EmitMeta): Number all the variables.
18684
18685         * statement.cs: Added flow analysis support to all classes.
18686
18687 2002-07-31  Martin Baulig  <martin@gnome.org>
18688
18689         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
18690         To get debugging messages, compile mcs with /define:MCS_DEBUG and
18691         then use this argument.
18692
18693         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
18694
18695         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
18696         use this to specify /define options.
18697
18698 2002-07-29  Martin Baulig  <martin@gnome.org>
18699
18700         * statement.cs (Fixed): Moved all code that does variable lookups
18701         and resolvings from Emit to Resolve.
18702
18703         * statement.cs (For): Moved all code that does variable lookups
18704         and resolvings from Emit to Resolve.
18705
18706         * statement.cs (Using): Moved all code that does variable lookups
18707         and resolvings from Emit to Resolve.
18708
18709 2002-07-29  Martin Baulig  <martin@gnome.org>
18710
18711         * attribute.cs (Attribute.Resolve): Explicitly catch a
18712         System.NullReferenceException when creating the
18713         CustromAttributeBuilder and report a different warning message.
18714
18715 2002-07-29  Martin Baulig  <martin@gnome.org>
18716
18717         * support.cs (ParameterData.ParameterName): Added method to
18718         get the name of a parameter.
18719
18720         * typemanager.cs (TypeManager.IsValueType): New public method.
18721
18722 2002-07-29  Martin Baulig  <martin@gnome.org>
18723
18724         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
18725         is a flag which specifies that it's either ref or out.
18726         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
18727         the out parameter to `out Parameter.Modifier mod', also set the
18728         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
18729
18730         * support.cs (InternalParameters.ParameterModifier): Distinguish
18731         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18732         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18733
18734         * expression.cs (Argument.GetParameterModifier): Distinguish
18735         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18736         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18737
18738 2002-07-29  Martin Baulig  <martin@gnome.org>
18739
18740         * expression.cs (ParameterReference.ParameterReference): Added
18741         `Location loc' argument to the constructor.
18742
18743         * cs-parser.jay: Pass location to ParameterReference.
18744
18745 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
18746
18747         * statement.cs (Try): Initialize the location.
18748
18749         * cs-parser.jay: pass location to Try.
18750
18751         * expression.cs (Unary.Reduce): Change the prototype to return
18752         whether a constant fold could be performed or not.  The result is
18753         returned in an out parameters.  In the case of Indirection and
18754         AddressOf, we want to perform the full tests.
18755
18756 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
18757
18758         * statement.cs (Statement.Emit): Flag dead code.
18759
18760 2002-07-27  Andrew Birkett  <andy@nobugs.org>
18761
18762         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
18763
18764 2002-07-27  Martin Baulig  <martin@gnome.org>
18765
18766         * class.cs (MethodData.Define): Put back call to
18767         TypeManager.AddMethod(), accidentally commented this out.
18768
18769         * report.cs (Debug): New public method to print debugging information,
18770         this is `[Conditional ("DEBUG")]'.
18771
18772 2002-07-26  Martin Baulig  <martin@gnome.org>
18773
18774         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
18775         (switch_statement): Push the current_block to the switch_stack and
18776         pop it again when we're done with the switch.
18777         (switch_section): The new block is a child of the current_block.
18778         Fixes bug #24007, added test-152.cs.
18779
18780 2002-07-27  Martin Baulig  <martin@gnome.org>
18781
18782         * expression.cs (Invocation.EmitArguments): When calling a varargs
18783         function with only its fixed arguments, we need to pass an empty
18784         array.
18785
18786 2002-07-27  Martin Baulig  <martin@gnome.org>
18787
18788         Mono 0.13 has been released.
18789
18790 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
18791
18792         * driver.cs: Rename --resource to --linkres, because that is what
18793         we do currently, we dont support --resource yet.
18794
18795         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
18796
18797 2002-07-25  Martin Baulig  <martin@gnome.org>
18798
18799         * class.cs (MethodData): New public class.  This is a `method builder'
18800         class for a method or one accessor of a Property/Indexer/Event.
18801         (MethodData.GetMethodFlags): Moved here from MemberBase.
18802         (MethodData.ApplyAttributes): Likewise.
18803         (MethodData.ApplyObsoleteAttribute): Likewise.
18804         (MethodData.ApplyConditionalAttribute): Likewise.
18805         (MethodData.ApplyDllImportAttribute): Likewise.
18806         (MethodData.CheckAbstractAndExternal): Likewise.
18807         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
18808         (MethodData.Emit): Formerly known as Method.Emit().
18809         (MemberBase): Moved everything which was specific to a single
18810         accessor/method to MethodData.
18811         (Method): Create a new MethodData and call Define() and Emit() on it.
18812         (Property, Indexer, Event): Create a new MethodData objects for each
18813         accessor and call Define() and Emit() on them.
18814
18815 2002-07-25  Martin Baulig  <martin@gnome.org>
18816
18817         Made MethodCore derive from MemberBase to reuse the code from there.
18818         MemberBase now also checks for attributes.
18819
18820         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
18821         (MemberBase.GetMethodFlags): Moved here from class Method and marked
18822         as virtual.
18823         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
18824         `CallingConventions cc' and `Attributes opt_attrs' arguments.
18825         (MemberBase.ApplyAttributes): New virtual method; applies the
18826         attributes to a method or accessor.
18827         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
18828         (MemberBase.ApplyConditionalAttribute): Likewise.
18829         (MemberBase.ApplyDllImportAttribute): Likewise.
18830         (MemberBase.CheckAbstractAndExternal): Likewise.
18831         (MethodCore.ParameterTypes): This is now a property instead of a
18832         method, it's initialized from DoDefineParameters().
18833         (MethodCore.ParameterInfo): Removed the set accessor.
18834         (MethodCore.DoDefineParameters): New protected virtual method to
18835         initialize ParameterTypes and ParameterInfo.
18836         (Method.GetReturnType): We can now simply return the MemberType.
18837         (Method.GetMethodFlags): Override the MemberBase version and add
18838         the conditional flags.
18839         (Method.CheckBase): Moved some code from Define() here, call
18840         DoDefineParameters() here.
18841         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
18842         here to avoid some larger code duplication.
18843         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
18844         ensure that abstract and external accessors don't declare a body.
18845
18846         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
18847         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
18848         lookup in the attribute's parent classes, so we need to abort as soon
18849         as we found the first match.
18850         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
18851         the attribute has no arguments.
18852
18853         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
18854         of a Method.
18855
18856 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18857
18858         * cs-parser.jay: reverted previous patch.
18859
18860 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18861
18862         * cs-parser.jay: fixed bug #22119.
18863
18864 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18865
18866         * attribute.cs: fixed compilation. The error was:
18867         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
18868         be assigned to before control leaves the current method."
18869         [FIXME:  Filed as bug #28186: MCS must report this error.]
18870
18871 2002-07-25  Martin Baulig  <martin@gnome.org>
18872
18873         * attribute.cs (Attribute.Conditional_GetConditionName): New static
18874         method to pull the condition name ouf of a Conditional attribute.
18875         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
18876         the obsolete message and error flag out of an Obsolete attribute.
18877
18878         * class.cs (Method.GetMethodFlags): New public method to get the
18879         TypeManager.MethodFlags for this method.
18880         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
18881         private methods.
18882         (Method.Define): Get and apply the Obsolete and Conditional attributes;
18883         if we're overriding a virtual function, set the new private variable
18884         `parent_method'; call the new TypeManager.AddMethod().
18885
18886         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
18887         the MethodBuilder and the Method in a PtrHashtable.
18888         (TypeManager.builder_to_method): Added for this purpose.
18889         (TypeManager.MethodFlags): Added IsObsoleteError.
18890         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
18891         Obsolete and Conditional arguments in MethodBuilders.  If we discover
18892         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
18893         the message from the attribute.
18894
18895 2002-07-24  Martin Baulig  <martin@gnome.org>
18896
18897         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
18898         preprocessor directives, ensure that the argument to #define/#undef is
18899         exactly one identifier and that it's actually an identifier.
18900
18901         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
18902         did not work ....
18903
18904 2002-07-24  Martin Baulig  <martin@gnome.org>
18905
18906         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
18907         initialize it to TypeManager.object_type in the constructor.
18908         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
18909         of the `hm.get_current' method if we're using the collection pattern.
18910         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
18911         for the explicit conversion to make it work when we're using the collection
18912         pattern and the `Current' property has a different return type than `object'.
18913         Fixes #27713.
18914
18915 2002-07-24  Martin Baulig  <martin@gnome.org>
18916
18917         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
18918         does not match, but don't report any errors.  This method is called in
18919         order for all methods in a MethodGroupExpr until a matching method is
18920         found, so we don't want to bail out if the first method doesn't match.
18921         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
18922         matches, report the 123.  Fixes #28070.
18923
18924 2002-07-24  Martin Baulig  <martin@gnome.org>
18925
18926         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
18927         TypeManager.TypeToCoreType() to the top of the method so the
18928         following equality checks will work.  Fixes #28107.
18929
18930 2002-07-24  Martin Baulig  <martin@gnome.org>
18931
18932         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
18933         operand is of type uint, and the other operand is of type sbyte,
18934         short or int, the operands are converted to type long." -
18935         Actually do what this comment already told us.  Fixes bug #28106,
18936         added test-150.cs.
18937
18938 2002-07-24  Martin Baulig  <martin@gnome.org>
18939
18940         * class.cs (MethodBase): New abstract class.  This is now a base
18941         class for Property, Indexer and Event to avoid some code duplication
18942         in their Define() and DefineMethods() methods.
18943         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
18944         generic methods for Define() and DefineMethods().
18945         (FieldBase): Derive from MemberBase, not MemberCore.
18946         (Property): Derive from MemberBase, not MemberCore.
18947         (Property.DefineMethod): Moved all the code from this method to the
18948         new MethodBase.DefineAccessor(), just call it with appropriate
18949         argumetnts.
18950         (Property.Define): Call the new Property.DoDefine(), this does some
18951         sanity checks and we don't need to duplicate the code everywhere.
18952         (Event): Derive from MemberBase, not MemberCore.
18953         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
18954         accessors, this will also make them work with interface events.
18955         (Indexer): Derive from MemberBase, not MemberCore.
18956         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
18957         (Indexer.Define): Use the new MethodBase functions.
18958
18959         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
18960         argument to the constructor.
18961         (Interface.FindMembers): Added support for interface events.
18962         (Interface.PopluateEvent): Implemented.
18963
18964         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
18965
18966 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
18967
18968         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
18969         but this is required to check for a method name being the same as
18970         the containing class.  
18971
18972         Handle this now.
18973
18974 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18975
18976         * interface.cs: initialize variable.
18977
18978 2002-07-23  Martin Baulig  <martin@gnome.org>
18979
18980         Implemented the IndexerName attribute in interfaces.
18981
18982         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
18983         name if this is an explicit interface implementation.
18984         (Indexer.InterfaceIndexerName): New public variable.  If we're
18985         implementing an interface indexer, this is the IndexerName in that
18986         interface.  Otherwise, it's the IndexerName.
18987         (Indexer.DefineMethod): If we're implementing interface indexer,
18988         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
18989         and Pending.ImplementIndexer methods.
18990         (Indexer.Define): Also define the PropertyBuilder if we're
18991         implementing an interface indexer and this is neither an explicit
18992         interface implementation nor do the IndexerName match the one in
18993         the interface.
18994
18995         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
18996         If a method is defined here, then we always need to create a proxy
18997         for it.  This is used when implementing interface indexers.
18998         (Pending.IsInterfaceIndexer): New public method.
18999         (Pending.ImplementIndexer): New public method.
19000         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
19001         This is used when implementing interface indexers to define a proxy
19002         if necessary.
19003         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
19004         define a proxy if necessary.
19005
19006         * interface.cs (Interface.IndexerName): New public variable.
19007         (Interface.PopulateIndexer): Set the IndexerName.
19008         (Interface.DefineIndexers): New private method.  Populate all the
19009         indexers and make sure their IndexerNames match.
19010
19011         * typemanager.cs (IndexerPropertyName): Added support for interface
19012         indexers.
19013
19014 2002-07-22  Martin Baulig  <martin@gnome.org>
19015
19016         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
19017         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
19018         ret if HasReturnLabel.
19019         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
19020         variables.
19021
19022         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
19023         and set the ec.LoopBeginTryCatchLevel.
19024         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
19025         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
19026         the current ec.TryCatchLevel, the branch goes out of an exception
19027         block.  In this case, we need to use Leave and not Br.
19028
19029 2002-07-22  Martin Baulig  <martin@gnome.org>
19030
19031         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
19032         block unless the block does not always return or it is contained in
19033         another try { ... } catch { ... } block.  Fixes bug #26506.
19034         Added verify-1.cs to the test suite.
19035
19036 2002-07-22  Martin Baulig  <martin@gnome.org>
19037
19038         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
19039         then we do not always return.  Fixes bug #24985.
19040
19041 2002-07-22  Martin Baulig  <martin@gnome.org>
19042
19043         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
19044         lookup on a per-class level; ie. walk up the class hierarchy until we
19045         found at least one applicable method, then choose the best among them.
19046         Fixes bug #24463 and test-29.cs.
19047
19048 2002-07-22  Martin Baulig  <martin@gnome.org>
19049
19050         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
19051         return types of the methods.  The return type is not part of the
19052         signature and we must not check it to make the `new' modifier work.
19053         Fixes bug #27999, also added test-147.cs.
19054         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
19055
19056         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
19057         on the method's return type.
19058
19059 2002-07-21  Martin Baulig  <martin@gnome.org>
19060
19061         * assign.cs: Make this work if the rightmost source is a constant and
19062         we need to do an implicit type conversion.  Also adding a few more tests
19063         to test-38.cs which should have caught this.
19064
19065         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
19066         target in the makefile for this.  The makefile.gnu is primarily intended
19067         for end-users who don't want to debug the compiler.
19068
19069 2002-07-21  Martin Baulig  <martin@gnome.org>
19070
19071         * assign.cs: Improved the Assign class so it can now handle embedded
19072         assignments (X = Y = Z = something).  As a side-effect this'll now also
19073         consume less local variables.  test-38.cs now passes with MCS, added
19074         a few new test cases to that test.
19075
19076 2002-07-20  Martin Baulig  <martin@gnome.org>
19077
19078         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
19079         instructions.  Fixes bug #27977, also added test-146.cs.
19080
19081 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19082
19083         * cs-tokenizer.cs: fixed getHex ().
19084
19085 2002-07-19  Martin Baulig  <martin@gnome.org>
19086
19087         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
19088         not Type.GetType() to lookup the array type.  This is needed when
19089         we're constructing an array of a user-defined type.
19090         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
19091         single-dimensional arrays, but also for single-dimensial arrays of
19092         type decimal.
19093
19094 2002-07-19  Martin Baulig  <martin@gnome.org>
19095
19096         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
19097         this function is called, it's not allowed to share LocalBuilders
19098         among ILGenerators.
19099
19100 2002-07-19  Martin Baulig  <martin@gnome.org>
19101
19102         * expression.cs (Argument.Resolve): Report an error 118 when trying
19103         to pass a type as argument.
19104
19105 2002-07-18  Martin Baulig  <martin@gnome.org>
19106
19107         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
19108         Conv_R_Un for the signed `long' type.
19109
19110 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
19111
19112         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
19113         `expr' for the temporary result, as that will fail if we do
19114         multiple resolves on the same expression.
19115
19116 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
19117
19118         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
19119         ec.TypeContainer for looking up aliases. 
19120
19121         * class.cs (TypeContainer): Remove LookupAlias from here.
19122
19123         * decl.cs (DeclSpace); Move here.
19124
19125 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
19126
19127         * class.cs (FindMembers): Only call filter if the constructor
19128         bulider is not null.
19129
19130         Also handle delegates in `NestedTypes' now.  Now we will perform
19131         type lookups using the standard resolution process.  This also
19132         fixes a bug.
19133
19134         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
19135         This uses Expressions (the limited kind that can be parsed by the
19136         tree) instead of strings.
19137
19138         * expression.cs (ComposedCast.ToString): Implement, used to flag
19139         errors since now we have to render expressions.
19140
19141         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
19142         FormArrayType. 
19143
19144         * ecore.cs (SimpleName.ToString): ditto.
19145
19146         * cs-parser.jay: Instead of using strings to assemble types, use
19147         Expressions to assemble the type (using SimpleName, ComposedCast,
19148         MemberAccess).  This should fix the type lookups in declarations,
19149         because we were using a different code path for this.
19150
19151         * statement.cs (Block.Resolve): Continue processing statements
19152         even when there is an error.
19153
19154 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
19155
19156         * class.cs (Event.Define): Also remove the `remove' method from
19157         the list of pending items.
19158
19159         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
19160         generate more compact code. 
19161
19162 2002-07-17  Martin Baulig  <martin@gnome.org>
19163
19164         * const.cs (Const.LookupConstantValue): Add support for constant
19165         `unchecked' and `checked' expressions.
19166         Also adding test case test-140.cs for this.
19167
19168 2002-07-17  Martin Baulig  <martin@gnome.org>
19169
19170         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
19171         check whether mi.ReturnType implements the IEnumerator interface; the
19172         `==' and the IsAssignableFrom() will fail in this situation.
19173
19174 2002-07-16  Ravi Pratap  <ravi@ximian.com>
19175
19176         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
19177         here too.
19178
19179 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19180
19181         * expression.cs: fixed bug #27811.
19182
19183 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
19184
19185         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
19186         Molaro: when we are a ref, the value already contains a pointer
19187         value, do not take the address of it.
19188
19189 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
19190         * removed mb-parser.jay and mb-tokenizer.cs
19191
19192 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19193
19194         * expression.cs: check against the building corlib void type.
19195
19196 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
19197
19198         * ecore.cs: fix for valuetype static readonly fields: when 
19199         initializing them, we need their address, not the address of a copy.
19200
19201 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
19202
19203         * typemanager.cs: register also enum_type in corlib.
19204
19205 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19206
19207         * class.cs: allow calling this (but not base) initializers in structs.
19208
19209 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
19210
19211         * ecore.cs: make sure we compare against the building base types
19212         in GetTypeSize ().
19213
19214 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
19215
19216         * typemanager.cs: fix TypeToCoreType() to handle void and object
19217         (corlib gets no more typerefs after this change).
19218
19219 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
19220
19221         * expression.cs (ArrayCreation.EmitArrayArguments): use
19222         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
19223
19224         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
19225         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
19226         array indexes, the runtime actually forbids them.
19227
19228         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
19229         for array arguments here.
19230
19231         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
19232         instead of the default for ValueTypes.
19233
19234         (New.DoEmit): Use IsValueType instead of
19235         IsSubclassOf (value_type)
19236         (New.DoResolve): ditto.
19237         (Invocation.EmitCall): ditto.
19238
19239         * assign.cs (Assign): ditto.
19240
19241         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
19242         Statements *are* currently doing part of their resolution during
19243         Emit.  
19244
19245         Expressions do always resolve during resolve, but statements are
19246         only required to propagate resolution to their children.
19247
19248 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
19249
19250         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
19251
19252         (LoadAssembly): Do not add the dll if it is already specified
19253
19254         (MainDriver): Add the System directory to the link path at the end,
19255         after all the other -L arguments. 
19256
19257         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
19258         wrong opcode for loading bytes and bools (ldelem.i1 instead of
19259         ldelem.u1) and using the opposite for sbytes.
19260
19261         This fixes Digger, and we can finally run it.
19262
19263         * driver.cs (UnixParseOption): Move the option parsing here.  
19264         (CSCParseOption): Implement CSC-like parsing of options.
19265
19266         We now support both modes of operation, the old Unix way, and the
19267         new CSC-like way.  This should help those who wanted to make cross
19268         platform makefiles.
19269
19270         The only thing broken is that /r:, /reference: and /lib: are not
19271         implemented, because I want to make those have the same semantics
19272         as the CSC compiler has, and kill once and for all the confussion
19273         around this.   Will be doing this tomorrow.
19274
19275         * statement.cs (Unsafe.Resolve): The state is checked during
19276         resolve, not emit, so we have to set the flags for IsUnsfe here.
19277
19278 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19279
19280         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
19281         not catch the Error_ObjectRefRequired in SimpleName (as it is
19282         possible to have a class/instance variable name that later gets
19283         deambiguated), we have to check this here.      
19284
19285 2002-07-10  Ravi Pratap  <ravi@ximian.com>
19286
19287         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
19288         make static and put into Expression.
19289
19290         (Event.Define): Register the private field of the event with the 
19291         TypeManager so that GetFieldFromEvent can get at it.
19292
19293         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
19294         keep track of the private field associated with an event which
19295         has no accessors.
19296
19297         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
19298         private field.
19299
19300         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
19301
19302 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19303
19304         * expression.cs (Binary.EmitBranchable): this routine emits the
19305         Binary expression in a branchable context.  This basically means:
19306         we need to branch somewhere, not just get the value on the stack.
19307
19308         This works together with Statement.EmitBoolExpression.
19309
19310         * statement.cs (Statement.EmitBoolExpression): Use
19311         EmitBranchable. 
19312
19313 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
19314
19315         * statement.cs (For): Reduce the number of jumps in loops.
19316
19317         (For): Implement loop inversion for the For statement.
19318
19319         (Break): We can be breaking out of a Try/Catch controlled section
19320         (foreach might have an implicit try/catch clause), so we need to
19321         use Leave instead of Br.
19322
19323         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
19324         now).  If the instace expression supports IMemoryLocation, we use
19325         the AddressOf method from the IMemoryLocation to extract the
19326         address instead of emitting the instance.
19327
19328         This showed up with `This', as we were emitting the instance
19329         always (Emit) instead of the Address of This.  Particularly
19330         interesting when This is a value type, as we dont want the Emit
19331         effect (which was to load the object).
19332
19333 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
19334
19335         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
19336
19337         * statement.cs (Checked): Set the CheckedState during the resolve
19338         process too, as the ConvCast operations track the checked state on
19339         the resolve process, and not emit.
19340
19341         * cs-parser.jay (namespace_member_declaration): Flag that we have
19342         found a declaration when we do.  This is used to flag error 1529
19343
19344         * driver.cs: Report ok when we display the help only.
19345
19346 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
19347
19348         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
19349
19350 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
19351
19352         * cs-tokenizer.cs (define): We also have to track locally the
19353         defines.  AllDefines is just used for the Conditional Attribute,
19354         but we also need the local defines for the current source code. 
19355
19356 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
19357
19358         * statement.cs (While, For, Do): These loops can exit through a
19359         Break statement, use this information to tell whether the
19360         statement is the last piece of code.
19361
19362         (Break): Flag that we break.
19363
19364         * codegen.cs (EmitContexts): New `Breaks' state variable.
19365
19366 2002-07-03  Martin Baulig  <martin@gnome.org>
19367
19368         * class.cs (TypeContainer.MethodModifiersValid): Allow override
19369         modifiers in method declarations in structs.  Otherwise, you won't
19370         be able to override things like Object.Equals().
19371
19372 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19373
19374         * class.cs (Method, Property, Indexer): Do not allow the public
19375         modifier to be used in explicit interface implementations.
19376
19377         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
19378         override modifiers in method declarations in structs
19379
19380 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
19381
19382         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
19383         integer or real overflow, report an error
19384
19385 2002-07-02  Martin Baulig  <martin@gnome.org>
19386
19387         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
19388         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
19389         to tell the runtime about our newly created System.Object and
19390         System.ValueType types.
19391
19392 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19393
19394         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
19395         struct instead of Ldarg/Starg.
19396
19397 2002-07-02  Martin Baulig  <martin@gnome.org>
19398
19399         * expression.cs (Indirection.Indirection): Call
19400         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
19401
19402 2002-07-02  Martin Baulig  <martin@gnome.org>
19403
19404         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
19405         ValueType, call TypeManager.TypeToCoreType() on it.
19406         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
19407         the OpCodes.Newarr argument.
19408
19409 2002-07-02  Martin Baulig  <martin@gnome.org>
19410
19411         * expression.cs (Invocation.EmitCall): When compiling corlib,
19412         replace all calls to the system's System.Array type to calls to
19413         the newly created one.
19414
19415         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
19416         System.Array methods.
19417         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
19418         from the system's System.Array type which must be replaced.
19419
19420 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
19421
19422         * typemanager.cs: load unverifiable_code_ctor so we can build
19423         corlib using the correct type. Avoid using GetTypeCode() with
19424         TypeBuilders.
19425         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
19426         TypeManager.object_type to allow building corlib.
19427
19428 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
19429
19430         * ecore.cs: handle System.Enum separately in LoadFromPtr().
19431
19432 2002-07-01  Martin Baulig  <martin@gnome.org>
19433
19434         * class.cs: Make the last change actually work, we need to check
19435         whether `ifaces != null' to avoid a crash.
19436
19437 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19438
19439         * class.cs: when we build structs without fields that implement
19440         interfaces, we need to add the interfaces separately, since there is
19441         no API to both set the size and add the interfaces at type creation
19442         time.
19443
19444 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19445
19446         * expression.cs: the dimension arguments to the array constructors
19447         need to be converted if they are a long.
19448
19449 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
19450
19451         * class.cs: don't emit ldarg.0 if there is no parent constructor
19452         (fixes showstopper for corlib).
19453
19454 2002-06-29  Martin Baulig  <martin@gnome.org>
19455
19456         MCS now compiles corlib on GNU/Linux :-)
19457
19458         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
19459         ie. check for MethodImplOptions.InternalCall.
19460
19461         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
19462         and TypeManager.attribute_type are null, so we must explicitly check
19463         whether parent is not null to find out whether it's an attribute type.
19464         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
19465         and SetBuilder, not only if the property is neither abstract nor external.
19466         This is necessary to set the MethodImplOptions on the accessor methods.
19467         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
19468         SetBuilder, see Property.Emit().
19469
19470         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
19471         populate "System.Object", "System.ValueType" and "System.Attribute" since
19472         they've already been populated from BootCorlib_PopulateCoreTypes().
19473
19474 2002-06-29  Martin Baulig  <martin@gnome.org>
19475
19476         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
19477         is the NullLiteral, we also need to make sure that target_type is not
19478         an enum type.   
19479
19480 2002-06-29  Martin Baulig  <martin@gnome.org>
19481
19482         * rootcontext.cs (RootContext.ResolveCore): We must initialize
19483         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
19484         before calling BootstrapCorlib_ResolveDelegate ().
19485
19486 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19487
19488         * statement.cs: fixed build-breaker. All tests passed ok.
19489
19490 2002-06-27  Martin Baulig  <martin@gnome.org>
19491
19492         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19493         for System.Decimal when compiling corlib.
19494
19495 2002-06-27  Martin Baulig  <martin@gnome.org>
19496
19497         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19498         switch blocks which contain nothing but a default clause.
19499
19500 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19501
19502        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19503
19504 2002-06-27  Martin Baulig  <martin@gnome.org>
19505
19506         * ecore.cs (PropertyExpr.PropertyExpr): Call
19507         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19508
19509         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19510         is already a TypeBuilder.
19511
19512 2002-06-27  Martin Baulig  <martin@gnome.org>
19513
19514         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19515         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19516         the "from an array-type to System.Array" case.  This makes it work
19517         when compiling corlib.
19518
19519 2002-06-27  Martin Baulig  <martin@gnome.org>
19520
19521         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19522         non-static PropertyExpr, set its InstanceExpression.  This makes
19523         the `ICollection.Count' property work in System/Array.cs.
19524
19525 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19526
19527         * driver.cs: Made error handling more consistent.  Errors now
19528         tracked by Report class, so many methods which used to return int
19529         now return void.  Main() now prints success/failure and 
19530         errors/warnings message.
19531
19532         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19533         the magic number return values (123 and 124).  Now, if the
19534         expected error occurs, the compiler exits with success (exit value
19535         0).  If the compilation completes without seeing that particular
19536         error, the compiler exits with failure (exit value 1).  The
19537         makefile in mcs/errors has been changed to handle the new behaviour.
19538
19539         * report.cs: Made 'expected error' number a property and renamed
19540         it from 'Probe' to 'ExpectedError'.
19541
19542         * genericparser.cs: Removed error handling support, since it is
19543         now all done by Report class.
19544
19545         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19546         class, so parse() no longer returns an int.
19547
19548         * namespace.cs: Use Report.Error instead of GenericParser.error
19549
19550 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19551
19552         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19553         TypeContainer.AddOperator): At the front of the list put the
19554         explicit implementations, so they get resolved/defined first. 
19555
19556 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19557
19558         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19559         interface type is implemented by this TypeContainer.  Used during
19560         explicit interface implementation.
19561
19562         (Property.Define, Indexer.Define, Method.Define): Validate that
19563         the given interface in the explicit implementation is one of the
19564         base classes for the containing type.
19565
19566         Also if we are explicitly implementing an interface, but there is
19567         no match in the pending implementation table, report an error.
19568
19569         (Property.Define): Only define the property if we are
19570         not explicitly implementing a property from an interface.  Use the
19571         correct name also for those properties (the same CSC uses,
19572         although that is really not needed).
19573
19574         (Property.Emit): Do not emit attributes for explicitly implemented
19575         properties, as there is no TypeBuilder.
19576
19577         (Indexer.Emit): ditto.
19578
19579         Hiding then means that we do not really *implement* a pending
19580         implementation, which makes code fail.
19581
19582 2002-06-22  Martin Baulig  <martin@gnome.org>
19583
19584         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19585         the return value of Object.GetType().  [FIXME: we need to do this whenever
19586         we get a type back from the reflection library].
19587
19588 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19589
19590         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19591
19592 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19593
19594         * attribute.cs: Return null if we can not look up the type.
19595
19596         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19597         the interface types found.
19598
19599         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19600         interface types found.
19601
19602         * typemanager.cs (GetInterfaces): Make this routine returns alll
19603         the interfaces and work around the lame differences between
19604         System.Type and System.Reflection.Emit.TypeBuilder in the results
19605         result for GetInterfaces.
19606
19607         (ExpandInterfaces): Given an array of interface types, expand and
19608         eliminate repeated ocurrences of an interface.  This expands in
19609         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19610         be IA, IB, IC.
19611
19612 2002-06-21  Martin Baulig  <martin@gnome.org>
19613
19614         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19615         on System.Enum.
19616
19617 2002-06-21  Martin Baulig  <martin@gnome.org>
19618
19619         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
19620         and called with one of the core types, return the corresponding typebuilder for
19621         that type.
19622
19623         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
19624         element type.
19625
19626 2002-06-21  Martin Baulig  <martin@gnome.org>
19627
19628         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
19629         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
19630         (Expression.ConvertReferenceExplicit): Likewise.
19631
19632         * expression.cs (ElementAccess.DoResolve): Likewise.
19633         (ElementAccess.DoResolveLValue): Likewise.
19634
19635 2002-06-10  Martin Baulig  <martin@gnome.org>
19636
19637         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
19638         add the "value" parameter to the parameter list.
19639
19640         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
19641         to our caller.
19642
19643 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
19644
19645         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
19646         the argument to an int, uint, long or ulong, per the spec.  Also
19647         catch negative constants in array creation.
19648
19649 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
19650
19651         * class.cs: do not allow the same interface to appear twice in
19652         the definition list.
19653
19654 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
19655
19656         * ecore.cs: don't use ldlen with System.Array.
19657
19658 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
19659
19660         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
19661
19662 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
19663
19664         * modifiers.cs: produce correct field attributes for protected
19665         internal. Easy fix so miguel can work on ther harder stuff:-)
19666
19667 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
19668
19669         * pending.cs: New file.  Move the code from class.cs here.
19670         Support clearning the pending flag for all methods (when not doing
19671         explicit interface implementation).
19672
19673 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
19674
19675         * rootcontext.cs: added a couple more types needed to bootstrap.
19676
19677 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
19678
19679         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
19680         constructor in the type, instead of any constructor in the type
19681         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
19682         a bug in the Mono runtime when applying the params attribute). 
19683
19684 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
19685         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
19686
19687 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
19688
19689         * expression.cs (Unary.ResolveOperator): Use TypeManager
19690         to resolve the type.
19691
19692 2002-06-13  Ravi Pratap  <ravi@ximian.com>
19693
19694         * cs-parser.jay (enum_member_declaration): Pass in the attributes
19695         attached.
19696
19697         * enum.cs (AddEnumMember): Add support to store the attributes associated 
19698         with each member too.
19699
19700         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
19701         field builders too - this takes care of the enum member case.
19702
19703 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
19704
19705         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
19706         address-of operator on both value types and pointers.
19707
19708 2002-06-10  Martin Baulig  <martin@gnome.org>
19709
19710         * interface.cs (Interface.PopulateIndexer): Add the indexer's
19711         PropertyBuilder to the `property_builders' list.
19712
19713         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
19714         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
19715         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
19716         find any indexers which are inherited from an interface.
19717
19718 2002-06-09  Martin Baulig  <martin@gnome.org>
19719
19720         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
19721         the same type as the constant if necessary.  There's also a test-130.cs
19722         for this.
19723
19724         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
19725
19726         * typemanager.cs (TypeManager.ChangeType): Previously known as
19727         Enum.ChangeEnumType().
19728
19729 2002-06-09  Martin Baulig  <martin@gnome.org>
19730
19731         * expression.cs (Cast.TryReduce): Added support for consts.
19732
19733 2002-06-08  Ravi Pratap  <ravi@ximian.com>
19734
19735         * class.cs (Accessor): Hold attributes information so we can pass
19736         it along.
19737
19738         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
19739         Modify to pass in attributes attached to the methods.
19740
19741         (add_accessor_declaration, remove_accessor_declaration): Ditto.
19742
19743         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
19744         to handle the Accessor kind :-)
19745
19746         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
19747
19748 2002-06-08  Martin Baulig  <martin@gnome.org>
19749
19750         * expression.cs (Unary.TryReduceNegative): Added support for
19751         ULongConstants.
19752
19753 2002-06-08  Martin Baulig  <martin@gnome.org>
19754
19755         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
19756         name can't be found in the `defined_names' - the caller will do a
19757         MemberLookup in this case and thus find methods in System.Enum
19758         such as Enum.IsDefined().
19759
19760 2002-06-08  Martin Baulig  <martin@gnome.org>
19761
19762         * enum.cs (Enum.ChangeEnumType): This is a custom version of
19763         Convert.ChangeType() which works with TypeBuilder created types.
19764         (Enum.LookupEnumValue, Enum.Define): Use it here.
19765
19766         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
19767         `TypeBuilder.BaseType != null' check.
19768         (TypeContainer.FindMembers): Only lookup parent members if we
19769         actually have a parent.
19770         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
19771         (ConstructorInitializer.Resolve): Likewise.
19772
19773         * interface.cs (Interface.FindMembers): Added
19774         `TypeBuilder.BaseType != null' check.
19775
19776         * rootcontext.cs (RootContext.ResolveCore): Added
19777         "System.Runtime.CompilerServices.IndexerNameAttribute" to
19778         classes_second_stage.
19779
19780         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
19781         debug_type and trace_type when compiling with --nostdlib.       
19782
19783 2002-06-07  Martin Baulig  <martin@gnome.org>
19784
19785         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
19786         (AddField): Set it to true when adding a non-static field.
19787         (DefineType): Use `have_nonstatic_fields' to find out whether we
19788         have non-static fields, not `Fields != null'.
19789
19790 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
19791
19792         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
19793         dereferencing a null on the static-field code path)
19794
19795 2002-05-30  Martin Baulig  <martin@gnome.org>
19796
19797         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
19798         to take command line arguments.  Use reflection to call the new
19799         custom `Initialize' function on the symbol writer and pass it the
19800         command line arguments.
19801
19802         * driver.cs (--debug-args): New command line argument to pass command
19803         line arguments to the symbol writer.
19804
19805 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
19806
19807         * assign.cs (DoResolve): Forgot to do the implicit conversion to
19808         the target type for indexers and properties.  Thanks to Joe for
19809         catching this.
19810
19811 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
19812
19813         * typemanager.cs (MethodFlags): returns the method flags
19814         (Obsolete/ShouldIgnore) that control warning emission and whether
19815         the invocation should be made, or ignored. 
19816
19817         * expression.cs (Invocation.Emit): Remove previous hack, we should
19818         not do this on matching a base type, we should do this based on an attribute
19819
19820         Only emit calls to System.Diagnostics.Debug and
19821         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
19822         on the command line.
19823
19824         * rootcontext.cs: Global settings for tracing and debugging.
19825
19826         * cs-tokenizer.cs (define): New utility function to track
19827         defines.   Set the global settings for TRACE and DEBUG if found.
19828
19829 2002-05-25  Ravi Pratap  <ravi@ximian.com>
19830
19831         * interface.cs (Populate*): Pass in the TypeContainer as well as
19832         the DeclSpace as parameters so that we can create EmitContexts and
19833         then use that to apply attributes etc.
19834
19835         (PopulateMethod, PopulateEvent, PopulateProperty)
19836         (PopulateIndexer): Apply attributes everywhere.
19837
19838         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
19839         etc.
19840
19841         (ApplyAttributes): Update accordingly.
19842
19843         We now apply interface attributes for all members too.
19844
19845 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
19846
19847         * class.cs (Indexer.Define); Correctly check if we are explicit
19848         implementation (instead of checking the Name for a ".", we
19849         directly look up if the InterfaceType was specified).
19850
19851         Delay the creation of the PropertyBuilder.
19852
19853         Only create the PropertyBuilder if we are not an explicit
19854         interface implementation.   This means that explicit interface
19855         implementation members do not participate in regular function
19856         lookups, and hence fixes another major ambiguity problem in
19857         overload resolution (that was the visible effect).
19858
19859         (DefineMethod): Return whether we are doing an interface
19860         implementation. 
19861
19862         * typemanager.cs: Temporary hack until we get attributes in
19863         interfaces (Ravi is working on that) and we get IndexerName
19864         support in interfaces.
19865
19866         * interface.cs: Register the indexers as properties.
19867
19868         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
19869         warning, I have verified that this is a bug in the .NET runtime
19870         (JavaScript suffers of the same problem).
19871
19872         * typemanager.cs (MemberLookup): When looking up members for
19873         interfaces, the parent of an interface is the implicit
19874         System.Object (so we succeed in searches of Object methods in an
19875         interface method invocation.  Example:  IEnumerable x;  x.ToString
19876         ()) 
19877
19878 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
19879
19880         * class.cs (Event): Events should also register if they do
19881         implement the methods that an interface requires.
19882
19883         * typemanager.cs (MemberLookup); use the new GetInterfaces
19884         method. 
19885
19886         (GetInterfaces): The code used to lookup interfaces for a type is
19887         used in more than one place, factor it here. 
19888
19889         * driver.cs: Track the errors at the bottom of the file, we kept
19890         on going.
19891
19892         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
19893         instance if the method we are calling is static!
19894
19895 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
19896
19897         * attribute.cs (ApplyAttributes): Make this function filter out
19898         the IndexerName attribute (as that attribute in reality is never
19899         applied) and return the string constant for the IndexerName
19900         attribute. 
19901
19902         * class.cs (TypeContainer.Emit): Validate that all the indexers
19903         have the same IndexerName attribute, and if so, set the
19904         DefaultName attribute on the class. 
19905
19906         * typemanager.cs: The return value might contain other stuff (not
19907         only methods).  For instance, consider a method with an "Item"
19908         property and an Item method.
19909
19910         * class.cs: If there is a problem with the parameter types,
19911         return. 
19912
19913 2002-05-24  Ravi Pratap  <ravi@ximian.com>
19914
19915         * ecore.cs (ImplicitConversionExists): Wrapper function which also
19916         looks at user defined conversion after making a call to 
19917         StandardConversionExists - we need this for overload resolution.
19918
19919         * expression.cs : Update accordingly the various method calls.
19920
19921         This fixes 2 bugs filed against implicit user defined conversions 
19922
19923 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
19924
19925         * statement.cs: Track the result of the assignment.
19926
19927 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
19928
19929         * expression.cs (MemberAccess): Improved error reporting for
19930         inaccessible members.
19931
19932 2002-05-22  Martin Baulig  <martin@gnome.org>
19933
19934         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
19935         itself with debugging support.
19936
19937 2002-05-22  Martin Baulig  <martin@gnome.org>
19938
19939         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
19940         Removed, this isn't needed anymore.
19941
19942 2002-05-20  Martin Baulig  <martin@gnome.org>
19943
19944         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
19945         be underlying type for an enum.
19946
19947 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
19948
19949         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
19950         that splits out the loading of just the core types.
19951
19952         * rootcontext.cs (ResolveCore): Split the struct resolution in
19953         two, so we can load the enumeration underlying types before any
19954         enums are used.
19955
19956         * expression.cs (Is): Bandaid until we fix properly Switch (see
19957         bug #24985 for details).
19958
19959         * typemanager.cs (ImplementsInterface): The hashtable will contain
19960         a null if there are no interfaces implemented.
19961
19962 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
19963
19964         * cs-parser.jay (indexer_declarator): It is fine to have array
19965         parameters
19966
19967 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19968
19969         * typemanager.cs: (RegisterBuilder): New function used to register
19970         TypeBuilders that implement interfaces.  Since
19971         TypeBuilder.GetInterfaces (as usual) does not work with lame
19972         Reflection.Emit. 
19973         (AddUserType): register interfaces.
19974
19975         (ImplementsInterface): Use the builder_to_ifaces hash if we are
19976         dealing with TypeBuilder.  Also, arrays are showing up as
19977         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
19978         methods can not be invoked on them!
19979
19980         * ecore.cs (ExplicitReferenceConversionExists): Made public.
19981         (ImplicitReferenceConversionExists): Split out from
19982         StandardConversionExists. 
19983
19984         * expression.cs (As): We were only implementing one of the three
19985         cases for the as operator.  We now implement them all.
19986         (Is): Implement the various other cases for Is as well.
19987
19988         * typemanager.cs (CACHE): New define used to control if we want or
19989         not the FindMembers cache.  Seems to have a negative impact on
19990         performance currently
19991
19992         (MemberLookup): Nested types have full acess to
19993         enclosing type members
19994
19995         Remove code that coped with instance/static returns for events, we
19996         now catch this in RealFindMembers.
19997
19998         (RealFindMembers): only perform static lookup if the instance
19999         lookup did not return a type or an event.  
20000
20001 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
20002
20003         * assign.cs (CompoundAssign): We pass more semantic information
20004         now to Compound Assignments than we did before: now we have all
20005         the information at hand, and now we resolve the target *before* we
20006         do the expression expansion, which allows the "CacheValue" method
20007         to have the effect we intended (before, a [x] += 1 would generate
20008         two differen ArrayAccess expressions from the ElementAccess,
20009         during the resolution process).
20010
20011         (CompoundAssign.DoResolve): Resolve target and original_source here.
20012
20013 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
20014
20015         * expression.cs (ArrayAccess): dropped debugging information. 
20016
20017         * typemanager.cs: Small bug fix: I was always returning i_members,
20018         instead of one of i_members or s_members (depending on which had
20019         the content).
20020
20021         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
20022         method is invoked before any code generation takes place, and it
20023         is a mechanism to inform that the expression will be invoked more
20024         than once, and that the method should use temporary values to
20025         avoid having side effects
20026
20027         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
20028
20029         * ecore.cs (Expression.CacheTemporaries): Provide empty default
20030         implementation.
20031
20032         * expression.cs (Indirection, ArrayAccess): Add support for
20033         CacheTemporaries in these two bad boys. 
20034
20035         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
20036         ldobj or ldind_ref.  
20037         (StoreFromPtr): Handle stobj as well.
20038
20039         * expression.cs (UnaryMutator): Share more code.
20040
20041         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
20042         down: I was not tracking the Filter function as well, which
20043         was affecting the results of the cache.
20044
20045 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
20046
20047         * attribute.cs: Remove the hack to handle the CharSet property on
20048         StructLayouts. 
20049
20050 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
20051
20052         * attribute.cs (DoResolve): More uglyness, we now only try to
20053         resolve the attribute partially, to extract the CharSet
20054         information (only if we are a StructLayout attribute).  Otherwise 
20055
20056         (GetExtraTypeInfo): Add some code to conditionally kill in the
20057         future this.   I am more and more convinced that the .NET
20058         framework has special code to handle the attribute setting on
20059         certain elements.
20060
20061         * expression.cs (IsParamsMethodApplicable): Revert my previous
20062         foreach change here, it was wrong.
20063
20064 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
20065
20066         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
20067         (pp_expr): do not abort on unknown input, just return.
20068         (eval): abort if there are pending chars.
20069
20070         * attribute.cs (Attribute.Resolve): Positional parameters are
20071         optional.  Deal with that case.
20072
20073         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
20074         the Ansi/Unicode/Auto information for the type.
20075
20076         (TypeContainer.DefineType): instantiate the EmitContext here, as
20077         we will be using it during the type definition (to resolve
20078         attributes) and during the emit phase.
20079
20080         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
20081         to pull type information out of the attributes
20082
20083         (Attribute.Resolve): track the constructor builder, and allow for
20084         multiple invocations (structs and classes will use this).
20085
20086         * ecore.cs (MemberLookupFinal): new version with all the
20087         parameters customizable.
20088
20089         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
20090         constructors.  Return if the result value is null (as the error
20091         would have been flagged already by MemberLookupFinal)
20092
20093         Do not allow instances of abstract classes or interfaces to be
20094         created.
20095
20096         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
20097         We have to compare the assembly property here when dealing with
20098         FamANDAssem and Assembly access modifiers, because we might be
20099         creating an assembly from *modules* (that means that we are not
20100         getting TypeBuilders for types defined in other modules that are
20101         part of this assembly).
20102
20103         (Method.Emit): If the method is marked abstract and has a body,
20104         emit an error. 
20105
20106         (TypeContainer.DefineMembers): If both the defined member and the
20107         parent name match are methods, then do not emit any warnings: let
20108         the Method.Define routine take care of flagging warnings.  But if
20109         there is a mismatch (method overrides something else, or method is
20110         overriwritten by something, then emit warning).
20111
20112         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
20113         set to null, this means `do not check for the return type on the
20114         signature'. 
20115
20116         (Method.Define): set the return type for the method signature to
20117         null, so that we get methods with the same name and parameters and
20118         different return types.  This is used to flag warning 114 (you are
20119         hiding a method, and you probably want to use the new/override
20120         keywords instead).
20121
20122         * typemanager.cs (MemberLookup): Implemented proper access
20123         control, closing a long standing set of bug reports.  The problem
20124         was that the Framework only has two bits: Public and NonPublic,
20125         and NonPublic includes private and protected methods, but we need
20126         to enforce the FamANDAssem, FamOrAssem and Family. 
20127
20128 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
20129
20130         * statement.cs (GotoCase): Return true: Ammounts to giving up
20131         knowledge on whether we return or not, and letting the other case
20132         be responsible for it.
20133
20134 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
20135
20136         * driver.cs: Do not load directories for each file processed, only
20137         do it if there is a pattern.
20138
20139         * ecore.cs: Report readonly assigns here as well, as we might have
20140         been resolved only by MemberAccess.
20141
20142         (SimpleName.SimpleNameResolve): Also be useful for LValue
20143         resolution.   We need this to propagate assign to local readonly variables
20144
20145         * typemanager.cs: Use a ptrhashtable for the criteria, because we
20146         do not want to reuse potential criteria memory.
20147
20148         * class.cs (MyEventBuilder): Set reflected_type;
20149
20150         * ecore.cs (Constantify): Added support for constifying bools.
20151
20152         (RootContext.LookupType): Added a cache for values looked up in
20153         the declaration space.
20154
20155         * typemanager.cs (FindMembers): Now is a front-end to
20156         RealFindMembers, and provides a two-level hashtable-based cache to
20157         the request.  
20158
20159         15% performance improvement: from 22.5 to 19.2 seconds.
20160
20161         * expression.cs (IsParamsMethodApplicable): use foreach.
20162         (Invocation.DoResolve): ditto.
20163         (New.DoResolve): ditto.
20164         (ArrayCreation.DoResolve): ditto.
20165
20166         * ecore.cs (FindMostEncompassingType): use foreach.
20167
20168         * delegate.cs (NewDelegate.DoResolve): Use foreach
20169
20170         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
20171         (RemoveMethods): use foreach.
20172
20173         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
20174         nested foreach statements instead of for, and also break out of
20175         the inner loop once a match is found.
20176
20177         (Invocation.OverloadResolve): Use foreach, simplify the code. 
20178
20179 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
20180
20181         * cfold.cs (BinaryFold): During an enumeration evaluation context,
20182         we actually unwrap the expression to allow for extra information
20183         to be extracted. 
20184
20185         * expression.cs: Use Shr_Un on unsigned operations. 
20186
20187 2002-05-08  Ravi Pratap  <ravi@ximian.com>
20188
20189         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
20190         applicable operators was not being considered correctly. This closes
20191         the bug Miguel reported.
20192
20193 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
20194
20195         * attribute.cs: check that the type derives from System.Attribute
20196         and report the correct error in that case (moved the duplicate code to
20197         its own method, too).
20198
20199 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
20200
20201         * attribute.cs: lookup attribute type name as the spec says: first the
20202         bare attribute name and then name + "Attribute" (nant compiles with
20203         mcs after this fix).
20204
20205 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
20206
20207         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
20208         Because of the way we parse things, we should try to see if a
20209         UIntConstant can fit in an integer.
20210
20211 2002-05-07  Ravi Pratap  <ravi@ximian.com>
20212
20213         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
20214         when we are in an explicit context.
20215
20216         (ConvertReferenceExplicit): When converting from Iface type S to Class
20217         T make sure the rules are implemented as an OR.
20218
20219         * parameter.cs (ParameterType): Make it a property for now although the
20220         purpose really isn't anything immediate.
20221
20222         * expression.cs (Is*Applicable): Do better checking on the parameter type
20223         of a ref/out parameter. The ones from the system assemblies are already 
20224         marked with the correct type so we don't need to do any correction.
20225
20226         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
20227         the object type is standard too so include that.
20228
20229 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20230
20231         * ecore.cs (StandardConversionExists): Augment with missing code:
20232         deal with IntConstant, LongConstants and Enumerations.
20233
20234         * assign.cs: Report the error, instead of failing silently
20235
20236         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
20237         typecontainer that they are declared, because the
20238         typecontainer/namespace will have the list of using clauses that
20239         need to be applied.
20240
20241         Assembly Attributes were escaping the normal registration
20242         mechanism. 
20243
20244         (EmitCode): Apply attributes within an EmitContext that represents
20245         the container they were declared on.
20246
20247         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
20248
20249 2002-05-06  Ravi Pratap  <ravi@ximian.com>
20250
20251         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
20252         Revamp completely - make much cleaner as we now operate only
20253         on a set of Types.
20254
20255         (FindMostSpecificSource, FindMostSpecificTarget): New methods
20256         to implement the logic detailed in the spec more correctly.
20257
20258         (UserDefinedConversion): Update accordingly.
20259
20260 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20261
20262         * statement.cs: Return flow analysis information up.
20263
20264         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
20265         and the default.
20266
20267         (token): Do not consume an extra character before calling
20268         decimal_digits.
20269
20270 2002-05-06  Piers Haken <piersh@friskit.com>
20271
20272         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
20273
20274 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20275
20276         * class.cs (Constructor.Emit): Set the IsStatic flag in the
20277         EmitContext during the instance constructor initializer
20278         resolution, to stop access to instance variables.
20279
20280         This is mandated by the spec, last paragraph of the `constructor
20281         initializers' section. 
20282
20283 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
20284
20285         * cs-parser.jay, class.cs (Accessor): new class used to represent
20286         an accessor (get or set).  In the past we used `null' to represent
20287         a missing accessor.  But this is ambiguous because there was no
20288         way to tell in abstract indexers/properties if one of them was
20289         specified.
20290
20291         Now there is a way of addressing that.
20292
20293         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
20294         instead of FindMembers.
20295
20296         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
20297         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
20298
20299         * attribute.cs: Treat indexers and properties as the same in terms
20300         of applying attributes
20301
20302         * ecore.cs (FindMostEncompassedType): Use statically initialized
20303         EmptyExpressions()s like we do elsewhere to avoid creating useless
20304         objects (and we take this out of the tight loop).
20305
20306         (GetConversionOperators): Move the code to extract the actual
20307         operators to a separate routine to clean things up.
20308
20309 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
20310
20311         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
20312         events are always registered FieldBuilders.
20313
20314         * class.cs (FieldBase): New class shared by Fields 
20315
20316         * delegate.cs: If we are a toplevel delegate, use our full name.
20317         If we are a nested delegate, then only use our tail name.
20318
20319 2002-05-02  Ravi Pratap  <ravi@ximian.com>
20320
20321         * expression.cs (IsApplicable): Ensure that we add the "&" to
20322         ref/out types before comparing it with the type of the argument.
20323
20324         (IsParamsMethodApplicable): Ditto.
20325
20326         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
20327         silly me ;-)
20328
20329         * delegate.cs : Handle the case when we have more than one applicable
20330         method. Flag an error only when we finish checking all.
20331
20332 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
20333
20334         * expression.cs: Add support for boolean static initializers.
20335
20336 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
20337
20338         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
20339
20340         * parameter.cs (ComputeParameterTypes,
20341         ComputeAndDefineParameterTypes): Better error handling: now we
20342         clear the `types' cache if we fail during any of the type lookups.
20343         We also return the status code correctly to our caller
20344
20345         * delegate.cs: If we fail to define a delegate, abort the extra
20346         steps. 
20347
20348         * expression.cs (Binary.ResolveOperator): for
20349         operator==(object,object) and operator !=(object, object) we also
20350         have to verify that there is an implicit conversion from one to
20351         the other.
20352
20353         (ArrayAccess.DoResolve): Array Access can operate on
20354         non-variables. 
20355
20356 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
20357
20358         * assign.cs (CompoundAssign): A new class used as a "flag" that
20359         the assignment actually is happening as part of a compound
20360         assignment operator.
20361
20362         During compound assignment, a few new rules exist to enable things
20363         like:
20364
20365         byte b |= 1 + 2
20366
20367         From the spec:
20368
20369         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
20370         to the type of x) if y is implicitly convertible to the type of x,
20371         and the operator is a builtin operator and the return type of the
20372         operator is explicitly convertible to the type of x. 
20373
20374         * rootcontext.cs: Reset warning level to 2.  4 catches various
20375         "interesting" features in mcs, we must clean this up at some
20376         point, but currently am trying to kill other bugs ;-)
20377
20378         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
20379         in container classes as well.  
20380
20381         * expression.cs (Binary.ResolveOperator): Handle string case
20382         before anything else (as operator overloading does emit an error
20383         before doing anything else).
20384
20385         This code could go away when we move to a table driven model, but
20386         i could not come up with a good plan last night.
20387
20388 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
20389
20390         * typemanager.cs (CSharpName): reimplementation using regex.
20391         * class.cs: added null check for fields in Emit
20392         * rootcontext.cs: set warninglevel to 4
20393
20394 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
20395
20396         * typemanager.cs (CSharpName): reimplemented with Lupus
20397         suggestion.
20398
20399 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
20400
20401         * statement.cs (If): correclty implement Resolve, because we were
20402         not catching sem errors in there.  The same process is needed
20403         everywhere else. 
20404         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
20405
20406
20407         (Statement.Warning_DeadCodeFound): Factorize code.
20408         (While): Report dead code here too.
20409
20410         (Statement): Added Resolve virtual method to allow
20411         for resolution split from the emit code.
20412
20413 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20414
20415         * statement.cs (EmitBoolExpression): No longer try to resolve the
20416         expression here.    
20417         (MakeBoolean): New utility function that resolve, implicitly
20418         converts to boolean and tags the expression. 
20419
20420
20421         (If, Do): Implement dead code elimination.
20422         (While): Implement loop inversion
20423
20424         (Do, While, For, If): Resolve the expression prior to calling our
20425         code generation.
20426
20427 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
20428
20429         * class.cs:
20430           - added method Report28 (warning: program has more than one entry point)
20431           - added method IsEntryPoint, implements paragraph 10.1 of the spec
20432           - modified method Method.Define, the part at the end of the method
20433
20434         * rootcontext.cs: added static public Location EntryPointLocation;
20435           
20436         * ../errors/cs0028.cs : Add test case for the above warning.              
20437
20438         * typemanager.cs:
20439           - modified method CSharpName to allow arrays of primitive type to
20440             be printed nicely (e.g. instead of System.Int32[][] it now prints
20441             int[][])
20442           - added method CSharpSignature: returns the signature of a method
20443             in string format to be used in reporting errors, warnings, etc.
20444
20445         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
20446         with String.Empty.
20447
20448 2002-04-26  Ravi Pratap  <ravi@ximian.com>
20449
20450         * delegate.cs (Define): Fix extremely silly bug where I was
20451         setting the type of the 'object' parameter of the BeginInvoke
20452         method to System.IAsyncResult instead of System.Object ;-)
20453
20454 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20455
20456         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
20457         here. 
20458
20459         (Constructor.Emit): return if we fail to initialize the
20460         constructor.  Another door closed!  
20461
20462         * expression.cs (New.DoResolve): Improve error message (from -6 to
20463         1501).  Use DeclaredOnly lookup to find the exact constructor.
20464
20465         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
20466         loop.  This is useful.
20467
20468         * cs-parser.jay: Adjust the default parameters so that destructors
20469         have the proper signature.
20470
20471 2002-04-26  Martin Baulig  <martin@gnome.org>
20472
20473         * driver.cs (LoadAssembly): If `assembly' contains any characters
20474         which are only valid in path names and not in assembly names
20475         (currently slash, backslash and point), use Assembly.LoadFrom ()
20476         instead of Assembly.Load () on the `assembly' (before iteration
20477         over the link_paths).
20478
20479 2002-04-26  Martin Baulig  <martin@gnome.org>
20480
20481         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
20482
20483 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
20484
20485         * class.cs (Property): use the new typemanager.MemberLookup
20486
20487         (TypeContainer.MemberLookup): Implement using the
20488         TypeManager.MemberLookup now. 
20489
20490         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20491         and return MemberInfos, so that these can be used without an
20492         EmitContext (what we had before).
20493
20494 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20495
20496         * expression.cs: Fix the case where the argument to params if the
20497         type of the params.  I omitted handling this before.   Fixed
20498
20499 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20500
20501         * driver.cs: Call BootCorlib_PopulateCoreType
20502
20503         * class.cs (Property.CheckBase): Check for properties only, not
20504         for all members. 
20505
20506         * interface.cs: Temporary hack: try/catch around the
20507         CustomAttributeBuilder, because I am getting an exception that I
20508         do not understand.
20509
20510         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20511         types whose definitions are required to be there (attributes are
20512         defined before standard types).
20513
20514         Compute definitions as we boot the various types, as they are used
20515         immediately (value_type class will need object_type, but if we do
20516         not initialize object_type, we will pass a null, which will let
20517         the runtime pick the System.Object from the existing corlib, which
20518         is not what we want).
20519
20520 2002-04-22  Patrik Torstensson <totte@labs2.com>
20521
20522         * cs-tokenizer.cs: fixed a number of trim() issues.
20523
20524 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20525
20526         * expression.cs (Argument.Type): Ensure that we return the correct
20527         type when we have out or ref parameters [in which case we 
20528         append a "&"].
20529
20530 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20531
20532         * class.cs (Property, Indexer): Allow extern modifier in there. 
20533
20534         * typemanager.cs (InitBaseTypes): Initializes object_type and
20535         value_type, since those will be used early on during the bootstrap
20536         process to compile corlib.
20537
20538         (InitCoreTypes): Move code from here to InitBaseTypes.
20539
20540 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20541
20542         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20543         single-dimension arrays as using the ldlen opcode.  
20544
20545         Daniel Lewis discovered this optimization.  
20546
20547         * typemanager.cs: Add signature for System.Array::get_Length
20548
20549 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20550
20551         * statement.cs: report the error when the foreach does not apply to an
20552         array nor a collection.
20553
20554 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20555
20556         * expression.cs: Add implicit conversions to the operator ~.
20557
20558         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20559
20560         * typemanager.cs: Locate the decimal constructor.
20561
20562 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20563
20564         * attribute.cs: use the new property of TypeOf.
20565         * expression.cs: added 'get' property around typearg.
20566
20567         These changes fix a build breaker reported by NickD. Is this the
20568         correct way to fix?  If not, please, revert my changes and make it
20569         work :-).
20570
20571 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20572
20573         * attribute.cs: Add support for typeof in attribute invocations.
20574         I am not sure that this is right though.
20575
20576 2002-04-14  Duncan Mak  <duncan@ximian.com>
20577
20578         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20579         Binary.Operator.Division case.
20580
20581 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20582
20583         * class.cs (DefineType): Ensure that we do a proper check on
20584         attribute types and also register it with the TypeManager.
20585
20586         (TypeContainer.Targets): The default for attribute types is
20587         AttributeTargets.All.
20588
20589         * attribute.cs (ApplyAttributes): Registering the attribute type
20590         is done elsewhere, not when we discover we have a Usage attribute.
20591
20592 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20593
20594         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20595         and get rid of is_delegate parameter.
20596
20597         * everywhere : update.
20598
20599 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20600
20601         * cs-parser.jay (compilation_unit): Revamp completely to use
20602         some new ideas that I got from Rhys' grammar to solve the problems
20603         with assembly level attributes.
20604
20605         (outer_declaration): New grammar production.
20606
20607         (attribute_sections): Add.
20608
20609         (opt_attributes): Base on attribute_sections
20610
20611         (namespace_declaration): Allow opt_attributes to tackle the case
20612         when we have assembly level attributes - we are clever in this
20613         regard now ;-)
20614
20615         * attribute.cs (ApplyAttributes): Do not worry about assembly 
20616         attributes in the non-global context.
20617
20618         * rootcontext.cs (AddGlobalAttributes): Go back to using this
20619         instead of SetGlobalAttributes.
20620
20621         * class.cs, rootcontext.cs : Ensure we define and generate 
20622         attribute types before anything else.
20623
20624         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
20625         and flag the new error -20 for the case when the attribute type
20626         does not have valid targets specified. csc does not catch this.
20627
20628         * ../errors/errors.txt : update for error # -20
20629
20630 2002-04-11  Ravi Pratap  <ravi@ximian.com>
20631
20632         * support.cs (InternalParameters.ParameterModifier): Do some null
20633         checking and return sane values.
20634
20635         * class.cs (Method.Define): If we are a PInvoke method, ensure
20636         that we are static and extern. Report error # 601
20637
20638         * ../errors/cs0601.cs : Add test case for the above error.
20639
20640 2002-04-07  Ravi Pratap  <ravi@ximian.com>
20641
20642         * rootcontext.cs (attribute_types): We need to keep type of
20643         all attribute types separately and emit code for them first.
20644
20645         (RegisterAttribute) : Implement.
20646
20647         * class.cs (DefineType): Check if the current Type is a custom
20648         attribute type and register it accordingly.
20649
20650         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
20651         adding the first attribute twice and rename to
20652
20653         (SetGlobalAttributes): this.
20654
20655         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
20656         lookups.
20657
20658         * attribute.cs (ApplyAttributes): Take an additional argument telling us
20659         if we are processing global arguments. Hmm, I am unsure of this.
20660
20661 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20662
20663         * expression.cs: added static array of strings to avoid calling
20664         Enum.ToString () for Operator in Binary. Significant recover of
20665         performance.
20666
20667 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
20668
20669         * class.cs (FindMembers): Allow the Builders of the various
20670         members to be null.  If they are skip them.  This only happens
20671         during the PInvoke declaration.
20672
20673 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
20674
20675         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
20676         failure, so we do not keep going afterwards.
20677
20678         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
20679         wanted to pass `false' as the `is_delegate' argument.  If this is
20680         the case, why not use delegate_type == null to mean `is_delegate =
20681         false' and anything else as is_delegate = true.
20682
20683 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
20684
20685         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
20686         code for the section, not the beginning of the tests.
20687
20688 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
20689
20690         * cfold.cs: Handle operator + (Enum x, Underlying x) 
20691
20692         * expression.cs (Binary): same.  Warn about errors where we have
20693         Enum/Enum in operator + as well.
20694
20695 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
20696
20697         * statement.cs:
20698                 - added support for switch(bool)
20699                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
20700                 - add TableSwitchEmit() to handle table-based switch statements
20701
20702 2002-04-05  Ravi Pratap  <ravi@ximian.com>
20703
20704         * expression.cs (Invocation.OverloadResolve): Factor out code which
20705         does parameter compatibility checking with arguments so that we can 
20706         re-use the code even from Delegate.VerifyApplicability
20707
20708         (VerifyArgumentsCompat): Move above code here.
20709
20710         * delegate.cs (VerifyApplicability): Get rid of duplicate code
20711         and instead make a call to the above method.
20712
20713 2002-03-31  Ravi Pratap  <ravi@ximian.com>
20714
20715         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
20716         We use it to keep track of classes which are attribute types.
20717
20718 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
20719
20720         * delegate.cs (Delegate.Define): Correctly define the types in the
20721         presence of fixed and array parameters.
20722
20723         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
20724         doing FindMembers.
20725
20726         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
20727         include NonPublic after the first iteration.
20728
20729         * class.cs (Indexer.CheckBase): Only check if both parents are
20730         non-null. 
20731
20732         * cs-parser.jay (accessor_body): If empty, set to null.
20733
20734         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
20735         same code path here to resolve constants names that we did have in
20736         MemberAccess.DoResolve.  There is too much code duplicated here.
20737
20738 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
20739
20740         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
20741
20742         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
20743         to MakeUnionSet.
20744
20745         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
20746         tokens, numbers and strings.
20747
20748         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
20749         parenthesis.
20750
20751         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
20752         asyncronous parameters and the regular parameters.  
20753
20754         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
20755         specify the target directory.
20756
20757         * expression.cs: (This.DoResolve): Simplify
20758         (As.Emit): Optimize, do not generate IsInst if the expression is
20759         always of the given type.
20760
20761         (Is.DoResolve): Bug fix, we were reporting both always/never for
20762         the is expression.
20763
20764         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
20765         creating too many unnecessary arrays.
20766
20767 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
20768
20769         * class.cs (EmitFieldInitializer): Use Assign expression to assign
20770         fields instead of rolling our own initializer.   Takes care of all
20771         implicit conversions, and drops unnecessary static checks/argument.
20772
20773 2002-03-31  Dick Porter  <dick@ximian.com>
20774
20775         * driver.cs: use the GetDirectories() return values properly, and
20776         use "/" as path separator.
20777
20778 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
20779
20780         * expression.cs (Unary): Optimize - - expr into expr.
20781         (Binary): Optimize a + (-b) into a -b.
20782
20783         * codegen.cs (CodeGen): Made all methods static.
20784
20785 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
20786
20787         * rootcontext.cs: 
20788
20789         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
20790         TypeBuilder property.
20791
20792         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
20793         instead. 
20794
20795         * tree.cs: Removed the various RecordXXXX, and replaced with a
20796         single RecordDecl.  Removed all the accessor methods, and just
20797         left a single access point Type 
20798
20799         * enum.cs: Rename DefineEnum to DefineType.
20800
20801         * decl.cs: New abstract method `DefineType' used to unify the
20802         Defines for Enumerations, Interfaces, TypeContainers and
20803         Delegates.
20804
20805         (FindType): Moved LookupInterfaceOrClass here.  Moved the
20806         LookupBaseClasses method that used to live in class.cs and
20807         interface.cs here, and renamed to FindType.
20808
20809         * delegate.cs: Implement DefineType.  Take advantage of the
20810         refactored pattern for locating the parent builder without taking
20811         the parent_builder argument (which we know does not work if we are
20812         nested, and triggering a toplevel definition).
20813
20814 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20815
20816         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
20817         accessibility of a member has changed during override and report
20818         an error if so.
20819
20820         * class.cs (Method.Define, Property.Define): Only complain on
20821         overrides if the method is private, any other accessibility is
20822         fine (and since we just checked the permission is the same, we are
20823         good to go).
20824
20825         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
20826         and elif are processed always.  The other pre-processing
20827         directives are only processed if we are "taking" the path
20828
20829 2002-03-29  Martin Baulig  <martin@gnome.org>
20830
20831         * class.cs (Method.Emit): Only emit symbolic debugging info if the
20832         current location is not Null.
20833
20834         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
20835         a separate method so we can profile it.
20836
20837         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
20838         `span.Seconds' are just seconds, but no minutes or hours.
20839         (MainDriver): Profile the CodeGen.SaveSymbols calls.
20840
20841 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20842
20843         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
20844         Remove the gratuitous set of Final:
20845
20846                                 // If an interface implementation, then we can set Final.
20847                                 if (((flags & MethodAttributes.Abstract) == 0) &&
20848                                     implementing.DeclaringType.IsInterface)
20849                                         flags |= MethodAttributes.Final;
20850
20851         I do not know what I was smoking when I used that.
20852
20853
20854         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
20855         step into fixing the name resolution issues for delegates and
20856         unifying the toplevel name resolution.
20857
20858 2002-03-28  Martin Baulig  <martin@gnome.org>
20859
20860         * class.cs (Method.Emit): If we have a symbol writer, call its
20861         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
20862         tell it about the current method.
20863
20864         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
20865         writer that we're going to emit the first byte of IL code for a new
20866         statement (a new source line).
20867         (EmitContext.EmitTopBlock): If we have a symbol writer, call
20868         EmitContext.Mark() before emitting any code.
20869
20870         * location.cs (SymbolDocument): Return null when we're Null.
20871
20872         * statement.cs (Statement): Moved the `Location loc' variable here.
20873         (Statement.EmitBoolExpression): If we have a symbol writer, call
20874         ec.Mark() before emitting any code to tell it that we're at the
20875         beginning of a new statement.
20876         (StatementExpression): Added `Location' argument to the constructor.
20877         (Block): Added public readonly variable `StartLocation' and public
20878         variable `EndLocation'.  The latter is to be set using SetEndLocation().
20879         (Block): Added constructor which takes a start and end location.
20880         (Block.SetEndLocation): New method. This sets the end location.
20881         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
20882         local variables we create.
20883         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
20884         each statement and do also mark the begin and end of the block.
20885
20886         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
20887         tell it the current lexer.Location, use Location.Null for the end of the
20888         block.
20889         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
20890         current block, set its end location using SetEndLocation().
20891         (statement_expression): StatementExpression constructor now takes the
20892         lexer.Location as additional argument.
20893         (for_statement, declare_local_variables): Likewise.
20894         (declare_local_variables): When creating a new implicit block, use the
20895         new Block constructor and pass it the lexer.Location.
20896
20897 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20898
20899         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
20900         members also on the parent interfaces recursively.
20901
20902 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
20903
20904         * report.cs: Use new formats, since Gonzalo finished the missing
20905         bits. 
20906
20907         * expression.cs (Binary.ResolveOperator): added missing operator|
20908         operator& and operator^ for bool/bool.
20909
20910         * cs-parser.jay: CheckDef now takes a Location argument that is
20911         used to report errors more precisly (instead of reporting the end
20912         of a definition, we try to track something which is a lot closer
20913         to the source of the problem).
20914
20915         * cs-tokenizer.cs: Track global token use, so we can properly flag
20916         the use of #define/#undef after the first token has been seen.
20917
20918         Also, rename the reportXXXX to Error_DescriptiveName
20919
20920         * decl.cs (DeclSpace.IsTopLevel): Move property here from
20921         TypeContainer, so that Enum and Interface can use this too.
20922
20923         * class.cs (TypeContainer.LookupInterfaceOrClass,
20924         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
20925         `builder' argument.  Typically this was used to pass the parent
20926         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
20927         the definition).  
20928
20929         The problem is that a nested class could trigger the definition of
20930         a toplevel class, and the builder would be obviously wrong in that
20931         case. 
20932
20933         So we drop this argument, and we compute dynamically the
20934         TypeBuilder/ModuleBuilder (the correct information was available
20935         to us anyways from DeclSpace.Parent)
20936
20937         * interface.cs (Interface.DefineInterface): Drop builder
20938         parameter cleanup like class.cs
20939
20940         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
20941         like class.cs
20942
20943         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
20944         values. 
20945
20946         (Try.Emit): Propagate the returns value from the statement.
20947
20948         (Return.Emit): Even if we are leavning 
20949
20950         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
20951
20952         * modifiers.cs: Fix the computation of MethodAttributes flags.
20953
20954 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
20955
20956         * driver.cs: allow compilation of files that start with '/'.
20957         Add a default case when checking the argument of --target.
20958
20959 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
20960
20961         * interface.cs: Implement the same search algorithm for types in
20962         the interface code.
20963
20964         * delegate.cs: Do not allow multiple definition.
20965
20966         * Recovered ChangeLog that got accidentally amputated
20967
20968         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
20969
20970         * rootcontext.cs: Load manually enum to allow core classes to
20971         contain enumerations.
20972
20973         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
20974         Update to new static methods in TypeManager.
20975
20976         * typemanager.cs (GetMethod, GetConstructor): Use our
20977         implementation of FindMembers to find the members, since during
20978         corlib compilation, the types are TypeBuilders and GetMethod and
20979         GetConstructor do not work.
20980
20981         Make all methods in TypeManager static.
20982
20983         (InitCodeHelpers): Split the functionality from
20984         the InitCodeTypes function.
20985
20986         * driver.cs: Call InitCodeHelpers after we have populated the
20987         types. 
20988
20989         * cs-parser.jay (delegate_declaration): we did not used to compute
20990         the delegate name correctly for void delegates.
20991
20992 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
20993
20994         * rootcontext.cs (RootContext): Init the interface_resolve_order
20995         and type_container_resolve_order always.
20996
20997         (ResolveCore, BootstrapCorlib_ResolveClass,
20998         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
20999         compiler when compiling with --nostdlib
21000
21001         * class.cs (TypeContainer.DefineType): Check that our parent is
21002         not null.  This test is most important when we are bootstraping
21003         the core types.
21004
21005         * codegen.cs: Split out the symbol writing code.
21006
21007 2002-03-25  Martin Baulig  <martin@gnome.org>
21008
21009         * driver.cs (-g): Made -g an alias for --debug.
21010
21011 2002-03-24  Martin Baulig  <martin@gnome.org>
21012
21013         * codegen.cs (SymbolWriter): New public variable. Returns the
21014         current symbol writer.
21015         (CodeGen): Added `bool want_debugging_support' argument to the
21016          constructor. If true, tell the ModuleBuild that we want debugging
21017         support and ask it for the ISymbolWriter.
21018         (Save): If we have a symbol writer, call it's Close() method after
21019         saving the assembly.
21020
21021         * driver.c (--debug): New command line argument to create a
21022         debugger information file.
21023
21024         * location.cs (SymbolDocument): New public property. Returns an
21025         ISymbolDocumentWriter object for the current source file or null
21026         if we don't have a symbol writer.
21027
21028 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
21029
21030         * driver.cs (LoadAssembly): Correctly return when all the paths
21031         have been tried and not before.
21032
21033         * statement.cs (Switch.Emit): return the actual coverage for this
21034         statement (returns/not-returns)
21035
21036         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
21037         switch of the statement if we are the last switch section.  That
21038         kills two problems: try/catch problems (we used to emit an empty
21039         nop at the end) and switch statements where all branches would
21040         return. 
21041
21042 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
21043
21044         * driver.cs: Add default assemblies (the equivalent to the
21045         Microsoft CSC.RSP file)
21046
21047         * cs-tokenizer.cs: When updating `cols and setting it to zero,
21048         also update tokens_seen and set it to false.
21049
21050         * driver.cs: Implement --recurse for Mike.
21051
21052         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
21053         correctly splitting out the paths.
21054
21055 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
21056
21057         * interface.cs (Interface.PopulateProperty): Instead of using
21058         `parent' as the declaration space for the set parameters, use
21059         `this' 
21060
21061         * support.cs (InternalParameters): InternalParameters constructor
21062         takes a DeclSpace instead of a TypeContainer.
21063
21064         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
21065         types are being initialized, load the address of it before calling
21066         the function.  
21067
21068         (New): Provide a mechanism to disable the generation of local
21069         value type temporaries when the caller will be providing us with
21070         an address to store it.
21071
21072         (ArrayCreation.EmitDynamicInitializers): Use it.
21073
21074 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
21075
21076         * expression.cs (Invocation.EmitArguments): Only probe for array
21077         property if there is more than one argument.  Sorry about that.
21078
21079         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
21080         empty param arrays.
21081
21082         * class.cs (Method.LabelParameters): Fix incorrect code path that
21083         prevented the `ParamArrayAttribute' from being applied to the
21084         params attribute.
21085
21086 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
21087
21088         * support.cs (ReflectionParameters): Correctly compute whether the
21089         last argument is a params array.  Fixes the problem with
21090         string.Split ('a')
21091
21092         * typemanager.cs: Make the assemblies array always be non-null
21093         (empty, but non-null)
21094
21095         * tree.cs (RecordDecl): New function that abstracts the recording
21096         of names.  This reports error 101, and provides a pointer to the
21097         previous declaration.  Fixes a crash in the compiler.
21098
21099         * cs-parser.jay (constructor_declaration): Update to new grammar,
21100         and provide a constructor_body that can be empty.
21101
21102 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
21103
21104         * driver.cs: Add support for --resources.
21105
21106         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
21107         Make all types for the various array helper methods be integer.
21108
21109         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
21110         CheckState to ConvCast.
21111
21112         (ConvCast): Now it takes a `checked' state argument, to avoid
21113         depending on the emit context for the conversion, and just using
21114         the resolve time setting.
21115
21116         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
21117         instead of Invocation.EmitArguments.  We do not emit the original
21118         arguments, instead we emit those which have been converted to
21119         unsigned int expressions.
21120
21121         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
21122
21123         * codegen.cs: ditto.
21124
21125         * expression.cs (LocalVariableReference): Drop the use of the
21126         Store function that depended on the variable index.
21127
21128         * statement.cs (VariableInfo): Drop the `Idx' property from this
21129         class, as this is not taking into account the indexes for
21130         temporaries tat we generate during the execution, getting the
21131         indexes wrong.
21132
21133         * class.cs: First emit class initializers, then call the parent
21134         constructor. 
21135
21136         * expression.cs (Binary): Fix opcode emision.
21137         (UnaryMutator.EmitCode): Support checked code generation
21138
21139         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
21140         matches for events for both the Static and Instance scans,
21141         pointing to the same element.   Fix that.
21142
21143 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
21144
21145         * rootcontext.cs (ResolveTree): Always set the
21146         interface_resolve_order, because nested interfaces will be calling
21147         into us.
21148
21149         * class.cs (GetInterfaceOrClass): Track the same resolution
21150         process used by TypeManager.LookupType.  This fixes the nested
21151         type lookups in class declarations (separate path from
21152         LookupType). 
21153
21154         (TypeContainer.DefineType): Also define nested interfaces.
21155         (TypeContainer.RegisterOrder): New public function used to
21156         register the order in which child interfaces need to be closed.
21157
21158         Nested interfaces need to be closed after their parents have been
21159         created. 
21160
21161         * interface.cs (InterfaceAttr): Put all the logic for computing
21162         the interface attribute here. 
21163
21164         (DefineInterface): Register our interface order with the
21165         RootContext or with the TypeContainer depending on the case.
21166
21167 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21168
21169         * cs-parser.jay: rework foreach statement to work with the new
21170         changes to the policy on SimpleNames.
21171
21172         * report.cs: support Stacktrace on warnings as well.
21173
21174         * makefile: drop --unsafe and /unsafe from the compile.
21175
21176 2002-03-13  Ravi Pratap  <ravi@ximian.com>
21177
21178         * ecore.cs (StandardConversionExists): Modify to take an Expression
21179         as the first parameter. Ensure we do null -> reference type conversion
21180         checking.
21181
21182         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
21183         temporary Expression objects.
21184
21185 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
21186
21187         * interface.cs: workaround bug in method overloading resolution
21188         (there is already a bugzilla bug for it).
21189
21190 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21191
21192         We could also solve this problem by having a separate path for
21193         performing type lookups, instead of DoResolve, we could have a
21194         ResolveType entry point, and only participating pieces of the
21195         production (simplename, deref, array) would implement this. 
21196
21197         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
21198         signal SimpleName to only resolve type names and not attempt to
21199         resolve anything else.
21200
21201         * expression.cs (Cast): Set the flag.
21202
21203         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
21204
21205         * class.cs: Only report 108 if there is no `new' modifier.
21206
21207         * cs-parser.jay: rework foreach statement to work with the new
21208         changes to the policy on SimpleNames.
21209         
21210         * report.cs: support Stacktrace on warnings as well.
21211
21212         * makefile: drop --unsafe and /unsafe from the compile.
21213
21214 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
21215
21216         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21217         lookups here, instead of doing that at parse time.  This means
21218         that our grammar will not introduce `LocalVariableReferences' as
21219         expressions at this point.  That solves the problem of code like
21220         this:
21221
21222         class X {
21223            static void Main ()
21224            { int X = 1;
21225             { X x = null }}}
21226
21227         This is only half the fix.  The full fix requires parameters to
21228         also be handled in this way.
21229
21230         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
21231         makes the use more obvious of the DeclSpace.  The
21232         ec.TypeContainer.TypeBuilder is now only used to pull the
21233         TypeBuilder for it.
21234
21235         My theory is that I can get rid of the TypeBuilder completely from
21236         the EmitContext, and have typecasts where it is used (from
21237         DeclSpace to where it matters).  
21238
21239         The only pending problem is that the code that implements Aliases
21240         is on TypeContainer, and probably should go in DeclSpace.
21241
21242         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21243         lookups here, instead of doing that at parse time.  This means
21244         that our grammar will not introduce `LocalVariableReferences' as
21245         expressions at this point.  That solves the problem of code like
21246         this:
21247
21248         class X {
21249            static void Main ()
21250            { int X = 1;
21251             { X x = null }}}
21252
21253         This is only half the fix.  The full fix requires parameters to
21254         also be handled in this way.
21255
21256         * class.cs (Property.DefineMethod): When implementing an interface
21257         method, set newslot, when implementing an abstract method, do not
21258         set the flag (before we tried never setting it, or always setting
21259         it, which is the difference).
21260         (Indexer.DefineMethod): same.
21261         (Method.DefineMethod): same.
21262
21263         * ecore.cs: Only set the status used flag if we get back a Field.
21264
21265         * attribute.cs: Temporary hack, so Paolo can keep working.
21266
21267 2002-03-08  Ravi Pratap  <ravi@ximian.com>
21268
21269         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
21270         the unmanaged type in the case we have a MarshalAs attribute.
21271
21272         (Resolve): Handle the case when we are parsing the special MarshalAs
21273         attribute [we need to store the unmanaged type to use later]
21274
21275         * typemanager.cs (marshal_as_attr_type): Built in type for the 
21276         MarshalAs Attribute.
21277
21278         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
21279         on parameters and accordingly set the marshalling info.
21280
21281 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
21282
21283         * class.cs: Optimizing slightly by removing redundant code after
21284         we switched to the `NoTypes' return value.
21285         (Property.DefineMethod): use NoTypes here too.
21286
21287         This fixes the bug I introduced in my last batch of changes.
21288
21289 2002-03-05  Ravi Pratap  <ravi@ximian.com>
21290
21291         * tree.cs (RecordEnum): Add. We now keep track of enums too.
21292
21293         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
21294         Enums since those are types too. 
21295
21296         * cs-parser.jay (enum_declaration): Record enums as we parse them.
21297
21298         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
21299         thanks to a call during the lookup process.
21300
21301 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
21302
21303         * statement.cs (Foreach): Lots of work to accomodate a particular
21304         kind of foreach statement that I had not kept in mind.  It is
21305         possible to have foreachs on classes that provide a GetEnumerator
21306         method that return objects that implement the "pattern" for using
21307         a foreach, there is no need to support GetEnumerator
21308         specifically. 
21309
21310         This is needed to compile nant.
21311
21312         * decl.cs: Only report 114 if the member is not `Finalize' and if
21313         the warning level is at least 2.
21314
21315         * class.cs: Moved the compare function from Method to
21316         MethodSignature. 
21317
21318         (MethodSignature.InheritableMemberSignatureCompare): Add new
21319         filter function that is used to extract inheritable methods from a
21320         class. 
21321
21322         (Method.Define): Use the new `inheritable_method_signature_filter'
21323         delegate
21324
21325         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
21326         command. 
21327
21328 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
21329
21330         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
21331
21332         * cs-parser.jay: Add opt_semicolon to the interface declaration.
21333
21334         * expression.cs: Pass location information to
21335         ConvertImplicitStandard. 
21336
21337         * class.cs: Added debugging code to track return values from
21338         interfaces. 
21339
21340 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
21341
21342         * expression.cs (Is.DoResolve): If either side of the `is' is an
21343         interface, do not flag the warning.
21344
21345         * ecore.cs (ImplicitReferenceConversion): We need a separate test
21346         for interfaces
21347
21348         * report.cs: Allow for --fatal to be used with --probe.
21349
21350         * typemanager.cs (NoTypes): Move the definition for the empty Type
21351         array here. 
21352
21353         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
21354         properties. 
21355         (TypeContainer.DefineProxy): New function used to proxy to parent
21356         implementations when implementing interfaces.
21357         (TypeContainer.ParentImplements): used to lookup if our parent
21358         implements a public function that is required by an interface.
21359         (TypeContainer.VerifyPendingMethods): Hook this up.
21360
21361         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
21362         `modules' and `assemblies' arraylists into arrays.  We only grow
21363         these are the very early start up of the program, so this improves
21364         the speedof LookupType (nicely measured).
21365
21366         * expression.cs (MakeByteBlob): Replaced unsafe code with
21367         BitConverter, as suggested by Paolo.
21368
21369         * cfold.cs (ConstantFold.Binary): Special case: perform constant
21370         folding of string concatenation, but if either side is a string,
21371         and the other is not, then return null, and let the runtime use
21372         the concatenation on the string plus the object (using
21373         `Object.ToString'). 
21374
21375 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
21376
21377         Constant Folding has been implemented now.
21378
21379         * expression.cs (Unary.Reduce): Do not throw an exception, catch
21380         the error instead on types that are not supported in one's
21381         complement. 
21382
21383         * constant.cs (Constant and all children): New set of functions to
21384         perform implict and explicit conversions.
21385
21386         * ecore.cs (EnumConstant): Implement the new functions to perform
21387         conversion by proxying to the child expression.
21388
21389         * codegen.cs: (ConstantCheckState): Constant evaluation has its
21390         own separate setting that can not be turned off from the command
21391         line using --unchecked or --checked and is only controlled using
21392         the checked/unchecked statements and expressions.  This setting is
21393         used by the constant folder to flag errors.
21394
21395         * expression.cs (CheckedExpr, UncheckedExpr): Set the
21396         ConstantCheckState as well.   
21397
21398         During Resolve, they also have to flag the state, because the
21399         constant folder runs completely in the Resolve phase.
21400
21401         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
21402         well.
21403
21404 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21405
21406         * cfold.cs: New file, this file contains the constant folder.
21407
21408         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
21409         argument to track whether we are using the resulting address to
21410         load or store a value and provide better error messages. 
21411
21412         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
21413         new AddressOf arguments.
21414
21415         * statement.cs (Foreach.EmitCollectionForeach): Update
21416
21417         * expression.cs (Argument.Emit): Call AddressOf with proper
21418         arguments to track usage.
21419
21420         (New.DoEmit): Call AddressOf with new arguments.
21421
21422         (Unary.Emit): Adjust AddressOf call.
21423
21424 2002-03-01  Ravi Pratap  <ravi@ximian.com>
21425
21426         * cs-parser.jay (member_access): Change the case for pre-defined types
21427         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
21428         this suggestion.
21429
21430         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
21431         a method body.
21432
21433         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
21434         essentially like methods and apply attributes like MethodImplOptions to them too.
21435
21436         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
21437         not being null.
21438
21439         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
21440         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
21441         is the DeclSpace.
21442
21443         * Update code everywhere accordingly.
21444
21445         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
21446
21447         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
21448
21449 2002-02-28  Ravi Pratap  <ravi@ximian.com>
21450
21451         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
21452         try performing lookups against those instead of jumping straight into using
21453         the 'using' clauses.
21454
21455         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
21456
21457         (LookupType): Perform lookups in implicit parents too.
21458
21459         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
21460         sequence as RootContext.LookupType. 
21461
21462         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
21463         the various cases of namespace lookups into this method.
21464
21465 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21466
21467         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
21468         in positional arguments)
21469
21470         * class.cs (Operator): Update the AllowedModifiers to contain
21471         extern. 
21472
21473         * cs-parser.jay: Update operator declaration to allow for the
21474         operator body to be empty.
21475
21476         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
21477         values. 
21478
21479 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
21480
21481         * class.cs (Method.Emit): Label parameters.
21482
21483         * driver.cs: Return 1 or 0 as the program exit code.
21484
21485 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
21486
21487         * expression.cs: Special case the `null' object when trying to
21488         auto-compute the type, as anything can be explicitly converted to
21489         that. 
21490
21491         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21492         spotting this Paolo.
21493
21494         (Expression.ImplicitNumericConversion): Perform comparissions of
21495         the type using the underlying type in the case of an enumeration
21496         rather than using the enumeration type for the compare.
21497
21498         Cope with the underlying == type case, which is not possible to
21499         catch before. 
21500
21501         (Expression.ConvertNumericExplicit): Perform comparissions of
21502         the type using the underlying type in the case of an enumeration
21503         rather than using the enumeration type for the compare.
21504
21505         * driver.cs: If the user does not supply an extension, assume .exe
21506
21507         * cs-parser.jay (if_statement): Rewrote so that we can track the
21508         location for the if statement.
21509
21510         * expression.cs (Binary.ConstantFold): Only concat strings when
21511         the operation is "+", not everything ;-)
21512
21513         * statement.cs (Statement.EmitBoolExpression): Take a location
21514         argument. 
21515         (If, While, Do): Track location.
21516
21517         * expression.cs (Binary.ResolveOperator): In the object + string
21518         case, I was missing a call to ConvertImplicit
21519
21520 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21521
21522         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21523         Location arguments. Ensure we use RootContext.LookupType to do our work
21524         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21525
21526         * interface.cs (PopulateMethod): Handle the type of the parameter being
21527         null gracefully.
21528
21529         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21530         have a params method with no fixed arguments and a call is made with no
21531         arguments.
21532
21533 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21534
21535         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21536         the verbatim-string-literal
21537
21538         * support.cs (InternalParameters.ParameterModifier): handle null
21539         fixed parameters.
21540         (InternalParameters.ParameterType): ditto.
21541
21542         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21543         duplicating the name of the variable parameter.
21544         (GetParameterByName): Fix bug where we were not looking up array
21545         paramters if they were the only present (thanks Paolo!).
21546         (GetParameterInfo): We only have an empty set of types if both
21547         fixed and array are set to null.
21548         (GetParameterInfo-idx): Handle FixedParameter == null
21549
21550         * cs-parser.jay: Handle the case where there is no catch
21551         statements (missing null test).
21552
21553 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21554
21555         * driver.cs (MainDriver): Be conservative on our command line
21556         handling.
21557
21558         Catch DirectoryNotFoundException when calling GetFiles.
21559
21560         (SplitPathAndPattern): Used to split the input specification into
21561         a path and a pattern that we can feed to Directory.GetFiles.
21562
21563 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21564
21565         * statement.cs (Fixed): Implement the last case of the Fixed
21566         statement (string handling).
21567
21568         * expression.cs (StringPtr): New class used to return a char * to
21569         a string;  Used by the Fixed statement.
21570
21571         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21572
21573         * expression.cs (Binary.ResolveOperator): Remove redundant
21574         MemberLookup pn parent type.
21575         Optimize union call, we do not need a union if the types are the same.
21576         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21577         type.
21578
21579         Specialize the use of MemberLookup everywhere, instead of using
21580         the default settings. 
21581
21582         (StackAlloc): Implement stackalloc keyword.
21583
21584         * cs-parser.jay: Add rule to parse stackalloc.
21585
21586         * driver.cs: Handle /h, /help, /?
21587
21588         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21589         before we supported unsafe code.
21590
21591         * makefile: add --unsafe to the self compilation of mcs.
21592
21593 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21594
21595         * expression.cs (PointerArithmetic): New class that is used to
21596         perform pointer arithmetic.
21597         (Binary.Resolve): Handle pointer arithmetic
21598         Handle pointer comparission.
21599         (ArrayPtr): Utility expression class that is used to take the
21600         address of an array.
21601
21602         (ElementAccess): Implement array access for pointers
21603
21604         * statement.cs (Fixed): Implement fixed statement for arrays, we
21605         are missing one more case before we are done.
21606
21607         * expression.cs (Indirection): Implement EmitAssign and set the
21608         ExprClass to Variable.  This allows pointer dereferences to be
21609         treated as variables, and to have values assigned to them.
21610
21611         * ecore.cs (Expression.StoreFromPtr): New utility function to
21612         store values dereferencing.
21613
21614 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21615
21616         * expression.cs (Binary.ResolveOperator): Ensure that we are
21617         not trying to operate on a void type - this fixes the reported
21618         bug.
21619
21620         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
21621         the parent implementation is sealed.
21622
21623         * ../errors/cs0239.cs : Add.
21624
21625         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
21626
21627         * typemanager.cs (unverifiable_code_type): Corresponds to 
21628         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
21629         which have unsafe code in them.
21630
21631         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
21632         unsafe context.
21633
21634 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
21635
21636         * cs-tokenizer.cs: Add support for @"litreal strings"
21637
21638         Make tokenizer accept pre-processor directives
21639         on any column (remove the old C-like limitation). 
21640
21641         * rootcontext.cs (EmitCode): Emit any global attributes.
21642         (AddGlobalAttributes): Used to keep track of assembly attributes. 
21643
21644         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
21645
21646         * cs-parser.jay: Add support for global attributes.  
21647
21648 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
21649
21650         * expression.cs (Indirection): New helper class.  Unary will
21651         create Indirection classes to be able to implement the
21652         IMemoryLocation interface on it.
21653
21654 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
21655
21656         * cs-parser.jay (fixed_statement): reference the right statement.
21657
21658         * statement.cs (Fixed.Emit): Finish implementing the fixed
21659         statement for the &x case.
21660
21661 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
21662
21663         * class.cs (Property.Define, Method.Define): Remove newslot when
21664         `implementing'.  
21665
21666         * modifiers.cs: My use of NewSlot when `Abstract' was set was
21667         wrong.  NewSlot should only be used if the `new' keyword is present.
21668
21669         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
21670         locating our system dir.  Sorry about this.
21671
21672 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21673
21674         * driver.cs (GetSystemDir): Compute correctly the location of our
21675         system assemblies.  I was using the compiler directory instead of
21676         the library directory.
21677
21678 2002-02-13  Ravi Pratap  <ravi@ximian.com>
21679
21680         * expression.cs (BetterFunction): Put back in what Miguel commented out
21681         since it is the correct fix. The problem is elsewhere ;-)
21682
21683         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
21684         parameters of the parms method are themselves compatible or not !
21685
21686         (StandardConversionExists): Fix very dangerous bug where we were forgetting
21687         to check that a class implements an interface before saying that an implicit
21688         conversion was allowed. Use ImplementsInterface to do the checking.
21689
21690 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21691
21692         * class.cs (Method.Define): Track whether we are an explicit
21693         implementation or not.  And only call DefineMethodOverride if we
21694         are an explicit implementation.
21695
21696         (Property.DefineMethod): Ditto.
21697
21698 2002-02-11  Ravi Pratap  <ravi@ximian.com>
21699
21700         * expression.cs (BetterFunction): Catch hideous bug which was
21701          preventing us from detecting ambiguous calls due to implicit casts i.e
21702         cs0121.
21703
21704 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
21705
21706         * support.cs (Pair): Remove un-needed method.  I figured why I was
21707         getting the error in cs-parser.jay, the variable in a foreach loop
21708         is readonly, and the compiler does not really treat this as a variable.
21709
21710         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
21711         instead of EQUALS in grammar.  
21712
21713         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
21714
21715         * expression.cs (Unary.DoResolve): Check whether the argument is
21716         managed or not.
21717
21718 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
21719
21720         * support.cs: Api for Pair to set a value.  Despite the fact that
21721         the variables are public the MS C# compiler refuses to compile
21722         code that accesses the field if the variable is part of a foreach
21723         statement. 
21724
21725         * statement.cs (Fixed): Begin implementation of the fixed
21726         statement.
21727
21728         (Block.AddVariable): Return the VariableInfo on success and null
21729         on failure instead of true/false. 
21730
21731         * cs-parser.jay (foreach): Catch errors on variables already
21732         defined (we were ignoring this value before) and properly unwind
21733         the block hierarchy
21734
21735         (fixed_statement): grammar for the fixed statement.
21736
21737 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
21738
21739         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
21740         pointer types to be incretemented.
21741
21742         (SizeOf): Implement.
21743
21744         * cs-parser.jay (pointer_member_access): Implement
21745         expr->IDENTIFIER production.
21746
21747         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
21748         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
21749         on safe contexts.
21750
21751         (Unary): Implement indirection.
21752
21753         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
21754         use in non-unsafe context).
21755
21756         (SimpleName.DoResolve): Check for pointers in field access on safe
21757         contexts. 
21758
21759         (Expression.LoadFromPtr): Factor the load-indirect code in this
21760         function.  This was duplicated in UnboxCast and ParameterReference
21761
21762 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
21763
21764         * expression.cs (ComposedCast): report an error if a pointer cast
21765         is used in a safe region.
21766
21767         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
21768         pointer type casts in unsafe context.
21769
21770         * codegen.cs (EmitContext): Set up IsUnsafe.
21771
21772         * cs-parser.jay (non_expression_type): Add productions for pointer
21773         casts. 
21774
21775         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
21776         code.  We should not use force into static mode if the method is
21777         not virtual.  Fixes bug in MIS
21778
21779         * statement.cs (Do.Emit, While.Emit, For.Emit,
21780         Statement.EmitBoolExpression): Add support to Do and While to
21781         propagate infinite loop as `I do return' semantics.
21782
21783         Improve the For case to also test for boolean constants.
21784
21785         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
21786         to the list of attributes we can add.
21787
21788         Remove `EmitContext' argument.
21789
21790         * class.cs (Method.Define): Apply parameter attributes.
21791         (Constructor.Define): Apply parameter attributes.
21792         (MethodCore.LabelParameters): Move here the core of labeling
21793         parameters. 
21794
21795         * support.cs (ReflectionParameters.ParameterModifier,
21796         InternalParameters.ParameterModifier): Use IsByRef on the type and
21797         only return the OUT bit for these parameters instead of in/out/ref
21798         flags.
21799
21800         This is because I miss-understood things.  The ParameterInfo.IsIn
21801         and IsOut represent whether the parameter has the [In] and [Out]
21802         attributes set.  
21803
21804 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
21805
21806         * ecore.cs (FieldExpr.Emit): Release temporaries.
21807
21808         * assign.cs (LocalTemporary.Release): new function.
21809
21810         * codegen.cs (EmitContext.GetTemporaryStorage,
21811         EmitContext.FreeTemporaryStorage): Rework the way we deal with
21812         temporary storage.  Now we can "put back" localbuilders when we
21813         are done with them
21814
21815 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
21816
21817         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
21818         need to make a copy of the variable to generate verifiable code.
21819
21820 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
21821
21822         * driver.cs: Compute dynamically the system directory.
21823
21824         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
21825         Slower, but more generally useful.  Used by the abstract
21826         registering implementation. 
21827
21828         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
21829         the rules for the special rule on Type/instances.  First check if
21830         we have the same name, and if so, try that special static path
21831         rather than the instance path.
21832
21833 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
21834
21835         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
21836         for, while and if.
21837
21838         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
21839         Enum, ValueType, Delegate or Array for non-corlib compiles.
21840
21841         * cs-tokenizer.cs: Catch long identifiers (645)
21842
21843         * typemanager.cs (IndexerPropetyName): Ravi never tested this
21844         piece of code.
21845
21846         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
21847         fix, we were returning too early, so we were not registering
21848         pending methods from abstract classes.
21849
21850         Do not register pending methods if the class is abstract.
21851
21852         * expression.cs (Conditional.DoResolve): Report circular implicit
21853         conversions when we neecd to compute it for conditional
21854         expressions. 
21855
21856         (Is.DoResolve): If the expression is always of the provided type,
21857         flag warning 183.  If the expression can not ever be of the
21858         provided type flag warning 184.
21859
21860         * class.cs: Catch 169 as well.
21861
21862         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
21863         read. 
21864
21865 2002-01-18  Nick Drochak  <ndrochak@gol.com>
21866
21867         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
21868
21869 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
21870
21871         * interface.cs: (PopulateMethod): Check for pointers being defined
21872         only if the unsafe context is active.
21873         (PopulateProperty): ditto.
21874         (PopulateIndexer): ditto.
21875
21876         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
21877         specified.  If pointers are present, make sure that they are
21878         present in an unsafe context.
21879         (Constructor, Constructor.Define): ditto.
21880         (Field, Field.Define): ditto.
21881         (Property, Property.Define): ditto.
21882         (Event, Event.Define): ditto.
21883
21884         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
21885         hashtable if there are classes or structs defined.
21886
21887         * expression.cs (LocalVariableReference.DoResolve): Simplify this
21888         code, as the constant resolution moved.
21889
21890         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
21891         the metadata, so we can flag error 133. 
21892
21893         * decl.cs (MemberCore.UnsafeOK): New function to test that a
21894         pointer is being declared in an unsafe context.
21895
21896 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
21897
21898         * modifiers.cs (Modifiers.Check): Require a Location argument.
21899         Report error 227 for Unsafe use.
21900
21901         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
21902
21903         * statement.cs (For.Emit): If the test is null, then report that
21904         we do `return', as we wont reach anything afterwards.
21905
21906         (Switch.SwitchGoverningType): Track the expression that matched
21907         the conversion.
21908
21909         * driver.cs: Allow negative numbers as an error code to flag.
21910
21911         * cs-parser.jay: Handle 1551.
21912
21913         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
21914
21915 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21916
21917         * cs-parser.jay: Report 1518 (type declaration can only contain
21918         class, struct, interface, enum or delegate)
21919
21920         (switch_label): Report 1523 (keywords `case' or `default' must
21921         preced code)
21922
21923         (opt_switch_sections): Report 1522 (empty switch)
21924
21925         * driver.cs: Report 1515 (response file specified multiple times)
21926         Report 1516 (Source file specified multiple times).
21927
21928         * expression.cs (Argument.Resolve): Signal 1510
21929
21930         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
21931         access not allowed in static code)
21932
21933 2002-01-11  Ravi Pratap  <ravi@ximian.com>
21934
21935         * typemanager.cs (IsPointerType): Utility method which we are going
21936         to need a lot.
21937
21938         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
21939         the object type, so we take care of that.
21940
21941         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
21942
21943         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
21944         added to non-params parameters :-)
21945
21946         * typemanager.cs (CSharpName): Include 'void' type too. 
21947
21948         (void_ptr_type): Include in the set of core types.
21949
21950         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
21951         duplicating code.
21952
21953         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
21954         an unsafe context.
21955
21956         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
21957         completely forgotten about it.
21958
21959 2002-01-10  Ravi Pratap  <ravi@ximian.com>
21960
21961         * cs-parser.jay (pointer_type): Add. This begins our implementation
21962         of parsing rules for unsafe code.
21963
21964         (unsafe_statement): Implement.
21965
21966         (embedded_statement): Modify to include the above.
21967
21968         * statement.cs (Unsafe): Implement new class for unsafe blocks.
21969
21970         * codegen.cs (EmitContext.InUnsafe): Add. This determines
21971         if the current context is an unsafe one.
21972
21973         * cs-parser.jay (local_variable_pointer_type): Since local variable types
21974         are handled differently, we need separate rules for them.
21975
21976         (local_variable_declaration): Update to use local_variable_pointer_type
21977         to allow variable declarations of unmanaged pointer types.
21978
21979         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
21980         in unsafe contexts.
21981
21982         * ../errors/cs0214.cs : Add.
21983
21984 2002-01-16  Nick Drochak  <ndrochak@gol.com>
21985
21986         * makefile: remove 'response' file when cleaning.
21987
21988 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21989
21990         * cs-parser.jay: Report 1524.
21991
21992 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
21993
21994         * typemanager.cs (RegisterMethod): drop checking if we have
21995         registered this from here
21996
21997 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
21998
21999         * class.cs (Method.EmitDestructor): Implement calling our base
22000         destructor. 
22001
22002         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
22003         value of InFinally.
22004
22005         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
22006         this routine and will wrap the call in a try/catch block.  Deal
22007         with the case.
22008
22009 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
22010
22011         * ecore.cs (Expression.MemberLookup): instead of taking a
22012         parameter `same_type' that was used to tell whether we could
22013         access private members we compute our containing type from the
22014         EmitContext.
22015
22016         (FieldExpr): Added partial support for volatile fields.  This does
22017         not work for volatile fields exposed from assemblies, as I can not
22018         figure out how to extract the modreq from it.
22019
22020         Updated all the source files to use this.
22021
22022         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
22023         because it is referenced by MemberLookup very often. 
22024
22025 2002-01-09  Ravi Pratap  <ravi@ximian.com>
22026
22027         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
22028         TypeBuilder.GetCustomAttributes to retrieve what we need.
22029
22030         Get rid of redundant default_member_attr_type as this is the same as
22031         default_member_type which already exists.
22032
22033         * interface.cs, attribute.cs : Update accordingly.
22034
22035 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
22036
22037         * typemanager.cs: Enable IndexerPropertyName again.  It does not
22038         work for TYpeBuilders though.  Ravi, can you please fix this?
22039
22040         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
22041
22042         * expression.cs (Argument.Emit): Handle the case of ref objects
22043         being passed to ref functions;  
22044
22045         (ParameterReference.EmitLoad): Loads the content of the pointer
22046         without dereferencing.
22047
22048 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22049
22050         * cs-tokenizer.cs: Implemented the pre-processing expressions.
22051
22052 2002-01-08  Ravi Pratap  <ravi@ximian.com>
22053
22054         * class.cs (Indexer.DefineMethod): Incorporate the interface
22055         type in the name of the method if we are doing explicit interface
22056         implementation.
22057
22058         * expression.cs (ConversionExists): Remove as it is completely obsolete.
22059
22060         (BetterConversion): Fix extremely trivial bug where we were referring to
22061         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
22062         again !
22063
22064         * ../errors/bug16.cs : Add although we have fixed it.
22065
22066 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
22067
22068         * expression.cs (BaseIndexer): Begin implementation.
22069
22070         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
22071
22072         * cs-parser.jay (indexer_declarator): Use qualified_identifier
22073         production directly to remove a shift/reduce, and implement
22074         explicit interface implementation.
22075
22076         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
22077         after a floating point suffix.
22078
22079         * expression.cs (DoNumericPromotions): Improved the conversion for
22080         uint/uint.  If we have a constant, we avoid doing a typecast to a
22081         larger type.
22082
22083         * class.cs (Indexer): Implement explicit interface implementation
22084         for indexers.
22085
22086 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
22087
22088         * class.cs: make the default instance constructor public and hidebysig.
22089
22090 2001-01-03  Ravi Pratap  <ravi@ximian.com>
22091
22092         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
22093         so we can call it from elsewhere.
22094
22095         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
22096         we emit it internally if the class has a defined indexer; otherwise the user
22097         emits it by decorating the class definition with the DefaultMemberAttribute.
22098
22099         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
22100         attribute is not used on a type which defines an indexer.
22101
22102         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
22103         character when we skip whitespace.
22104
22105         * ../errors/cs0646.cs : Add.
22106
22107 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
22108
22109         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
22110         again. 
22111
22112         * makefile: Add practical target `mcs3.exe' which builds the third
22113         generation compiler. 
22114
22115         * expression.cs (New): Fix structures constructor calling.
22116
22117         * class.cs (Property, Method, Indexer): Emit Final flag on the
22118         method if we are an interface implementation and we are not
22119         abstract. 
22120
22121         * ecore.cs (PropertyExpr): New public field `IsBase', tells
22122         whether this property is referencing a `base' method.
22123
22124         * expression.cs (Invocation.EmitCall): take an extra argument:
22125         is_base, this is used to determine whether the `call' or
22126         `callvirt' opcode should be used.
22127
22128
22129         * delegate.cs: update EmitCall.
22130
22131         * class.cs (Method.Define): Set NewSlot for the cases where we are
22132         not implementing an interface method.
22133
22134         (Property.Define): ditto.
22135
22136 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
22137
22138         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
22139         'r'.  Allows mcs to parse itself fully.
22140
22141 2002-01-02  Ravi Pratap  <ravi@ximian.com>
22142
22143         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
22144         of the number of initializers that require the InitializeArray method.
22145
22146         (CheckIndices): Store the Expression in all cases - not the plain value. Also
22147         update the above field where necessary.
22148
22149         (MakeByteBlob): Update accordingly.
22150
22151         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
22152         greater than 2.
22153
22154         (EmitDynamicInitializers): Update in accordance with the new optimization.
22155
22156         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
22157         same OpCode applies.
22158
22159         * cs-parser.jay : Fix some glaring errors I introduced.
22160
22161 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
22162
22163         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
22164         so that we can check for name clashes there too.
22165
22166         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
22167         for interface indexers.
22168
22169         * interfaces.cs (Define): Emit the default member attribute.
22170
22171         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
22172         variable was being referred to while setting the value ;-)
22173
22174 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
22175
22176         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
22177         byte-by-byte information when we know the data is zero.
22178
22179         Make the block always a multiple of 4, because
22180         DefineInitializedData has a bug.
22181
22182         * assign.cs: Fix, we should assign from the temporary, not from
22183         the source. 
22184
22185         * expression.cs (MakeByteBlob): Fix my incorrect code.
22186
22187 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
22188
22189         * typemanager.cs (EnumToUnderlying): This function is used to get
22190         the underlying type from an enumeration, because it does not
22191         always work. 
22192
22193         * constant.cs: Use the I4_S form for values between -128 and 127.
22194
22195         * statement.cs (Block.LookupLabel): Looks up a label.
22196         (Block): Drop support for labeled blocks.
22197
22198         (LabeledStatement): New kind of statement that represents a label
22199         only.
22200
22201         (Goto): Finally implement this bad boy.
22202
22203         * cs-parser.jay: Update to reflect new mechanism to implement
22204         labels.
22205
22206 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
22207
22208         * codegen.cs (EmitContext.This): a codegen property that keeps the
22209         a single instance of this instead of creating many different this
22210         instances. 
22211
22212         * delegate.cs (Delegate.DoResolve): Update to use the property;
22213
22214         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
22215
22216         * expression.cs (BaseAccess.DoResolve): Ditto.
22217
22218 2001-12-29  Ravi Pratap  <ravi@ximian.com>
22219
22220         * typemanager.cs (methodimpl_attr_type): Add to hold the type
22221         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
22222
22223         (InitCoreTypes): Update accordingly.
22224
22225         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
22226         so we can quickly store the state.
22227
22228         (ApplyAttributes): Set the correct implementation flags
22229         for InternalCall methods.
22230
22231 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
22232
22233         * expression.cs (EmitCall): if a method is not virtual, then do
22234         not use callvirt on it.
22235
22236         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
22237         user defined stuff) requires the use of stobj, which takes an
22238         address on the stack instead of an array and an index.  So emit
22239         the Ldelema operation for it.
22240
22241         (EmitStoreOpcode): Use stobj for valuetypes.
22242
22243         (UnaryMutator.EmitCode): Use the right 1 value depending on
22244         whether we are dealing with int64/uint64, float or doubles.
22245
22246         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
22247         constructors that I implemented last night.
22248
22249         (Constructor.IsDefault): Fix to work properly for static
22250         constructors.
22251
22252         * cs-parser.jay (CheckDef): report method signature errors.
22253         Update error number 103 to be 132.
22254
22255         * decl.cs: New AdditionResult enumeration value: MethodExists.
22256         Although we do this check for methods later on in the semantic
22257         analysis, catching repeated default constructors is so easy that
22258         we catch these here. 
22259
22260         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
22261         promotions code.
22262
22263         (ParameterReference.EmitAssign, Emit): handle
22264         bools as bytes.
22265
22266         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
22267         (ArrayAccess.EmitStoreOpcode): ditto.
22268
22269         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
22270
22271         * expression.cs (MakeByteBlob): Complete all the missing types
22272         (uint, short, ushort, byte, sbyte)
22273
22274         * class.cs: Only init instance field initializers on instance
22275         constructors. 
22276
22277         Rename `constructors' to instance_constructors. 
22278
22279         (TypeContainer.AddConstructor): Only add constructors to the list
22280         if it is not static.
22281
22282         Make sure that we handle default_static_constructor independently
22283         everywhere where we handle instance_constructors
22284
22285 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
22286
22287         * class.cs: Do not lookup or create a base initializer for a
22288         static constructor.
22289
22290         (ConstructorInitializer.Resolve): use the proper type to lookup
22291         for constructors.
22292
22293         * cs-parser.jay: Report error 1585 (modifiers between type and name).
22294
22295         * enum.cs, interface.cs: Remove CloseType, this is taken care by
22296         in DeclSpace. 
22297
22298         * decl.cs: CloseType is now an virtual method, the default
22299         implementation just closes this type.
22300
22301 2001-12-28  Ravi Pratap  <ravi@ximian.com>
22302
22303         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
22304         to PreserveSig by default. Also emit HideBySig on such methods.
22305
22306         Basically, set the defaults to standard values.
22307
22308         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
22309         argument, if candidate is better, it can't be worse than the best !
22310
22311         (Invocation): Re-write bits to differentiate between methods being
22312         applicable in their expanded form and their normal form - for params
22313         methods of course.
22314
22315         Get rid of use_standard everywhere as only standard conversions are allowed
22316         in overload resolution. 
22317
22318         More spec conformance.
22319
22320 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22321
22322         * driver.cs: Add --timestamp, to see where the compiler spends
22323         most of its time.
22324
22325         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
22326         `this' in static code.
22327
22328         (SimpleName.DoResolve): Implement in terms of a helper function
22329         that allows static-references to be passed upstream to
22330         MemberAccess.
22331
22332         (Expression.ResolveWithSimpleName): Resolve specially simple
22333         names when called by MemberAccess to implement the special
22334         semantics. 
22335
22336         (Expression.ImplicitReferenceConversion): Handle conversions from
22337         Null to reference types before others, as Null's type is
22338         System.Object. 
22339
22340         * expression.cs (Invocation.EmitCall): Handle the special case of
22341         calling methods declared on a reference type from a ValueType
22342         (Base classes System.Object and System.Enum)
22343
22344         (MemberAccess.Resolve): Only perform lookups on Enumerations if
22345         the left hand side is a TypeExpr, not on every enumeration. 
22346
22347         (Binary.Resolve): If types are reference types, then do a cast to
22348         object on operators != and == of both arguments.
22349
22350         * typemanager.cs (FindMembers): Extract instance and static
22351         members if requested.
22352
22353         * interface.cs (PopulateProperty): Use void_type instead of null
22354         as the return type for the setter method.
22355
22356         (PopulateIndexer): ditto.
22357
22358 2001-12-27  Ravi Pratap  <ravi@ximian.com>
22359
22360         * support.cs (ReflectionParameters): Fix minor bug where we
22361         were examining the wrong parameter for the ParamArray attribute.
22362
22363         Cope with requests for the type of the parameter at position
22364         greater than the params parameter's. We now return the element
22365         type of the params array as that makes more sense.
22366
22367         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
22368         accordingly as we no longer have to extract the element type
22369         ourselves.
22370
22371         (Invocation.OverloadResolve): Update.
22372
22373 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22374
22375         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
22376         against IEnumerator, test whether the return value is a descendant
22377         of the IEnumerator interface.
22378
22379         * class.cs (Indexer.Define): Use an auxiliary method to implement
22380         the other bits of the method definition.  Begin support for
22381         explicit interface implementation.
22382
22383         (Property.DefineMethod): Use TypeManager.void_type instead of null
22384         for an empty return value.
22385
22386 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
22387
22388         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
22389         dealing with a FieldExpr which is composed of a FieldBuilder, in
22390         the code path we did extract the constant, but we should have
22391         obtained the underlying value to be able to cast it (otherwise we
22392         end up in an infinite loop, this is what Ravi was running into).
22393
22394         (ArrayCreation.UpdateIndices): Arrays might be empty.
22395
22396         (MemberAccess.ResolveMemberAccess): Add support for section
22397         14.5.4.1 that deals with the special case of E.I when E is a type
22398         and something else, that I can be a reference to a static member.
22399
22400         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
22401         handle a particular array type to create byte blobs, it is just
22402         something we dont generate byteblobs for.
22403
22404         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
22405         arguments. 
22406
22407         * location.cs (Push): remove the key from the hashtable that we
22408         are about to add.   This happens for empty files.
22409
22410         * driver.cs: Dispose files after we have parsed them.
22411
22412         (tokenize): new function that only runs the tokenizer on its
22413         input, for speed testing.
22414
22415 2001-12-26  Ravi Pratap  <ravi@ximian.com>
22416
22417         * class.cs (Event.Define): Define the private field only if there
22418         are no accessors defined.
22419
22420         * expression.cs (ResolveMemberAccess): If there is no associated
22421         field with the event, that means we have an event defined with its
22422         own accessors and we should flag error cs0070 since transforming
22423         ourselves into a field is not valid in that case.
22424
22425         * ecore.cs (SimpleName.DoResolve): Same as above.
22426
22427         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
22428         and charset to sane values.
22429
22430 2001-12-25  Ravi Pratap  <ravi@ximian.com>
22431
22432         * assign.cs (DoResolve): Perform check on events only if they 
22433         are being accessed outside the declaring type.
22434
22435         * cs-parser.jay (event_declarations): Update rules to correctly
22436         set the type of the implicit parameter etc.
22437
22438         (add_accessor, remove_accessor): Set current local parameters.
22439
22440         * expression.cs (Binary): For delegate addition and subtraction,
22441         cast the return value from the method into the appropriate delegate
22442         type.
22443
22444 2001-12-24  Ravi Pratap  <ravi@ximian.com>
22445
22446         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
22447         of these as the workaround is unnecessary.
22448
22449         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
22450         delegate data - none of that is needed at all.
22451
22452         Re-write bits to extract the instance expression and the delegate method
22453         correctly.
22454
22455         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
22456         on delegates too.
22457
22458         * attribute.cs (ApplyAttributes): New method to take care of common tasks
22459         of attaching attributes instead of duplicating code everywhere.
22460
22461         * everywhere : Update code to do attribute emission using the above method.
22462
22463 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22464
22465         * expression.cs (IsParamsMethodApplicable): if there are not
22466         parameters, return immediately.
22467
22468         * ecore.cs: The 0 literal can be implicity converted to an enum
22469         type. 
22470
22471         (SimpleName.DoResolve): First lookup the type, then lookup the
22472         members. 
22473
22474         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
22475         want to get its address.  If the InstanceExpression is not
22476         addressable, store the result in a temporary variable, then get
22477         the address of it.
22478
22479         * codegen.cs: Only display 219 errors on warning level or above. 
22480
22481         * expression.cs (ArrayAccess): Make it implement the
22482         IMemoryLocation interface.
22483
22484         (Binary.DoResolve): handle the operator == (object a, object b)
22485         and operator != (object a, object b) without incurring into a
22486         BoxedCast (because 5 != o should never be performed).
22487
22488         Handle binary enumerator operators.
22489
22490         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22491         value type, otherwise use Ldelem_ref.
22492
22493         Use precomputed names;
22494
22495         (AddressOf): Implement address of
22496
22497         * cs-parser.jay (labeled_statement): Fix recursive block
22498         addition by reworking the production.
22499
22500         * expression.cs (New.DoEmit): New has a special case:
22501                 
22502                  If we are dealing with a ValueType, we have a few
22503                  situations to deal with:
22504                 
22505                     * The target of New is a ValueType variable, that is
22506                       easy, we just pass this as the variable reference
22507                 
22508                     * The target of New is being passed as an argument,
22509                       to a boxing operation or a function that takes a
22510                       ValueType.
22511                 
22512                       In this case, we need to create a temporary variable
22513                       that is the argument of New.
22514
22515
22516 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22517
22518         * rootcontext.cs (LookupType): Check that current_type is not null before
22519         going about looking at nested types.
22520
22521         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22522         not implement the IAssignMethod interface any more.
22523
22524         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22525         where we tranform them into FieldExprs if they are being resolved from within
22526         the declaring type.
22527
22528         * ecore.cs (SimpleName.DoResolve): Do the same here.
22529
22530         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22531
22532         * ../errors/bug10.cs : Add.
22533
22534         * ../errors/cs0070.cs : Add.
22535
22536         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22537
22538         * assign.cs : Get rid of EventIsLocal everywhere.
22539
22540 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22541
22542         * ecore.cs (ConvertIntLiteral): finished the implementation.
22543
22544         * statement.cs (SwitchLabel): Convert the value we are using as a
22545         key before looking up the table.
22546
22547 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22548
22549         * codegen.cs (EmitTopBlock): Require a Location argument now.
22550
22551         * cs-parser.jay (constructor_declarator): We need to setup
22552         current_local_parameters before we parse the
22553         opt_constructor_initializer, to allow the variables to be bound
22554         to the constructor arguments.
22555
22556         * rootcontext.cs (LookupType): First lookup nested classes in our
22557         class and our parents before we go looking outside our class.
22558
22559         * expression.cs (ConstantFold): Extract/debox the values at the
22560         beginnning. 
22561
22562         * rootcontext.cs (EmitCode): Resolve the constants first before we
22563         resolve the types.  This is not really needed, but it helps debugging.
22564
22565         * statement.cs: report location.
22566
22567         * cs-parser.jay: pass location to throw statement.
22568
22569         * driver.cs: Small bug fix.
22570
22571         * report.cs: Updated format to be 4-zero filled digits.
22572
22573 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22574
22575         * expression.cs (CheckIndices): Fix minor bug where the wrong
22576         variable was being referred to ;-)
22577
22578         (DoEmit): Do not call EmitStaticInitializers when the 
22579         underlying type is System.Object.
22580
22581 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22582
22583         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22584         and do the usual workaround for SRE.
22585
22586         * class.cs (MyEventBuilder.EventType): New member to get at the type
22587         of the event, quickly.
22588
22589         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22590
22591         * assign.cs (Assign.DoResolve): Handle the case when the target
22592         is an EventExpr and perform the necessary checks.
22593
22594         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22595         interface.
22596
22597         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22598
22599         (EventExpr): Set the type in the constructor itself since we 
22600         are meant to be born fully resolved.
22601
22602         (EventExpr.Define): Revert code I wrote earlier.
22603                 
22604         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22605         instance expression is null. The instance expression is a This in that case
22606         or a null, depending on whether it is a static method or not.
22607
22608         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22609         refers to more than one method.
22610
22611         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22612         and accordingly flag errors.
22613
22614 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22615
22616         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
22617
22618 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22619
22620         * location.cs (ToString): Provide useful rutine.
22621
22622 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22623
22624         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
22625         objects, return the actual integral boxed.
22626
22627         * statement.cs (SwitchLabel): define an ILLabel for each
22628         SwitchLabel. 
22629
22630         (Switch.CheckSwitch): If the value is a Literal, extract
22631         the underlying literal.
22632
22633         Also in the unused hashtable we had, add the SwitchLabel so we can
22634         quickly look this value up.
22635
22636         * constant.cs: Implement a bunch of new constants.  Rewrite
22637         Literal based on this.  Made changes everywhere to adapt to this.
22638
22639         * expression.cs (Expression.MakeByteBlob): Optimize routine by
22640         dereferencing array only once, and also copes with enumrations.
22641
22642         bytes are two bytes wide, not one.
22643
22644         (Cast): Perform constant conversions.
22645
22646         * ecore.cs (TryImplicitIntConversion): Return literals instead of
22647         wrappers to the literals here.
22648
22649         * expression.cs (DoNumericPromotions): long literals can converted
22650         to ulong implicity (this is taken care of elsewhere, but I was
22651         missing this spot).
22652
22653         * ecore.cs (Expression.Literalize): Make the return type Literal,
22654         to improve type checking.
22655
22656         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
22657
22658 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22659
22660         * literal.cs: Revert code from ravi that checked the bounds.  The
22661         bounds are sane by the definition of the type itself. 
22662
22663         * typemanager.cs: Fix implementation of ImplementsInterface.  We
22664         need to actually look up in our parent hierarchy for interfaces
22665         implemented. 
22666
22667         * const.cs: Use the underlying type for enumerations
22668
22669         * delegate.cs: Compute the basename for the delegate creation,
22670         that should fix the delegate test case, and restore the correct
22671         Type Lookup semantics in rootcontext
22672
22673         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
22674         referencing a nested type with the Reflection API is using the "+"
22675         sign. 
22676
22677         * cs-parser.jay: Do not require EOF token at the end.
22678
22679 2001-12-20  Ravi Pratap  <ravi@ximian.com>
22680
22681         * rootcontext.cs (LookupType): Concatenate type names with
22682         a '.' instead of a '+' The test suite passes again.
22683
22684         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
22685         field of the enumeration.
22686
22687         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
22688         the case when the member is an EventExpr.
22689
22690         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
22691         static has an associated instance expression.
22692
22693         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
22694
22695         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
22696
22697         * class.cs (Event.Define): Register event and perform appropriate checks
22698         for error #111.
22699
22700         We define the Add and Remove methods even if the use provides none because
22701         in that case, we provide default implementations ourselves.
22702
22703         Define a private field of the type of the event. This is done by the CSC compiler
22704         and we should be doing it too ;-)
22705
22706         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
22707         More methods we use in code we generate.
22708
22709         (multicast_delegate_type, delegate_type): Two separate types since the distinction
22710         is important.
22711
22712         (InitCoreTypes): Update accordingly for the above.
22713
22714         * class.cs (Event.Emit): Generate code for default accessors that we provide
22715
22716         (EmitDefaultMethod): Do the job in the above.
22717
22718         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
22719         appropriate place.
22720
22721 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22722
22723         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
22724         builders even if we were missing one.
22725
22726         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
22727         pass the Basename as our class name instead of the Name.  The
22728         basename will be correctly composed for us.
22729
22730         * parameter.cs (Paramters): Now takes a Location argument.
22731
22732         * decl.cs (DeclSpace.LookupType): Removed convenience function and
22733         make all the code call directly LookupType in RootContext and take
22734         this chance to pass the Location information everywhere.
22735
22736         * Everywhere: pass Location information.
22737
22738 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
22739
22740         * class.cs (Constructor.Define): Updated way of detecting the
22741         length of the parameters.
22742
22743         (TypeContainer.DefineType): Use basename as the type name for
22744         nested types.
22745
22746         (TypeContainer.Define): Do not recursively define types here, as
22747         definition is taken care in order by the RootContext.
22748
22749         * tree.cs: Keep track of namespaces in a per-file basis.
22750
22751         * parameter.cs (Parameter.ComputeSignature): Update to use
22752         DeclSpace. 
22753
22754         (Parameters.GetSignature): ditto.
22755
22756         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
22757         instead of a TypeContainer.
22758
22759         (Interface.SemanticAnalysis): Use `this' instead of our parent to
22760         resolve names.  Because we need to be resolve in our context, not
22761         our parents.
22762
22763         * driver.cs: Implement response files.
22764
22765         * class.cs (TypeContainer.DefineType): If we are defined, do not
22766         redefine ourselves.
22767
22768         (Event.Emit): Emit the code for add/remove handlers.
22769         (Event.Define): Save the MethodBuilders for add/remove.
22770
22771         * typemanager.cs: Use pair here too.
22772
22773         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
22774         DictionaryEntry requires the first argument to be non-null.  
22775
22776         (enum_declaration): Compute full name for registering the
22777         enumeration.
22778
22779         (delegate_declaration): Instead of using
22780         formal_parameter_list, use opt_formal_parameter_list as the list
22781         can be empty.
22782
22783         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
22784         (EventParsing): New property that controls whether `add' and
22785         `remove' are returned as tokens or identifiers (for events);
22786
22787 2001-12-19  Ravi Pratap  <ravi@ximian.com>
22788
22789         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
22790         use MyEventBuilder only and let it wrap the real builder for us.
22791
22792         (MyEventBuilder): Revamp constructor etc.
22793
22794         Implement all operations that we perform on EventBuilder in precisely the same
22795         way here too.
22796
22797         (FindMembers): Update to use the EventBuilder member.
22798
22799         (Event.Emit): Update accordingly.
22800
22801 2001-12-18  Ravi Pratap  <ravi@ximian.com>
22802
22803         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
22804         by calling the appropriate methods.
22805
22806         (GetCustomAttributes): Make stubs as they cannot possibly do anything
22807         useful.
22808
22809         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
22810
22811 2001-12-17  Ravi Pratap  <ravi@ximian.com>
22812
22813         * delegate.cs (Delegate.Populate): Check that the return type
22814         and various parameters types are indeed accessible.
22815
22816         * class.cs (Constructor.Define): Same here.
22817
22818         (Field.Define): Ditto.
22819
22820         (Event.Define): Ditto.
22821
22822         (Operator.Define): Check that the underlying Method defined itself
22823         correctly - so it's MethodBuilder should not be null.
22824
22825         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
22826         expression happens to be null.
22827
22828         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
22829         members but as of now we don't seem to be able to do anything really useful with it.
22830
22831         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
22832         not the EventBuilder.
22833
22834 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
22835
22836         * cs-tokenizer.cs: Add support for defines.
22837         Add support for #if, #elif, #else, #endif
22838
22839         (eval_var): evaluates a variable.
22840         (eval): stubbed for evaluating functions.
22841
22842         * cs-parser.jay: Pass the defines information
22843
22844         * driver.cs: Add --define command line option.
22845
22846         * decl.cs: Move MemberCore here.
22847
22848         Make it the base class for DeclSpace.  This allows us to catch and
22849         report 108 and 109 for everything now.
22850
22851         * class.cs (TypeContainer.Define): Extract all the members
22852         before populating and emit the warning 108 (new keyword required
22853         to override) instead of having each member implement this.
22854
22855         (MemberCore.Define): New abstract method, we will be using this in
22856         the warning reporting engine in Populate.
22857
22858         (Operator.Define): Adjust to new MemberCore protocol. 
22859
22860         * const.cs (Const): This does not derive from Expression, it is a
22861         temporary object we use to create fields, it is a MemberCore. 
22862
22863         * class.cs (Method.Define): Allow the entry point to be in a
22864         specific class.
22865
22866         * driver.cs: Rewrite the argument handler to clean it up a bit.
22867
22868         * rootcontext.cs: Made it just an auxiliary namespace feature by
22869         making everything static.
22870
22871         * driver.cs: Adapt code to use RootContext type name instead of
22872         instance variable.
22873
22874         * delegate.cs: Remove RootContext argument.
22875
22876         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
22877         argument. 
22878
22879         * class.cs (Event.Define): The lookup can fail.
22880
22881         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
22882
22883         * expression.cs: Resolve the this instance before invoking the code.
22884
22885 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
22886
22887         * cs-parser.jay: Add a production in element_access that allows
22888         the thing to become a "type" reference.  This way we can parse
22889         things like "(string [])" as a type.
22890
22891         Note that this still does not handle the more complex rules of
22892         casts. 
22893
22894
22895         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
22896
22897         * ecore.cs: (CopyNewMethods): new utility function used to
22898         assemble the list of methods from running FindMembers.
22899
22900         (MemberLookup): Rework FindMembers so that 
22901
22902 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
22903
22904         * class.cs (TypeContainer): Remove Delegates who fail to be
22905         defined.
22906
22907         * delegate.cs (Populate): Verify that we dont get null return
22908         values.   TODO: Check for AsAccessible.
22909
22910         * cs-parser.jay: Use basename to emit error 574 (destructor should
22911         have the same name as container class), not the full name.
22912
22913         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
22914         possible representation.  
22915
22916         Also implements integer type suffixes U and L.
22917
22918 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
22919
22920         * expression.cs (ArrayCreation.DoResolve): We need to do the
22921         argument resolution *always*.
22922
22923         * decl.cs: Make this hold the namespace.  Hold the root context as
22924         well.
22925         (LookupType): Move here.
22926
22927         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
22928
22929         * location.cs (Row, Name): Fixed the code, it was always returning
22930         references to the first file.
22931
22932         * interface.cs: Register properties defined through interfaces.
22933
22934         * driver.cs: Add support for globbing on the command line
22935
22936         * class.cs (Field): Make it derive from MemberCore as well.
22937         (Event): ditto.
22938
22939 2001-12-15  Ravi Pratap  <ravi@ximian.com>
22940
22941         * class.cs (Event::Define): Check that the type of the event is a delegate
22942         type else flag error #66.
22943
22944         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
22945         same.
22946
22947         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
22948         values of EntryPoint, CharSet etc etc.
22949
22950         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
22951
22952         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
22953         be null and we should ignore this. I am not sure if this is really clean. Apparently,
22954         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
22955         which needs this to do its work.
22956
22957         * ../errors/cs0066.cs : Add.
22958
22959 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
22960
22961         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
22962         helper functions.
22963
22964         * class.cs: (MethodSignature.MethodSignature): Removed hack that
22965         clears out the parameters field.
22966         (MemberSignatureCompare): Cleanup
22967
22968         (MemberCore): New base class used to share code between MethodCore
22969         and Property.
22970
22971         (RegisterRequiredImplementations) BindingFlags.Public requires
22972         either BindingFlags.Instace or Static.  Use instance here.
22973
22974         (Property): Refactored code to cope better with the full spec.
22975
22976         * parameter.cs (GetParameterInfo): Return an empty array instead
22977         of null on error.
22978
22979         * class.cs (Property): Abstract or extern properties have no bodies.
22980
22981         * parameter.cs (GetParameterInfo): return a zero-sized array.
22982
22983         * class.cs (TypeContainer.MethodModifiersValid): Move all the
22984         method modifier validation to the typecontainer so we can reuse
22985         this on properties.
22986
22987         (MethodCore.ParameterTypes): return an empty sized array of types.
22988
22989         (Property.Define): Test property modifier validity.
22990
22991         Add tests for sealed/override too.
22992
22993         (Method.Emit): abstract or extern methods have no bodies.
22994
22995 2001-12-14  Ravi Pratap  <ravi@ximian.com>
22996
22997         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
22998         thing.
22999
23000         (Method::Define, ::Emit): Modify accordingly.
23001
23002         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
23003
23004         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
23005
23006         * makefile: Pass in /unsafe.
23007
23008 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
23009
23010         * class.cs (MakeKey): Kill routine.
23011
23012         * class.cs (TypeContainer.Define): Correctly define explicit
23013         method implementations (they require the full interface name plus
23014         the method name).
23015
23016         * typemanager.cs: Deply the PtrHashtable here and stop using the
23017         lame keys.  Things work so much better.
23018
23019         This of course broke everyone who depended on `RegisterMethod' to
23020         do the `test for existance' test.  This has to be done elsewhere.
23021
23022         * support.cs (PtrHashtable): A hashtable that avoid comparing with
23023         the object stupid Equals method (because, that like fails all over
23024         the place).  We still do not use it.
23025
23026         * class.cs (TypeContainer.SetRequiredInterface,
23027         TypeContainer.RequireMethods): Killed these two routines and moved
23028         all the functionality to RegisterRequiredImplementations.
23029
23030         (TypeContainer.RegisterRequiredImplementations): This routine now
23031         registers all the implementations required in an array for the
23032         interfaces and abstract methods.  We use an array of structures
23033         which can be computed ahead of time to reduce memory usage and we
23034         also assume that lookups are cheap as most classes will not
23035         implement too many interfaces.
23036
23037         We also avoid creating too many MethodSignatures.
23038
23039         (TypeContainer.IsInterfaceMethod): Update and optionally does not
23040         clear the "pending" bit if we find that there are problems with
23041         the declaration.
23042
23043         (TypeContainer.VerifyPendingMethods): Update to report errors of
23044         methods that look like implementations but are not.
23045
23046         (TypeContainer.Define): Add support for explicit interface method
23047         implementation. 
23048
23049 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
23050
23051         * typemanager.cs: Keep track of the parameters here instead of
23052         being a feature of the TypeContainer.
23053
23054         * class.cs: Drop the registration of parameters here, as
23055         InterfaceMethods are also interface declarations.
23056
23057         * delegate.cs: Register methods with the TypeManager not only with
23058         the TypeContainer.  This code was buggy.
23059
23060         * interface.cs: Full registation here.
23061
23062 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
23063
23064         * expression.cs: Remove reducer for binary expressions, it can not
23065         be done this way.
23066
23067         * const.cs: Put here the code that used to go into constant.cs
23068
23069         * constant.cs: Put here the code for constants, this is a new base
23070         class for Literals.
23071
23072         * literal.cs: Make Literal derive from Constant.
23073
23074 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
23075
23076         * statement.cs (Return.Emit): Report error 157 if the user
23077         attempts to return from a finally block.
23078
23079         (Return.Emit): Instead of emitting a return, jump to the end of
23080         the function.
23081
23082         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
23083         LocalBuilder to store the result of the function.  ReturnLabel is
23084         the target where we jump.
23085
23086
23087 2001-12-09  Radek Doulik  <rodo@ximian.com>
23088
23089         * cs-parser.jay: remember alias in current namespace
23090
23091         * ecore.cs (SimpleName::DoResolve): use aliases for types or
23092         namespaces
23093
23094         * class.cs (LookupAlias): lookup alias in my_namespace
23095
23096         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
23097         aliases hashtable
23098         (LookupAlias): lookup alias in this and if needed in parent
23099         namespaces
23100
23101 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
23102
23103         * support.cs: 
23104
23105         * rootcontext.cs: (ModuleBuilder) Made static, first step into
23106         making things static.  I need this to avoid passing the
23107         TypeContainer when calling ParameterType.
23108
23109         * support.cs (InternalParameters.ParameterType): Remove ugly hack
23110         that did string manipulation to compute the type and then call
23111         GetType.  Use Parameter.ParameterType instead.
23112
23113         * cs-tokenizer.cs: Consume the suffix for floating values.
23114
23115         * expression.cs (ParameterReference): figure out whether this is a
23116         reference parameter or not.  Kill an extra variable by computing
23117         the arg_idx during emission.
23118
23119         * parameter.cs (Parameters.GetParameterInfo): New overloaded
23120         function that returns whether a parameter is an out/ref value or not.
23121
23122         (Parameter.ParameterType): The type of the parameter (base,
23123         without ref/out applied).
23124
23125         (Parameter.Resolve): Perform resolution here.
23126         (Parameter.ExternalType): The full type (with ref/out applied).
23127
23128         * statement.cs (Using.Emit, Using.EmitExpression): Implement
23129         support for expressions on the using statement.
23130
23131 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
23132
23133         * statement.cs (Using.EmitLocalVariableDecls): Split the
23134         localvariable handling of the using statement.
23135
23136         (Block.EmitMeta): Keep track of variable count across blocks.  We
23137         were reusing slots on separate branches of blocks.
23138
23139         (Try.Emit): Emit the general code block, we were not emitting it. 
23140
23141         Check the type of the declaration to be an IDisposable or
23142         something that can be implicity converted to it. 
23143
23144         Emit conversions if required.
23145
23146         * ecore.cs (EmptyExpression): New utility class.
23147         (Expression.ImplicitConversionExists): New utility function.
23148
23149 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
23150
23151         * statement.cs (Using): Implement.
23152
23153         * expression.cs (LocalVariableReference): Support read only variables.
23154
23155         * statement.cs: Remove the explicit emit for the Leave opcode.
23156         (VariableInfo): Add a readonly field.
23157
23158 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
23159
23160         * ecore.cs (ConvCast): new class used to encapsulate the various
23161         explicit integer conversions that works in both checked and
23162         unchecked contexts.
23163
23164         (Expression.ConvertNumericExplicit): Use new ConvCast class to
23165         properly generate the overflow opcodes.
23166
23167 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23168
23169         * statement.cs: The correct type for the EmptyExpression is the
23170         element_type, not the variable type.  Ravi pointed this out.
23171
23172 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23173
23174         * class.cs (Method::Define): Handle PInvoke methods specially
23175         by using DefinePInvokeMethod instead of the usual one.
23176
23177         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
23178         above to do the task of extracting information and defining the method.
23179
23180 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23181
23182         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
23183         of the condition for string type.
23184
23185         (Emit): Move that here. 
23186
23187         (ArrayCreation::CheckIndices): Keep string literals in their expression
23188         form.
23189
23190         (EmitDynamicInitializers): Handle strings appropriately.
23191
23192 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23193
23194         * codegen.cs (EmitContext): Replace multiple variables with a
23195         single pointer to the current Switch statement.
23196
23197         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
23198         EmitContext.
23199
23200 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23201
23202         * statement.cs 
23203
23204         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
23205         default'.
23206
23207         (Foreach.Emit): Foreach on arrays was not setting
23208         up the loop variables (for break/continue).
23209
23210         (GotoCase): Semi-implented.
23211
23212 2001-12-03  Ravi Pratap  <ravi@ximian.com>
23213
23214         * attribute.cs (CheckAttribute): Handle system attributes by using
23215         Attribute.GetAttributes to examine information we need.
23216
23217         (GetValidPlaces): Same here.
23218
23219         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
23220
23221         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
23222
23223         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
23224
23225         (Method::Define): Set appropriate flags if we have a DllImport attribute.
23226
23227         (Method::Emit): Handle the case when we are a PInvoke method.
23228
23229 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23230
23231         * expression.cs: Use ResolveWithSimpleName on compound names.
23232
23233 2001-12-02  Ravi Pratap  <ravi@ximian.com>
23234
23235         * constant.cs (EmitConstant): Make sure we resolve the associated expression
23236         before trying to reduce it.
23237
23238         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
23239
23240         * constant.cs (LookupConstantValue): Implement.
23241
23242         (EmitConstant): Use the above in emitting the constant.
23243
23244         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
23245         that are user-defined by doing a LookupConstantValue on them.
23246
23247         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
23248         too, like above.
23249
23250 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
23251
23252         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
23253
23254         (BaseAccess.DoResolve): Implement.
23255
23256         (MemberAccess.DoResolve): Split this routine into a
23257         ResolveMemberAccess routine that can be used independently
23258
23259 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
23260
23261         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
23262         As that share bits of the implementation.  Is returns a boolean,
23263         while As returns the Type that is being probed.
23264
23265 2001-12-01  Ravi Pratap  <ravi@ximian.com>
23266
23267         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
23268         instead of a Literal - much easier.
23269
23270         (EnumInTransit): Remove - utterly useless :-)
23271
23272         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
23273
23274         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
23275
23276         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
23277         chain when we have no associated expression.
23278
23279 2001-11-30  Ravi Pratap  <ravi@ximian.com>
23280
23281         * constant.cs (Define): Use Location while reporting the errror.
23282
23283         Also emit a warning when 'new' is used and there is no inherited
23284         member to hide.
23285
23286         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
23287         populated.
23288
23289         (LookupEnumValue): Implement to lookup an enum member's value and define it
23290         if necessary.
23291
23292         (Populate): Re-write accordingly to use the above routine.
23293
23294 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
23295
23296         * expression.cs (This): Fix prototype for DoResolveLValue to
23297         override the base class DoResolveLValue.
23298
23299         * cs-parser.cs: Report errors cs574 and cs575 (destructor
23300         declarations) 
23301
23302         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
23303         (we need to load the address of the field here).  This fixes
23304         test-22. 
23305
23306         (FieldExpr.DoResolveLValue): Call the DoResolve
23307         function to initialize the Instance expression.
23308
23309         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
23310         correctly the GetEnumerator operation on a value type.
23311
23312         * cs-parser.jay: Add more simple parsing error catches.
23313
23314         * statement.cs (Switch): Add support for string switches.
23315         Handle null specially.
23316
23317         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
23318
23319 2001-11-28  Ravi Pratap  <ravi@ximian.com>
23320
23321         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
23322
23323         (declare_local_constant): New helper function.
23324
23325         * statement.cs (AddConstant): Keep a separate record of constants
23326
23327         (IsConstant): Implement to determine if a variable is a constant.
23328
23329         (GetConstantExpression): Implement.
23330
23331         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
23332
23333         * statement.cs (IsVariableDefined): Re-write.
23334
23335 2001-11-27  Ravi Pratap  <ravi@ximian.com>
23336
23337         * class.cs (TypeContainer::FindMembers): Look for constants
23338         in the case when we are looking for MemberTypes.Field
23339
23340         * expression.cs (MemberAccess::DoResolve): Check that in the
23341         case we are a FieldExpr and a Literal, we are not being accessed
23342         by an instance reference.
23343
23344         * cs-parser.jay (local_constant_declaration): Implement.
23345
23346         (declaration_statement): Implement for constant declarations.
23347
23348 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
23349
23350         * statement.cs (Switch): Catch double defaults.
23351
23352         (Switch): More work on the switch() statement
23353         implementation.  It works for integral values now, need to finish
23354         string support.
23355
23356
23357 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23358
23359         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
23360         integer literals into other integer literals.  To be used by
23361         switch. 
23362
23363 2001-11-24  Ravi Pratap  <ravi@ximian.com>
23364
23365         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
23366         some memory.
23367
23368         (EmitDynamicInitializers): Cope with the above since we extract data
23369         directly from ArrayData now.
23370
23371         (ExpectInitializers): Keep track of whether initializers are mandatory
23372         or not.
23373
23374         (Bounds): Make it a hashtable to prevent the same dimension being 
23375         recorded for every element in that dimension.
23376
23377         (EmitDynamicInitializers): Fix bug which prevented the Set array method
23378         from being found.
23379
23380         Also fix bug which was causing the indices to be emitted in the reverse
23381         order.
23382
23383 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23384
23385         * expression.cs (ArrayCreation): Implement the bits that Ravi left
23386         unfinished.  They do not work, because the underlying code is
23387         sloppy.
23388
23389 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23390
23391         * cs-parser.jay: Remove bogus fixme.
23392
23393         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
23394         on Switch statement.
23395
23396 2001-11-23  Ravi Pratap  <ravi@ximian.com>
23397
23398         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
23399         the same. 
23400
23401         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
23402         parameter. Apparently, any expression is allowed. 
23403
23404         (ValidateInitializers): Update accordingly.
23405
23406         (CheckIndices): Fix some tricky bugs thanks to recursion.
23407
23408         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
23409         I was being completely brain-dead.
23410
23411         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
23412         and re-write acordingly.
23413
23414         (DelegateInvocation): Re-write accordingly.
23415
23416         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
23417
23418         (MakeByteBlob): Handle types more correctly.
23419
23420         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
23421         initialization from expressions but it is incomplete because I am a complete
23422         Dodo :-|
23423
23424 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23425
23426         * statement.cs (If.Emit): Fix a bug that generated incorrect code
23427         on If.  Basically, we have to return `true' (ie, we do return to
23428         our caller) only if both branches of the if return.
23429
23430         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
23431         short-circuit operators, handle them as short circuit operators. 
23432
23433         (Cast.DoResolve): Resolve type.
23434         (Cast.Cast): Take an expression as the target type.
23435
23436         * cs-parser.jay (cast_expression): Remove old hack that only
23437         allowed a limited set of types to be handled.  Now we take a
23438         unary_expression and we resolve to a type during semantic
23439         analysis.
23440
23441         Use the grammar productions from Rhys to handle casts (this is
23442         not complete like Rhys syntax yet, we fail to handle that corner
23443         case that C# has regarding (-x), but we will get there.
23444
23445 2001-11-22  Ravi Pratap  <ravi@ximian.com>
23446
23447         * class.cs (EmitFieldInitializer): Take care of the case when we have a
23448         field which is an array type.
23449
23450         * cs-parser.jay (declare_local_variables): Support array initialization too.
23451
23452         * typemanager.cs (MakeKey): Implement.
23453
23454         (everywhere): Use the above appropriately.
23455
23456         * cs-parser.jay (for_statement): Update for array initialization while
23457         declaring variables.
23458
23459         * ecore.cs : The error message was correct, it's the variable's names that
23460         were misleading ;-) Make the code more readable.
23461
23462         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
23463         the correct type etc.
23464
23465         (ConvertExplicit): Handle Enum types by examining the underlying type.
23466
23467 2001-11-21  Ravi Pratap  <ravi@ximian.com>
23468
23469         * parameter.cs (GetCallingConvention): Always return
23470         CallingConventions.Standard for now.
23471
23472 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23473
23474         * expression.cs (Binary.ResolveOperator): Update the values of `l'
23475         and `r' after calling DoNumericPromotions.
23476
23477         * ecore.cs: Fix error message (the types were in the wrong order).
23478
23479         * statement.cs (Foreach.ProbeCollectionType): Need to pass
23480         BindingFlags.Instance as well 
23481
23482         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
23483         implicit int literal conversion in an empty cast so that we
23484         propagate the right type upstream.
23485
23486         (UnboxCast): new class used to unbox value types.
23487         (Expression.ConvertExplicit): Add explicit type conversions done
23488         by unboxing.
23489
23490         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23491         the target type before applying the implicit LongLiterals to ULong
23492         literal cast.
23493
23494 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23495
23496         * cs-parser.jay (for_statement): Reworked the way For works: now
23497         we declare manually any variables that are introduced in
23498         for_initializer to solve the problem of having out-of-band code
23499         emition (that is what got for broken).
23500
23501         (declaration_statement): Perform the actual variable declaration
23502         that used to be done in local_variable_declaration here.
23503
23504         (local_variable_declaration): Do not declare anything, just pass
23505         the information on a DictionaryEntry
23506
23507 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23508
23509         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23510         re-write of the logic to now make it recursive.
23511
23512         (UpdateIndices): Re-write accordingly.
23513
23514         Store element data in a separate ArrayData list in the above methods.
23515
23516         (MakeByteBlob): Implement to dump the array data into a byte array.
23517
23518 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23519
23520         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23521         into CheckIndices.
23522
23523         * constant.cs (Define): Implement.
23524
23525         (EmitConstant): Re-write fully.
23526
23527         Pass in location info.
23528
23529         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23530         respectively.
23531
23532         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23533         DictionaryEntry since we need location info too.
23534
23535         (constant_declaration): Update accordingly.
23536
23537         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23538         code into another method : UpdateIndices.
23539
23540 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23541
23542         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23543         some type checking etc.
23544
23545 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23546
23547         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23548         bits to provide dimension info if the user skips doing that.
23549
23550         Update second constructor to store the rank correctly.
23551
23552 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23553
23554         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23555         and try to implement.
23556
23557         * ../errors/cs0150.cs : Add.
23558
23559         * ../errors/cs0178.cs : Add.
23560
23561 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23562
23563         * statement.cs: Implement foreach on multi-dimensional arrays. 
23564
23565         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23566         name of the params argument.
23567
23568         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23569         initializing the array.
23570
23571         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23572         we can use this elsewhere.
23573
23574         * statement.cs: Finish implementation of foreach for single
23575         dimension arrays.
23576
23577         * cs-parser.jay: Use an out-of-band stack to pass information
23578         around, I wonder why I need this.
23579
23580         foreach_block: Make the new foreach_block the current_block.
23581
23582         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23583         function used to return a static Parameters structure.  Used for
23584         empty parameters, as those are created very frequently.
23585
23586         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23587
23588 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23589
23590         * interface.cs : Default modifier is private, not public. The
23591         make verify test passes again.
23592
23593 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23594
23595         * support.cs (ReflectionParameters): Fix logic to determine
23596         whether the last parameter is a params one. Test 9 passes again.
23597
23598         * delegate.cs (Populate): Register the builders we define with
23599         RegisterParameterForBuilder. Test 19 passes again.
23600
23601         * cs-parser.jay (property_declaration): Reference $6 instead
23602         of $$ to get at the location.
23603
23604         (indexer_declaration): Similar stuff.
23605
23606         (attribute): Ditto.
23607
23608         * class.cs (Property): Register parameters for the Get and Set methods
23609         if they exist. Test 23 passes again.
23610
23611         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23612         call to EmitArguments as we are sure there aren't any params arguments. 
23613         Test 32 passes again.
23614
23615         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
23616         IndexOutOfRangeException. 
23617
23618         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
23619         Test 33 now passes again.
23620
23621 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
23622
23623         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
23624         broke a bunch of things.  Will have to come up with a better way
23625         of tracking locations.
23626
23627         * statement.cs: Implemented foreach for single dimension arrays.
23628
23629 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23630
23631         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
23632         an error.  This removes the lookup from the critical path.
23633
23634         * cs-parser.jay: Removed use of temporary_loc, which is completely
23635         broken. 
23636
23637 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
23638
23639         * support.cs (ReflectionParameters.ParameterModifier): Report
23640         whether the argument is a PARAMS argument or not.
23641
23642         * class.cs: Set the attribute `ParamArrayAttribute' on the
23643         parameter argument.
23644
23645         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
23646         and cons_param_array_attribute (ConstructorInfo for
23647         ParamArrayAttribute)., 
23648
23649         * codegen.cs: Emit the return using the `Return' statement, that
23650         way we can report the error correctly for missing return values. 
23651
23652         * class.cs (Method.Emit): Clean up.
23653
23654         * expression.cs (Argument.Resolve): Take another argument: the
23655         location where this argument is used.  Notice that this is not
23656         part of the "Argument" class as to reduce the size of the
23657         structure (we know the approximate location anyways).
23658
23659         Test if the argument is a variable-reference, if not, then
23660         complain with a 206.
23661
23662         (Argument.Emit): Emit addresses of variables.
23663
23664         (Argument.FullDesc): Simplify.
23665
23666         (Invocation.DoResolve): Update for Argument.Resolve.
23667
23668         (ElementAccess.DoResolve): ditto.
23669
23670         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
23671         method should be virtual, as this method is always virtual.
23672
23673         (NewDelegate.DoResolve): Update for Argument.Resolve.
23674
23675         * class.cs (ConstructorInitializer.DoResolve): ditto.
23676
23677         * attribute.cs (Attribute.Resolve): ditto.
23678
23679 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
23680
23681         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
23682
23683         * expression.cs (ParameterReference): Drop IStackStorage and implement
23684         IAssignMethod instead. 
23685
23686         (LocalVariableReference): ditto.
23687
23688         * ecore.cs (FieldExpr): Drop IStackStorage and implement
23689         IAssignMethod instead. 
23690
23691 2001-11-13  Miguel de Icaza <miguel@ximian.com>
23692
23693         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
23694         enumerations that are used in heavily used structures derive from
23695         byte in a laughable and pathetic attempt to reduce memory usage.
23696         This is the kind of pre-optimzations that you should not do at
23697         home without adult supervision.
23698
23699         * expression.cs (UnaryMutator): New class, used to handle ++ and
23700         -- separatedly from the other unary operators.  Cleans up the
23701         code, and kills the ExpressionStatement dependency in Unary.
23702
23703         (Unary): Removed `method' and `Arguments' from this class, making
23704         it smaller, and moving it all to SimpleCall, so I can reuse this
23705         code in other locations and avoid creating a lot of transient data
23706         strucutres when not required.
23707
23708         * cs-parser.jay: Adjust for new changes.
23709
23710 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
23711
23712         * enum.cs (Enum.Populate): If there is a failure during
23713         definition, return
23714
23715         * cs-parser.jay (opt_enum_base): we used to catch type errors
23716         here, but this is really incorrect.  The type error should be
23717         catched during semantic analysis.
23718
23719 2001-12-11  Ravi Pratap  <ravi@ximian.com>
23720
23721         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
23722         current_local_parameters as expected since I, in my stupidity, had forgotten
23723         to do this :-)
23724
23725         * attribute.cs (GetValidPlaces): Fix stupid bug.
23726
23727         * class.cs (Method::Emit): Perform check on applicability of attributes.
23728
23729         (Constructor::Emit): Ditto.
23730
23731         (Field::Emit): Ditto.
23732
23733         (Field.Location): Store location information.
23734
23735         (Property, Event, Indexer, Operator): Ditto.
23736
23737         * cs-parser.jay (field_declaration): Pass in location for each field.
23738
23739         * ../errors/cs0592.cs : Add.
23740
23741 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23742
23743         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
23744
23745         (InitCoreTypes): Update accordingly.
23746
23747         (RegisterAttrType, LookupAttr): Implement.
23748
23749         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
23750         info about the same.
23751
23752         (Resolve): Update to populate the above as necessary.
23753
23754         (Error592): Helper.
23755
23756         (GetValidPlaces): Helper to the above.
23757
23758         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
23759
23760         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
23761
23762 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23763
23764         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
23765
23766         * ../errors/cs0617.cs : Add.
23767
23768 2001-11-11  Ravi Pratap  <ravi@ximian.com>
23769
23770         * enum.cs (Emit): Rename to Populate to be more consistent with what
23771         we expect it to do and when exactly it is called.
23772
23773         * class.cs, rootcontext.cs : Update accordingly.
23774
23775         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
23776         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
23777
23778         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
23779
23780         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
23781         of a fieldinfo using the above, when dealing with a FieldBuilder.
23782
23783 2001-11-10  Ravi Pratap  <ravi@ximian.com>
23784
23785         * ../errors/cs0031.cs : Add.
23786
23787         * ../errors/cs1008.cs : Add.
23788
23789         * ../errrors/cs0543.cs : Add.
23790
23791         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
23792         enum type.
23793
23794         (FindMembers): Implement.
23795
23796         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
23797         enums and delegates too.
23798
23799         (enum_types): Rename to builder_to_enum.
23800
23801         (delegate_types): Rename to builder_to_delegate.
23802
23803         * delegate.cs (FindMembers): Implement.
23804
23805 2001-11-09  Ravi Pratap  <ravi@ximian.com>
23806
23807         * typemanager.cs (IsEnumType): Implement.
23808
23809         * enum.cs (Emit): Re-write parts to account for the underlying type
23810         better and perform checking etc.
23811
23812         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
23813         of the underlying type.
23814
23815         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
23816         value
23817
23818         * enum.cs (error31): Helper to report error #31.
23819
23820         * cs-parser.jay (enum_declaration): Store location of each member too.
23821
23822         * enum.cs (member_to_location): New hashtable. 
23823
23824         (AddEnumMember): Update location hashtable.
23825
23826         (Emit): Use the location of each member while reporting errors.
23827
23828 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23829
23830         * cs-parser.jay: A for_initializer if is a
23831         local_variable_declaration really ammount to have an implicit
23832         block with the variable declaration and no initializer for for.
23833
23834         * statement.cs (For.Emit): Cope with null initializers.
23835
23836         This fixes the infinite loop on for initializers.
23837
23838 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
23839
23840         * enum.cs: More cleanup.
23841
23842         * ecore.cs: Remove dead code.
23843
23844         * class.cs (Property.Emit): More simplification.
23845         (Event.Emit): ditto.
23846
23847         Reworked to have less levels of indentation.
23848
23849 2001-11-08  Ravi Pratap  <ravi@ximian.com>
23850
23851         * class.cs (Property): Emit attributes.
23852
23853         (Field): Ditto.
23854
23855         (Event): Ditto.
23856
23857         (Indexer): Ditto.
23858
23859         (Operator): Ditto.
23860
23861         * enum.cs (Emit): Ditto.
23862
23863         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
23864         Enums too.
23865
23866         * class.cs (Field, Event, etc.): Move attribute generation into the
23867         Emit method everywhere.
23868
23869         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
23870         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
23871         as we had no way of defining nested enums !
23872
23873         * rootcontext.cs : Adjust code accordingly.
23874
23875         * typemanager.cs (AddEnumType): To keep track of enum types separately.
23876
23877 2001-11-07  Ravi Pratap  <ravi@ximian.com>
23878
23879         * expression.cs (EvalConstantExpression): Move into ecore.cs
23880
23881         * enum.cs (Enum): Rename some members and make them public and readonly
23882         according to our convention.
23883
23884         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
23885         nothing else.
23886
23887         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
23888
23889         (Enum::Emit): Write a simple version for now which doesn't try to compute
23890         expressions. I shall modify this to be more robust in just a while.
23891
23892         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
23893
23894         (TypeContainer::CloseType): Create the Enum types too.
23895
23896         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
23897
23898         * expression.cs (EvalConstantExpression): Get rid of completely.
23899
23900         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
23901         user-defined values and other cases.
23902
23903         (IsValidEnumLiteral): Helper function.
23904
23905         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
23906         out there in the case we had a literal FieldExpr.
23907
23908         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
23909
23910         (Literalize): Revamp a bit to take two arguments.
23911
23912         (EnumLiteral): New class which derives from Literal to wrap enum literals.
23913
23914 2001-11-06  Ravi Pratap  <ravi@ximian.com>
23915
23916         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
23917
23918         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
23919
23920         (Resolve): Use the above to ensure we have proper initializers.
23921
23922 2001-11-05  Ravi Pratap  <ravi@ximian.com>
23923
23924         * expression.cs (Expression::EvalConstantExpression): New method to 
23925         evaluate constant expressions.
23926
23927         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
23928
23929 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
23930
23931         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
23932         in an array.
23933
23934         (Binary.ResolveOperator): Handle operator != (object a, object b)
23935         and operator == (object a, object b);
23936
23937         (Binary.DoNumericPromotions): Indicate whether the numeric
23938         promotion was possible.
23939
23940         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
23941         Implement.  
23942
23943         Made the ArrayAccess implement interface IAssignMethod instead of
23944         IStackStore as the order in which arguments are passed reflects
23945         this.
23946
23947         * assign.cs: Instead of using expr.ExprClass to select the way of
23948         assinging, probe for the IStackStore/IAssignMethod interfaces.
23949
23950         * typemanager.cs: Load InitializeArray definition.
23951
23952         * rootcontext.cs (RootContext.MakeStaticData): Used to define
23953         static data that can be used to initialize arrays. 
23954
23955 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
23956
23957         * expression.cs: Handle operator== and operator!= for booleans.
23958
23959         (Conditioal.Reduce): Implement reducer for the ?: operator.
23960
23961         (Conditional.Resolve): Implement dead code elimination.
23962
23963         (Binary.Resolve): Catch string literals and return a new
23964         concatenated string.
23965
23966         (Unary.Reduce): Implement reduction of unary expressions.
23967
23968         * ecore.cs: Split out the expression core handling here.
23969
23970         (Expression.Reduce): New method used to perform constant folding
23971         and CSE.  This is needed to support constant-expressions. 
23972
23973         * statement.cs (Statement.EmitBoolExpression): Pass true and false
23974         targets, and optimize for !x.
23975
23976 2001-11-04  Ravi Pratap  <ravi@ximian.com>
23977
23978         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
23979         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
23980         set custom atttributes.
23981
23982         * literal.cs (Literal::GetValue): New abstract method to return the actual
23983         value of the literal, cast as an object.
23984
23985         (*Literal): Implement GetValue method.
23986
23987         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
23988         expressions to the arraylist but objects of type Argument.
23989
23990         * class.cs (TypeContainer::Emit): Emit our attributes too.
23991
23992         (Method::Emit, Constructor::Emit): Ditto.
23993
23994         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
23995         to be ignoring earlier.
23996
23997 2001-11-03  Ravi Pratap  <ravi@ximian.com>
23998
23999         * attribute.cs (AttributeSection::Define): Implement to do the business
24000         of constructing a CustomAttributeBuilder.
24001
24002         (Attribute): New trivial class. Increases readability of code.  
24003
24004         * cs-parser.jay : Update accordingly.
24005
24006         (positional_argument_list, named_argument_list, named_argument): New rules
24007
24008         (attribute_arguments): Use the above so that we are more correct.
24009
24010 2001-11-02  Ravi Pratap  <ravi@ximian.com>
24011
24012         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
24013         to perform all checks for a method with a params parameter.
24014
24015         (Invocation::OverloadResolve): Update to use the above method and therefore
24016         cope correctly with params method invocations.
24017
24018         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
24019         params too.
24020
24021         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
24022         constructors in our parent too because we can't afford to miss out on 
24023         protected ones ;-)
24024
24025         * attribute.cs (AttributeSection): New name for the class Attribute
24026
24027         Other trivial changes to improve readability.
24028
24029         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
24030         use the new class names.
24031
24032 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24033
24034         * class.cs (Method::Define): Complete definition for params types too
24035
24036         (Indexer::Define): Ditto.
24037
24038         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
24039         Cope everywhere with a request for info about the array parameter.
24040
24041 2001-11-01  Ravi Pratap  <ravi@ximian.com>
24042
24043         * tree.cs (RecordNamespace): Fix up to check for the correct key.
24044
24045         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
24046         local_variable_type to extract the string corresponding to the type.
24047
24048         (local_variable_type): Fixup the action to use the new helper method.
24049
24050         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
24051         go.
24052
24053         * expression.cs : Clean out code which uses the above.
24054
24055 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24056
24057         * typemanager.cs (RegisterMethod): Check if we already have an existing key
24058         and bale out if necessary by returning a false.
24059
24060         (RegisterProperty): Ditto.
24061
24062         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
24063         and print out appropriate error messages.
24064
24065         * interface.cs (everywhere): Ditto.
24066
24067         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
24068         location to constructor.
24069
24070         * class.cs (Property, Event, Indexer): Update accordingly.
24071
24072         * ../errors/cs111.cs : Added.
24073
24074         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
24075         of a method, as laid down by the spec.
24076
24077         (Invocation::OverloadResolve): Use the above method.
24078
24079 2001-10-31  Ravi Pratap  <ravi@ximian.com>
24080
24081         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
24082         now take a TypeContainer and a Parameters object.
24083
24084         (ParameterData): Modify return type of ParameterModifier method to be 
24085         Parameter.Modifier and not a string.
24086
24087         (ReflectionParameters, InternalParameters): Update accordingly.
24088
24089         * expression.cs (Argument::GetParameterModifier): Same here.
24090
24091         * support.cs (InternalParameters::ParameterType): Find a better way of determining
24092         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
24093         symbol in it at all so maybe this is only for now.
24094
24095 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24096
24097         * support.cs (InternalParameters): Constructor now takes an extra argument 
24098         which is the actual Parameters class.
24099
24100         (ParameterDesc): Update to provide info on ref/out modifiers.
24101
24102         * class.cs (everywhere): Update call to InternalParameters to pass in
24103         the second argument too.
24104
24105         * support.cs (ParameterData): Add ParameterModifier, which is a method 
24106         to return the modifier info [ref/out etc]
24107
24108         (InternalParameters, ReflectionParameters): Implement the above.
24109
24110         * expression.cs (Argument::ParameterModifier): Similar function to return
24111         info about the argument's modifiers.
24112
24113         (Invocation::OverloadResolve): Update to take into account matching modifiers 
24114         too.
24115
24116         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
24117         a new SetFormalParameters object which we pass to InternalParameters.
24118
24119 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24120
24121         * expression.cs (NewArray): Merge into the ArrayCreation class.
24122
24123 2001-10-29  Ravi Pratap  <ravi@ximian.com>
24124
24125         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
24126         NewUserdefinedArray into one as there wasn't much of a use in having
24127         two separate ones.
24128
24129         * expression.cs (Argument): Change field's name to ArgType from Type.
24130
24131         (Type): New readonly property which returns the proper type, taking into 
24132         account ref/out modifiers.
24133
24134         (everywhere): Adjust code accordingly for the above.
24135
24136         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
24137         whether we are emitting for a ref or out parameter.
24138
24139         * expression.cs (Argument::Emit): Use the above field to set the state.
24140
24141         (LocalVariableReference::Emit): Update to honour the flag and emit the
24142         right stuff.
24143
24144         * parameter.cs (Attributes): Set the correct flags for ref parameters.
24145
24146         * expression.cs (Argument::FullDesc): New function to provide a full desc.
24147
24148         * support.cs (ParameterData): Add method ParameterDesc to the interface.
24149
24150         (ReflectionParameters, InternalParameters): Implement the above method.
24151
24152         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
24153         reporting errors.
24154
24155         (Invocation::FullMethodDesc): Ditto. 
24156
24157 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
24158
24159         * cs-parser.jay: Add extra production for the second form of array
24160         creation. 
24161
24162         * expression.cs (ArrayCreation): Update to reflect the above
24163         change. 
24164
24165         * Small changes to prepare for Array initialization.
24166
24167 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
24168
24169         * typemanager.cs (ImplementsInterface): interface might be null;
24170         Deal with this problem;
24171
24172         Also, we do store negative hits on the cache (null values), so use
24173         this instead of calling t.GetInterfaces on the type everytime.
24174
24175 2001-10-28  Ravi Pratap  <ravi@ximian.com>
24176
24177         * typemanager.cs (IsBuiltinType): New method to help determine the same.
24178
24179         * expression.cs (New::DoResolve): Get rid of array creation code and instead
24180         split functionality out into different classes.
24181
24182         (New::FormArrayType): Move into NewBuiltinArray.
24183
24184         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
24185         quite useless.
24186
24187         (NewBuiltinArray): New class to handle creation of built-in arrays.
24188
24189         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
24190         account creation of one-dimensional arrays.
24191
24192         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
24193
24194         (NewUserdefinedArray::DoResolve): Implement.
24195
24196         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
24197
24198         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
24199         we maintain inside the TypeManager. This is necessary to perform lookups on the
24200         module builder.
24201
24202         (LookupType): Update to perform GetType on the module builders too.     
24203
24204         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
24205
24206         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
24207
24208 2001-10-23  Ravi Pratap  <ravi@ximian.com>
24209
24210         * expression.cs (New::DoResolve): Implement guts of array creation.
24211
24212         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
24213
24214 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
24215
24216         * expression.cs: Fix bug I introduced lsat night that broke
24217         Delegates. 
24218
24219         (Expression.Resolve): Report a 246 error (can not resolve name)
24220         if we find a SimpleName in the stream.
24221
24222         (Expression.ResolveLValue): Ditto.
24223
24224         (Expression.ResolveWithSimpleName): This function is a variant of
24225         ResolveName, this one allows SimpleNames to be returned without a
24226         warning.  The only consumer of SimpleNames is MemberAccess
24227
24228 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
24229
24230         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
24231         might arrive here.  I have my doubts that this is correct.
24232
24233         * statement.cs (Lock): Implement lock statement.
24234
24235         * cs-parser.jay: Small fixes to support `lock' and `using'
24236
24237         * cs-tokenizer.cs: Remove extra space
24238
24239         * driver.cs: New flag --checked, allows to turn on integer math
24240         checking. 
24241
24242         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
24243         Threading.Monitor.Exit 
24244
24245 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
24246
24247         * expression.cs (IndexerAccess::DoResolveLValue): Set the
24248         Expression Class to be IndexerAccess.
24249
24250         Notice that Indexer::DoResolve sets the eclass to Value.
24251
24252 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
24253
24254         * class.cs (TypeContainer::Emit): Emit code for indexers.
24255
24256         * assign.cs (IAssignMethod): New interface implemented by Indexers
24257         and Properties for handling assignment.
24258
24259         (Assign::Emit): Simplify and reuse code. 
24260
24261         * expression.cs (IndexerAccess, PropertyExpr): Implement
24262         IAssignMethod, clean up old code. 
24263
24264 2001-10-22  Ravi Pratap  <ravi@ximian.com>
24265
24266         * typemanager.cs (ImplementsInterface): New method to determine if a type
24267         implements a given interface. Provides a nice cache too.
24268
24269         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
24270         method.
24271
24272         (ConvertReferenceExplicit): Ditto.
24273
24274         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
24275         various methods, with correct names etc.
24276
24277         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
24278         Operator.UnaryNegation.
24279
24280         * cs-parser.jay (operator_declarator): Be a little clever in the case where
24281         we have a unary plus or minus operator.
24282
24283         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
24284         UnaryMinus.
24285
24286         * everywhere : update accordingly.
24287
24288         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
24289         respectively.
24290
24291         * class.cs (Method::Define): For the case where we are implementing a method
24292         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
24293         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
24294
24295 2001-10-21  Ravi Pratap  <ravi@ximian.com>
24296
24297         * interface.cs (FindMembers): Implement to work around S.R.E
24298         lameness.
24299
24300         * typemanager.cs (IsInterfaceType): Implement.
24301
24302         (FindMembers): Update to handle interface types too.
24303
24304         * expression.cs (ImplicitReferenceConversion): Re-write bits which
24305         use IsAssignableFrom as that is not correct - it doesn't work.
24306
24307         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
24308         and accordingly override EmitStatement.
24309
24310         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
24311         using the correct logic :-)
24312
24313 2001-10-19  Ravi Pratap  <ravi@ximian.com>
24314
24315         * ../errors/cs-11.cs : Add to demonstrate error -11 
24316
24317 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
24318
24319         * assign.cs (Assign::Resolve): Resolve right hand side first, and
24320         then pass this as a hint to ResolveLValue.
24321
24322         * expression.cs (FieldExpr): Add Location information
24323
24324         (FieldExpr::LValueResolve): Report assignment to readonly
24325         variable. 
24326
24327         (Expression::ExprClassFromMemberInfo): Pass location information.
24328
24329         (Expression::ResolveLValue): Add new method that resolves an
24330         LValue. 
24331
24332         (Expression::DoResolveLValue): Default invocation calls
24333         DoResolve. 
24334
24335         (Indexers): New class used to keep track of indexers in a given
24336         Type. 
24337
24338         (IStackStore): Renamed from LValue, as it did not really describe
24339         what this did.  Also ResolveLValue is gone from this interface and
24340         now is part of Expression.
24341
24342         (ElementAccess): Depending on the element access type
24343
24344         * typemanager.cs: Add `indexer_name_type' as a Core type
24345         (System.Runtime.CompilerServices.IndexerNameAttribute)
24346
24347         * statement.cs (Goto): Take a location.
24348
24349 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24350
24351         * delegate.cs (Delegate::VerifyDelegate): New method to verify
24352         if two delegates are compatible.
24353
24354         (NewDelegate::DoResolve): Update to take care of the case when
24355         we instantiate a delegate from another delegate.
24356
24357         * typemanager.cs (FindMembers): Don't even try to look up members
24358         of Delegate types for now.
24359
24360 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24361
24362         * delegate.cs (NewDelegate): New class to take care of delegate
24363         instantiation.
24364
24365         * expression.cs (New): Split the delegate related code out into 
24366         the NewDelegate class.
24367
24368         * delegate.cs (DelegateInvocation): New class to handle delegate 
24369         invocation.
24370
24371         * expression.cs (Invocation): Split out delegate related code into
24372         the DelegateInvocation class.
24373
24374 2001-10-17  Ravi Pratap  <ravi@ximian.com>
24375
24376         * expression.cs (New::DoResolve): Implement delegate creation fully
24377         and according to the spec.
24378
24379         (New::DoEmit): Update to handle delegates differently.
24380
24381         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
24382         because of which we were printing out arguments in reverse order !
24383
24384         * delegate.cs (VerifyMethod): Implement to check if the given method
24385         matches the delegate.
24386
24387         (FullDelegateDesc): Implement.
24388
24389         (VerifyApplicability): Implement.
24390
24391         * expression.cs (Invocation::DoResolve): Update to accordingly handle
24392         delegate invocations too.
24393
24394         (Invocation::Emit): Ditto.
24395
24396         * ../errors/cs1593.cs : Added.
24397
24398         * ../errors/cs1594.cs : Added.
24399
24400         * delegate.cs (InstanceExpression, TargetMethod): New properties.
24401
24402 2001-10-16  Ravi Pratap  <ravi@ximian.com>
24403
24404         * typemanager.cs (intptr_type): Core type for System.IntPtr
24405
24406         (InitCoreTypes): Update for the same.
24407
24408         (iasyncresult_type, asynccallback_type): Ditto.
24409
24410         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
24411         correct.
24412
24413         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
24414         too.
24415
24416         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
24417         the builders for the 4 members of a delegate type :-)
24418
24419         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
24420         type.
24421
24422         * expression.cs (New::DoResolve): Implement guts for delegate creation.
24423
24424         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
24425
24426 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
24427
24428         * statement.cs (Break::Emit): Implement.   
24429         (Continue::Emit): Implement.
24430
24431         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24432         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24433         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24434         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
24435         end loop
24436
24437         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
24438         properties that track the label for the current loop (begin of the
24439         loop and end of the loop).
24440
24441 2001-10-15  Ravi Pratap  <ravi@ximian.com>
24442
24443         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
24444         use of emitting anything at all.
24445
24446         * class.cs, rootcontext.cs : Get rid of calls to the same.
24447
24448         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
24449
24450         (Populate): Define the constructor correctly and set the implementation
24451         attributes.
24452
24453         * typemanager.cs (delegate_types): New hashtable to hold delegates that
24454         have been defined.
24455
24456         (AddDelegateType): Implement.
24457
24458         (IsDelegateType): Implement helper method.
24459
24460         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
24461
24462         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
24463         and accordingly handle it.
24464
24465         * delegate.cs (Populate): Take TypeContainer argument.
24466         Implement bits to define the Invoke method. However, I still haven't figured out
24467         how to take care of the native int bit :-(
24468
24469         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
24470         Qualify the name of the delegate, not its return type !
24471
24472         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
24473         conversion.
24474
24475         (StandardConversionExists): Checking for array types turns out to be recursive.
24476
24477         (ConvertReferenceExplicit): Implement array conversion.
24478
24479         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
24480
24481 2001-10-12  Ravi Pratap  <ravi@ximian.com>
24482
24483         * cs-parser.jay (delegate_declaration): Store the fully qualified
24484         name as it is a type declaration.
24485
24486         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24487         readonly.
24488
24489         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24490         as TypeContainer::DefineType.
24491
24492         (Populate): Method in which all the definition of the various methods (Invoke)
24493         etc is done.
24494
24495         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24496         see.
24497
24498         (CloseDelegate): Finally creates the delegate.
24499
24500         * class.cs (TypeContainer::DefineType): Update to define delegates.
24501         (Populate, Emit and CloseType): Do the same thing here too.
24502
24503         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24504         delegates in all these operations.
24505
24506 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24507
24508         * expression.cs: LocalTemporary: a new expression used to
24509         reference a temporary that has been created.
24510
24511         * assign.cs: Handle PropertyAccess back here, so that we can
24512         provide the proper semantic access to properties.
24513
24514         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24515         a few more explicit conversions. 
24516
24517         * modifiers.cs: `NEW' modifier maps to HideBySig.
24518
24519         * expression.cs (PropertyExpr): Make this into an
24520         ExpressionStatement, and support the EmitStatement code path. 
24521
24522         Perform get/set error checking, clean up the interface.
24523
24524         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24525         them into toplevel access objects.
24526
24527 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24528
24529         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24530         SRE.
24531
24532         * typemanager.cs: Keep track here of our PropertyBuilders again to
24533         work around lameness in SRE.
24534
24535 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24536
24537         * expression.cs (LValue::LValueResolve): New method in the
24538         interface, used to perform a second resolution pass for LValues. 
24539
24540         (This::DoResolve): Catch the use of this in static methods.
24541
24542         (This::LValueResolve): Implement.
24543
24544         (This::Store): Remove warning, assigning to `this' in structures
24545         is 
24546
24547         (Invocation::Emit): Deal with invocation of
24548         methods on value types.  We need to pass the address to structure
24549         methods rather than the object itself.  (The equivalent code to
24550         emit "this" for structures leaves the entire structure on the
24551         stack instead of a pointer to it). 
24552
24553         (ParameterReference::DoResolve): Compute the real index for the
24554         argument based on whether the method takes or not a `this' pointer
24555         (ie, the method is static).
24556
24557         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24558         value types returned from functions when we need to invoke a
24559         method on the sturcture.
24560
24561
24562 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24563
24564         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24565         defining the type in the Modulebuilder or Typebuilder. This is to take
24566         care of nested types which need to be defined on the TypeBuilder using
24567         DefineNestedMethod.
24568
24569         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24570         methods in RootContext, only ported to be part of TypeContainer.
24571
24572         (TypeContainer::GetInterfaceOrClass): Ditto.
24573
24574         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24575
24576         * interface.cs (Interface::DefineInterface): New method. Does exactly
24577         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24578         too.
24579
24580         (Interface::GetInterfaces): Move from RootContext here and port.
24581
24582         (Interface::GetInterfaceByName): Same here.
24583
24584         * rootcontext.cs (ResolveTree): Re-write.
24585
24586         (PopulateTypes): Re-write.
24587
24588         * class.cs (TypeContainer::Populate): Populate nested types too.
24589         (TypeContainer::Emit): Emit nested members too.
24590
24591         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24592         instead just use the name argument passed in as it is already fully
24593         qualified.
24594
24595         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24596         to TypeContainer mapping to see if a type is user-defined.
24597
24598         * class.cs (TypeContainer::CloseType): Implement. 
24599
24600         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24601         the default constructor.
24602
24603         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24604         twice.
24605
24606         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24607
24608         * interface.cs (CloseType): Create the type here.
24609
24610         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24611         the hierarchy.
24612
24613         Remove all the methods which are now in TypeContainer.
24614
24615 2001-10-10  Ravi Pratap  <ravi@ximian.com>
24616
24617         * delegate.cs (Define): Re-write bits to define the delegate
24618         correctly.
24619
24620 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
24621
24622         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
24623
24624         * expression.cs (ImplicitReferenceConversion): handle null as well
24625         as a source to convert to any reference type.
24626
24627         * statement.cs (Return): Perform any implicit conversions to
24628         expected return type.  
24629
24630         Validate use of return statement.  
24631
24632         * codegen.cs (EmitContext): Pass the expected return type here.
24633
24634         * class.cs (Method, Constructor, Property): Pass expected return
24635         type to EmitContext.
24636
24637 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
24638
24639         * expression.cs: Make DoResolve take an EmitContext instead of a
24640         TypeContainer.
24641
24642         Replaced `l' and `location' for `loc', for consistency.
24643
24644         (Error, Warning): Remove unneeded Tc argument.
24645
24646         * assign.cs, literal.cs, constant.cs: Update to new calling
24647         convention. 
24648
24649         * codegen.cs: EmitContext now contains a flag indicating whether
24650         code is being generated in a static method or not.
24651
24652         * cs-parser.jay: DecomposeQI, new function that replaces the old
24653         QualifiedIdentifier.  Now we always decompose the assembled
24654         strings from qualified_identifier productions into a group of
24655         memberaccesses.
24656
24657 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
24658
24659         * rootcontext.cs: Deal with field-less struct types correctly now
24660         by passing the size option to Define Type.
24661
24662         * class.cs: Removed hack that created one static field. 
24663
24664 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24665
24666         * statement.cs: Moved most of the code generation here. 
24667
24668 2001-10-09  Ravi Pratap  <ravi@ximian.com>
24669
24670         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
24671         seem very right.
24672
24673         (ElementAccess): Remove useless bits for now - keep checks as the spec
24674         says.
24675
24676 2001-10-08  Ravi Pratap  <ravi@ximian.com>
24677
24678         * expression.cs (ElementAccess::DoResolve): Remove my crap code
24679         and start performing checks according to the spec.
24680
24681 2001-10-07  Ravi Pratap  <ravi@ximian.com>
24682
24683         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
24684         rank_specifiers instead.
24685
24686         (rank_specifiers): Change the order in which the rank specifiers are stored
24687
24688         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
24689
24690         * expression.cs (ElementAccess): Implement the LValue interface too.
24691
24692 2001-10-06  Ravi Pratap  <ravi@ximian.com>
24693
24694         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
24695         except that user defined conversions are not included.
24696
24697         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
24698         perform the conversion of the return type, if necessary.
24699
24700         (New::DoResolve): Check whether we are creating an array or an object
24701         and accordingly do the needful.
24702
24703         (New::Emit): Same here.
24704
24705         (New::DoResolve): Implement guts of array creation.
24706
24707         (New::FormLookupType): Helper function.
24708
24709 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24710
24711         * codegen.cs: Removed most of the code generation here, and move the
24712         corresponding code generation bits to the statement classes. 
24713
24714         Added support for try/catch/finalize and throw.
24715
24716         * cs-parser.jay: Added support for try/catch/finalize.
24717
24718         * class.cs: Catch static methods having the flags override,
24719         virtual or abstract.
24720
24721         * expression.cs (UserCast): This user cast was not really doing
24722         what it was supposed to do.  Which is to be born in fully resolved
24723         state.  Parts of the resolution were being performed at Emit time! 
24724
24725         Fixed this code.
24726
24727 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24728
24729         * expression.cs: Implicity convert the result from UserCast.
24730
24731 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24732
24733         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
24734         prevented it from working correctly. 
24735
24736         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
24737         merely ConvertImplicit.
24738
24739 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24740
24741         * typemanager.cs: Make the LookupTypeContainer function static,
24742         and not per-instance.  
24743
24744         * class.cs: Make static FindMembers (the one that takes a Type
24745         argument). 
24746
24747         * codegen.cs: Add EmitForeach here.
24748
24749         * cs-parser.jay: Make foreach a toplevel object instead of the
24750         inline expansion, as we need to perform semantic analysis on it. 
24751
24752 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24753
24754         * expression.cs (Expression::ImplicitUserConversion): Rename to
24755         UserDefinedConversion.
24756
24757         (Expression::UserDefinedConversion): Take an extra argument specifying 
24758         whether we look for explicit user conversions too.
24759
24760         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
24761
24762         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
24763
24764         (ExplicitUserConversion): Make it a call to UserDefinedConversion
24765         with the appropriate arguments.
24766
24767         * cs-parser.jay (cast_expression): Record location too.
24768
24769         * expression.cs (Cast): Record location info.
24770
24771         (Expression::ConvertExplicit): Take location argument.
24772
24773         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
24774         to determine if we are doing explicit conversions.
24775
24776         (UserCast::Emit): Update accordingly.
24777
24778         (Expression::ConvertExplicit): Report an error if everything fails.
24779
24780         * ../errors/cs0030.cs : Add.
24781
24782 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
24783
24784         * modifiers.cs: If the ABSTRACT keyword is present, also set the
24785         virtual and newslot bits. 
24786
24787         * class.cs (TypeContainer::RegisterRequiredImplementations):
24788         Record methods we need.
24789
24790         (TypeContainer::MakeKey): Helper function to make keys for
24791         MethodBases, since the Methodbase key is useless.
24792
24793         (TypeContainer::Populate): Call RegisterRequiredImplementations
24794         before defining the methods.   
24795
24796         Create a mapping for method_builders_to_methods ahead of time
24797         instead of inside a tight loop.
24798
24799         (::RequireMethods):  Accept an object as the data to set into the
24800         hashtable so we can report interface vs abstract method mismatch.
24801
24802 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24803
24804         * report.cs: Make all of it static.
24805
24806         * rootcontext.cs: Drop object_type and value_type computations, as
24807         we have those in the TypeManager anyways.
24808
24809         Drop report instance variable too, now it is a global.
24810
24811         * driver.cs: Use try/catch on command line handling.
24812
24813         Add --probe option to debug the error reporting system with a test
24814         suite. 
24815
24816         * report.cs: Add support for exiting program when a probe
24817         condition is reached.
24818
24819 2001-10-03  Ravi Pratap  <ravi@ximian.com>
24820
24821         * expression.cs (Binary::DoNumericPromotions): Fix the case when
24822         we do a forcible conversion regardless of type, to check if 
24823         ForceConversion returns a null.
24824
24825         (Binary::error19): Use location to report error.
24826
24827         (Unary::error23): Use location here too.
24828
24829         * ../errors/cs0019.cs : Check in.
24830
24831         * ../errors/cs0023.cs : Check in.
24832
24833         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
24834         case of a non-null MethodInfo object with a length of 0 !
24835
24836         (Binary::ResolveOperator): Flag error if overload resolution fails to find
24837         an applicable member - according to the spec :-)
24838         Also fix logic to find members in base types.
24839
24840         (Unary::ResolveOperator): Same here.
24841
24842         (Unary::report23): Change name to error23 and make first argument a TypeContainer
24843         as I was getting thoroughly confused between this and error19 :-)
24844
24845         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
24846         (::FindMostEncompassedType): Implement.
24847         (::FindMostEncompassingType): Implement.
24848         (::StandardConversionExists): Implement.
24849
24850         (UserImplicitCast): Re-vamp. We now need info about most specific
24851         source and target types so that we can do the necessary conversions.
24852
24853         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
24854         mathematical union with no duplicates.
24855
24856 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24857
24858         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
24859         in order from base classes to child classes, so that we can in
24860         child classes look up in our parent for method names and
24861         attributes (required for handling abstract, virtual, new, override
24862         constructs: we need to instrospect our base class, and if we dont
24863         populate the classes in order, the introspection might be
24864         incorrect.  For example, a method could query its parent before
24865         the parent has any methods and would determine that the parent has
24866         no abstract methods (while it could have had them)).
24867
24868         (RootContext::CreateType): Record the order in which we define the
24869         classes.
24870
24871 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
24872
24873         * class.cs (TypeContainer::Populate): Also method definitions can
24874         fail now, keep track of this.
24875
24876         (TypeContainer::FindMembers): Implement support for
24877         DeclaredOnly/noDeclaredOnly flag.
24878
24879         (Constructor::Emit) Return the ConstructorBuilder.
24880
24881         (Method::Emit) Return the MethodBuilder. 
24882         Check for abstract or virtual methods to be public.
24883
24884         * rootcontext.cs (RootContext::CreateType): Register all the
24885         abstract methods required for the class to be complete and the
24886         interface methods that must be implemented. 
24887
24888         * cs-parser.jay: Report error 501 (method requires body if it is
24889         not marked abstract or extern).
24890
24891         * expression.cs (TypeOf::Emit): Implement.
24892
24893         * typemanager.cs: runtime_handle_type, new global type.
24894
24895         * class.cs (Property::Emit): Generate code for properties.
24896
24897 2001-10-02  Ravi Pratap  <ravi@ximian.com>
24898
24899         * expression.cs (Unary::ResolveOperator): Find operators on base type
24900         too - we now conform exactly to the spec.
24901
24902         (Binary::ResolveOperator): Same here.
24903
24904         * class.cs (Operator::Define): Fix minor quirk in the tests.
24905
24906         * ../errors/cs0215.cs : Added.
24907
24908         * ../errors/cs0556.cs : Added.
24909
24910         * ../errors/cs0555.cs : Added.
24911
24912 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24913
24914         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
24915         single integer which is really efficient
24916
24917 2001-10-01  Ravi Pratap  <ravi@ximian.com>
24918
24919         *  expression.cs (Expression::ImplicitUserConversion): Use location
24920         even in the case when we are examining True operators.
24921  
24922         * class.cs (Operator::Define): Perform extensive checks to conform
24923         with the rules for operator overloading in the spec.
24924
24925         * expression.cs (Expression::ImplicitReferenceConversion): Implement
24926         some of the other conversions mentioned in the spec.
24927
24928         * typemanager.cs (array_type): New static member for the System.Array built-in
24929         type.
24930
24931         (cloneable_interface): For System.ICloneable interface.
24932
24933         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
24934         we start resolving the tree and populating types.
24935
24936         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
24937  
24938 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24939
24940         * expression.cs (Expression::ExprClassFromMemberInfo,
24941         Expression::Literalize): Create literal expressions from
24942         FieldInfos which are literals.
24943
24944         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
24945         type casts, because they were wrong.  The test suite in tests
24946         caught these ones.
24947
24948         (ImplicitNumericConversion): ushort to ulong requires a widening
24949         cast. 
24950
24951         Int32 constant to long requires widening cast as well.
24952
24953         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
24954         for integers because the type on the stack is not i4.
24955
24956 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
24957
24958         * expression.cs (report118): require location argument. 
24959
24960         * parameter.cs: Do not dereference potential null value.
24961
24962         * class.cs: Catch methods that lack the `new' keyword when
24963         overriding a name.  Report warnings when `new' is used without
24964         anything being there to override.
24965
24966         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
24967
24968         * class.cs: Only add constructor to hashtable if it is non-null
24969         (as now constructors can fail on define).
24970
24971         (TypeManager, Class, Struct): Take location arguments.
24972
24973         Catch field instance initialization in structs as errors.
24974
24975         accepting_filter: a new filter for FindMembers that is static so
24976         that we dont create an instance per invocation.
24977
24978         (Constructor::Define): Catch errors where a struct constructor is
24979         parameterless 
24980
24981         * cs-parser.jay: Pass location information for various new
24982         constructs. 
24983
24984         * delegate.cs (Delegate): take a location argument.
24985
24986         * driver.cs: Do not call EmitCode if there were problesm in the
24987         Definition of the types, as many Builders wont be there. 
24988
24989         * decl.cs (Decl::Decl): Require a location argument.
24990
24991         * cs-tokenizer.cs: Handle properly hex constants that can not fit
24992         into integers, and find the most appropiate integer for it.
24993
24994         * literal.cs: Implement ULongLiteral.
24995
24996         * rootcontext.cs: Provide better information about the location of
24997         failure when CreateType fails.
24998
24999 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
25000
25001         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
25002         as well.
25003
25004         * expression.cs (Binary::CheckShiftArguments): Add missing type
25005         computation.
25006         (Binary::ResolveOperator): Add type to the logical and and logical
25007         or, Bitwise And/Or and Exclusive Or code paths, it was missing
25008         before.
25009
25010         (Binary::DoNumericPromotions): In the case where either argument
25011         is ulong (and most signed types combined with ulong cause an
25012         error) perform implicit integer constant conversions as well.
25013
25014 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25015
25016         * expression.cs (UserImplicitCast): Method should always be
25017         non-null. 
25018         (Invocation::BetterConversion): Simplified test for IntLiteral.
25019
25020         (Expression::ImplicitNumericConversion): Split this routine out.
25021         Put the code that performs implicit constant integer conversions
25022         here. 
25023
25024         (Expression::Resolve): Become a wrapper around DoResolve so we can
25025         check eclass and type being set after resolve.
25026
25027         (Invocation::Badness): Remove this dead function
25028
25029         (Binary::ResolveOperator): Do not compute the expensive argumnets
25030         unless we have a union for it.
25031
25032         (Probe::Emit): Is needs to do an isinst and then
25033         compare against null.
25034
25035         (::CanConvert): Added Location argument.  If the Location argument
25036         is null (Location.Null), then we do not report errors.  This is
25037         used by the `probe' mechanism of the Explicit conversion.  We do
25038         not want to generate an error for something that the user
25039         explicitly requested to be casted.  But the pipeline for an
25040         explicit cast first tests for potential implicit casts.
25041
25042         So for now, if the Location is null, it means `Probe only' to
25043         avoid adding another argument.   Might have to revise this
25044         strategy later.
25045
25046         (ClassCast): New class used to type cast objects into arbitrary
25047         classes (used in Explicit Reference Conversions).
25048
25049         Implement `as' as well.
25050
25051         Reverted all the patches from Ravi below: they were broken:
25052
25053                 * The use of `level' as a mechanism to stop recursive
25054                   invocations is wrong.  That was there just to catch the
25055                   bug with a strack trace but not as a way of addressing
25056                   the problem.
25057
25058                   To fix the problem we have to *understand* what is going
25059                   on and the interactions and come up with a plan, not
25060                   just get things going.
25061
25062                 * The use of the type conversion cache that I proposed
25063                   last night had an open topic: How does this work across
25064                   protection domains.  A user defined conversion might not
25065                   be public in the location where we are applying the
25066                   conversion, a different conversion might be selected
25067                   (ie, private A->B (better) but public B->A (worse),
25068                   inside A, A->B applies, but outside it, B->A will
25069                   apply).
25070
25071                 * On top of that (ie, even if the above is solved),
25072                   conversions in a cache need to be abstract.  Ie, `To
25073                   convert from an Int to a Short use an OpcodeCast', not
25074                   `To convert from an Int to a Short use the OpcodeCast on
25075                   the variable 5' (which is what this patch was doing).
25076
25077 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25078
25079         * expression.cs (Invocation::ConversionExists): Re-write to use
25080         the conversion cache
25081
25082         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
25083         cache all conversions done, not just user-defined ones.
25084
25085         (Invocation::BetterConversion): The real culprit. Use ConversionExists
25086         to determine if a conversion exists instead of acutually trying to 
25087         perform the conversion. It's faster too.
25088
25089         (Expression::ConvertExplicit): Modify to use ConversionExists to check
25090         and only then attempt the implicit conversion.
25091
25092 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25093
25094         * expression.cs (ConvertImplicit): Use a cache for conversions
25095         already found. Check level of recursion and bail out if necessary.
25096
25097 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25098
25099         * typemanager.cs (string_concat_string_string, string_concat_object_object):
25100         Export standard methods that we expect for string operations.
25101
25102         * statement.cs (Block::UsageWarning): Track usage of variables and
25103         report the errors for not used variables.
25104
25105         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
25106         operator. 
25107
25108 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25109
25110         * codegen.cs: remove unnneded code 
25111
25112         * expression.cs: Removed BuiltinTypeAccess class
25113
25114         Fix the order in which implicit conversions are
25115         done.  
25116
25117         The previous fixed dropped support for boxed conversions (adding a
25118         test to the test suite now)
25119
25120         (UserImplicitCast::CanConvert): Remove test for source being null,
25121         that code is broken.  We should not feed a null to begin with, if
25122         we do, then we should track the bug where the problem originates
25123         and not try to cover it up here.
25124
25125         Return a resolved expression of type UserImplicitCast on success
25126         rather than true/false.  Ravi: this is what I was talking about,
25127         the pattern is to use a static method as a "constructor" for
25128         objects. 
25129
25130         Also, do not create arguments until the very last minute,
25131         otherwise we always create the arguments even for lookups that
25132         will never be performed. 
25133
25134         (UserImplicitCast::Resolve): Eliminate, objects of type
25135         UserImplicitCast are born in a fully resolved state. 
25136
25137         * typemanager.cs (InitCoreTypes): Init also value_type
25138         (System.ValueType). 
25139
25140         * expression.cs (Cast::Resolve): First resolve the child expression.
25141
25142         (LValue): Add new method AddressOf to be used by
25143         the `&' operator.  
25144
25145         Change the argument of Store to take an EmitContext instead of an
25146         ILGenerator, because things like FieldExpr need to be able to call
25147         their children expression to generate the instance code. 
25148
25149         (Expression::Error, Expression::Warning): Sugar functions for
25150         reporting errors.
25151
25152         (Expression::MemberLookup): Accept a TypeContainer instead of a
25153         Report as the first argument.
25154
25155         (Expression::ResolvePrimary): Killed.  I still want to improve
25156         this as currently the code is just not right.
25157
25158         (Expression::ResolveMemberAccess): Simplify, but it is still
25159         wrong. 
25160
25161         (Unary::Resolve): Catch errors in AddressOf operators.
25162
25163         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
25164         index to a byte for the short-version, or the compiler will choose
25165         the wrong Emit call, which generates the wrong data.
25166
25167         (ParameterReference::Emit, ::Store): same.
25168
25169         (FieldExpr::AddressOf): Implement.
25170
25171         * typemanager.cs: TypeManager: made public variable instead of
25172         property.
25173
25174         * driver.cs: document --fatal.
25175
25176         * report.cs (ErrorMessage, WarningMessage): new names for the old
25177         Error and Warning classes.
25178
25179         * cs-parser.jay (member_access): Turn built-in access to types
25180         into a normal simplename
25181
25182 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25183
25184         * expression.cs (Invocation::BetterConversion): Fix to cope
25185         with q being null, since this was introducing a bug.
25186
25187         * expression.cs (ConvertImplicit): Do built-in conversions first.
25188
25189 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25190
25191         * expression.cs (UserImplicitCast::Resolve): Fix bug.
25192
25193 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25194
25195         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
25196         I had introduced long ago (what's new ?).
25197
25198         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
25199         the work of all the checking. 
25200         (ConvertImplicit): Call CanConvert and only then create object if necessary.
25201         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
25202
25203         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
25204         that is the right way. 
25205
25206         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
25207         overloading resolution. Use everywhere instead of cutting and pasting code.
25208
25209         (Binary::ResolveOperator): Use MakeUnionSet.
25210
25211         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
25212         we have to convert to bool types. Not complete yet.
25213
25214 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25215
25216         * typemanager.cs (TypeManager::CSharpName): support ushort.
25217
25218         * expression.cs (Expression::TryImplicitIntConversion): Attempts
25219         to provide an expression that performsn an implicit constant int
25220         conversion (section 6.1.6).
25221         (Expression::ConvertImplicitRequired): Reworked to include
25222         implicit constant expression conversions.
25223
25224         (Expression::ConvertNumericExplicit): Finished.
25225
25226         (Invocation::Emit): If InstanceExpression is null, then it means
25227         that we perform a call on this.
25228
25229 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25230
25231         * expression.cs (Unary::Emit): Remove some dead code.
25232         (Probe): Implement Resolve and Emit for `is'.
25233         (Expression::ConvertImplicitRequired): Attempt to do constant
25234         expression conversions here.  Maybe should be moved to
25235         ConvertImplicit, but I am not sure.
25236         (Expression::ImplicitLongConstantConversionPossible,
25237         Expression::ImplicitIntConstantConversionPossible): New functions
25238         that tell whether is it possible to apply an implicit constant
25239         expression conversion.
25240
25241         (ConvertNumericExplicit): Started work on explicit numeric
25242         conversions.
25243
25244         * cs-parser.jay: Update operator constants.
25245
25246         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
25247         (Parameters::GetSignature): Hook up VerifyArgs here.
25248         (Parameters::VerifyArgs): Verifies that no two arguments have the
25249         same name. 
25250
25251         * class.cs (Operator): Update the operator names to reflect the
25252         ones that the spec expects (as we are just stringizing the
25253         operator names).
25254
25255         * expression.cs (Unary::ResolveOperator): Fix bug: Use
25256         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
25257         previous usage did only work for our methods.
25258         (Expression::ConvertImplicit): Handle decimal implicit numeric
25259         conversions as well.
25260         (Expression::InternalTypeConstructor): Used to invoke constructors
25261         on internal types for default promotions.
25262
25263         (Unary::Emit): Implement special handling for the pre/post
25264         increment/decrement for overloaded operators, as they need to have
25265         the same semantics as the other operators.
25266
25267         (Binary::ResolveOperator): ditto.
25268         (Invocation::ConversionExists): ditto.
25269         (UserImplicitCast::Resolve): ditto.
25270
25271 2001-09-26  Ravi Pratap  <ravi@ximian.com>
25272
25273         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
25274         operator, return after emitting body. Regression tests pass again !
25275
25276         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
25277         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
25278         (Invocation::OverloadResolve): Ditto.
25279         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
25280
25281         * everywhere : update calls to the above methods accordingly.
25282
25283 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25284
25285         * assign.cs (Assign): Make it inherit from ExpressionStatement.
25286
25287         * expression.cs (ExpressionStatement): New base class used for
25288         expressions that can appear in statements, so that we can provide
25289         an alternate path to generate expression that do not leave a value
25290         on the stack.
25291
25292         (Expression::Emit, and all the derivatives): We no longer return
25293         whether a value is left on the stack or not.  Every expression
25294         after being emitted leaves a single value on the stack.
25295
25296         * codegen.cs (EmitContext::EmitStatementExpression): Use the
25297         facilties of ExpressionStatement if possible.
25298
25299         * cs-parser.jay: Update statement_expression.
25300
25301 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
25302
25303         * driver.cs: Change the wording of message
25304
25305 2001-09-25  Ravi Pratap  <ravi@ximian.com>
25306
25307         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
25308         the type of the expression to the return type of the method if
25309         we have an overloaded operator match ! The regression tests pass again !
25310         (Unary::ResolveOperator): Ditto.
25311
25312         * expression.cs (Invocation::ConversionExists): Correct the member lookup
25313         to find "op_Implicit", not "implicit" ;-)
25314         (UserImplicitCast): New class to take care of user-defined implicit conversions.
25315         (ConvertImplicit, ForceConversion): Take TypeContainer argument
25316
25317         * everywhere : Correct calls to the above accordingly.
25318
25319         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
25320         (ConvertImplicit): Do user-defined conversion if it exists.
25321
25322 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
25323
25324         * assign.cs: track location.
25325         (Resolve): Use implicit conversions on assignment.
25326
25327         * literal.cs: Oops.  Not good, Emit of short access values should
25328         pass (Bytes) or the wrong argument will be selected.
25329
25330         * expression.cs (Unary::Emit): Emit code for -expr.
25331
25332         (Unary::ResolveOperator): Handle `Substract' for non-constants
25333         (substract from zero from the non-constants).
25334         Deal with Doubles as well. 
25335
25336         (Expression::ConvertImplicitRequired): New routine that reports an
25337         error if no implicit conversion exists. 
25338
25339         (Invocation::OverloadResolve): Store the converted implicit
25340         expressions if we make them
25341
25342 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25343
25344         * class.cs (ConstructorInitializer): Take a Location argument.
25345         (ConstructorBaseInitializer): Same here.
25346         (ConstructorThisInitializer): Same here.
25347
25348         * cs-parser.jay : Update all calls accordingly.
25349
25350         * expression.cs (Unary, Binary, New): Take location argument.
25351         Update accordingly everywhere.
25352
25353         * cs-parser.jay : Update all calls to the above to take a location
25354         argument.
25355
25356         * class.cs : Ditto.
25357
25358 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25359
25360         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
25361         (Invocation::BetterConversion): Same here
25362         (Invocation::ConversionExists): Ditto.
25363
25364         (Invocation::ConversionExists): Implement.
25365
25366 2001-09-22  Ravi Pratap  <ravi@ximian.com>
25367
25368         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
25369         Also take an additional TypeContainer argument.
25370
25371         * All over : Pass in TypeContainer as argument to OverloadResolve.
25372
25373         * typemanager.cs (CSharpName): Update to check for the string type and return
25374         that too.
25375
25376         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
25377         a given method.
25378
25379 2001-09-21  Ravi Pratap  <ravi@ximian.com>
25380
25381         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
25382         (Invocation::BetterFunction): Implement.
25383         (Invocation::BetterConversion): Implement.
25384         (Invocation::ConversionExists): Skeleton, no implementation yet.
25385
25386         Okay, things work fine !
25387
25388 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
25389
25390         * typemanager.cs: declare and load enum_type, delegate_type and
25391         void_type. 
25392
25393         * expression.cs (Expression::Emit): Now emit returns a value that
25394         tells whether a value is left on the stack or not.  This strategy
25395         might be reveted tomorrow with a mechanism that would address
25396         multiple assignments.
25397         (Expression::report118): Utility routine to report mismatches on
25398         the ExprClass.
25399
25400         (Unary::Report23): Report impossible type/operator combination
25401         utility function.
25402
25403         (Unary::IsIncrementableNumber): Whether the type can be
25404         incremented or decremented with add.
25405         (Unary::ResolveOperator): Also allow enumerations to be bitwise
25406         complemented. 
25407         (Unary::ResolveOperator): Implement ++, !, ~,
25408
25409         (Invocation::Emit): Deal with new Emit convetion.
25410
25411         * All Expression derivatives: Updated their Emit method to return
25412         whether they leave values on the stack or not.
25413
25414         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
25415         stack for expressions that are statements. 
25416
25417 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25418
25419         * expression.cs (LValue): New interface.  Must be implemented by
25420         LValue objects.
25421         (LocalVariableReference, ParameterReference, FieldExpr): Implement
25422         LValue interface.
25423
25424         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
25425         interface for generating code, simplifies the code.
25426
25427 2001-09-20  Ravi Pratap  <ravi@ximian.com>
25428
25429         * expression.cs (everywhere): Comment out return statements in ::Resolve
25430         methods to avoid the warnings.
25431
25432 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25433
25434         * driver.cs (parse): Report error 2001 if we can not open the
25435         source file.
25436
25437         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
25438         not resolve it.
25439
25440         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
25441         object. 
25442
25443         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
25444         otherwise nested blocks end up with the same index.
25445
25446         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
25447
25448         * expression.cs:  Instead of having FIXMEs in the Resolve
25449         functions, throw exceptions so it is obvious that we are facing a
25450         bug. 
25451
25452         * cs-parser.jay (invocation_expression): Pass Location information.
25453
25454         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
25455         Use a basename for those routines because .NET does not like paths
25456         on them. 
25457
25458         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
25459         already defined.
25460
25461 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
25462
25463         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
25464         are loading the correct data types (throws an exception if not).
25465         (TypeManager::InitCoreTypes): Use CoreLookupType
25466
25467         * expression.cs (Unary::ResolveOperator): return the child
25468         expression for expressions which are just +expr.
25469         (Unary::ResolveOperator): Return negative literals for -LITERAL
25470         expressions (otherwise they are Unary {Literal}).
25471         (Invocation::Badness): Take into account `Implicit constant
25472         expression conversions'.
25473
25474         * literal.cs (LongLiteral): Implement long literal class.
25475         (IntLiteral): export the `Value' of the intliteral. 
25476
25477 2001-09-19  Ravi Pratap  <ravi@ximian.com>
25478
25479         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
25480
25481         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
25482         instead of 'Operator'
25483
25484         * expression.cs (Binary::ResolveOperator): Update accordingly.
25485         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
25486         and 'Minus'
25487
25488         * cs-parser.jay (unary_expression): Update to use the new names.
25489
25490         * gen-treedump.cs (GetUnary): Same here.
25491
25492         * expression.cs (Unary::Resolve): Implement.
25493         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25494         operators are found instead of making noise ;-)
25495         (Unary::ResolveOperator): New method to do precisely the same thing which
25496         Binary::ResolveOperator does for Binary expressions.
25497         (Unary.method, .Arguments): Add.
25498         (Unary::OperName): Implement.   
25499         (Unary::ForceConversion): Copy and Paste !
25500
25501         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25502         a unary operator.
25503
25504         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25505         for the inbuilt operators. Only overloading works for now ;-)
25506
25507 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25508
25509         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25510         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25511
25512         * expression.cs (This::Emit): Implement. 
25513         (This::Resolve): Implement.
25514         (TypeOf:Resolve): Implement.
25515         (Expression::ResolveSimpleName): Add an implicit this to instance
25516         field references. 
25517         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25518         Bind instance variable to Field expressions.
25519         (FieldExpr::Instance): New field used to track the expression that
25520         represents the object instance.
25521         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25522         binding 
25523         (FieldExpr::Emit): Implement.
25524
25525         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25526         the last instruction contains a return opcode to avoid generating
25527         the last `ret' instruction (this generates correct code, and it is
25528         nice to pass the peverify output).
25529
25530         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25531         initializer for static and instance variables.
25532         (Constructor::Emit): Allow initializer to be null in the case of
25533         static constructors.  Only emit initializer for instance
25534         constructors. 
25535
25536         (TypeContainer::FindMembers): Return a null array if there are no
25537         matches.
25538
25539         Also fix the code for the MemberTypes.Method branch, as it was not
25540         scanning that for operators (or tried to access null variables before).
25541
25542         * assign.cs (Assign::Emit): Handle instance and static fields. 
25543
25544         * TODO: Updated.
25545
25546         * driver.cs: Stop compilation if there are parse errors.
25547
25548         * cs-parser.jay (constructor_declaration): Provide default base
25549         initializer for non-static constructors.
25550         (constructor_declarator): Do not provide a default base
25551         initializers if none was specified.
25552         Catch the fact that constructors should not have parameters.
25553
25554         * class.cs: Do not emit parent class initializers for static
25555         constructors, that should be flagged as an error.
25556
25557 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25558
25559         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25560         Move back code into TypeContainer::Populate.
25561
25562 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25563
25564         * class.cs (TypeContainer::AddConstructor): Fix the check to
25565         compare against Name, not Basename. 
25566         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25567
25568         * cs-parser.jay : Update accordingly.
25569
25570         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25571         for methods, don't forget to look into the operators too.
25572         (RegisterMethodBuilder): Helper method to take care of this for
25573         methods, constructors and operators.
25574         (Operator::Define): Completely revamp.
25575         (Operator.OperatorMethod, MethodName): New fields.
25576         (TypeContainer::Populate): Move the registering of builders into
25577         RegisterMethodBuilder.
25578         (Operator::Emit): Re-write.
25579
25580         * expression.cs (Binary::Emit): Comment out code path to emit method
25581         invocation stuff for the case when we have a user defined operator. I am
25582         just not able to get it right !
25583
25584 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25585
25586         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25587         argument. 
25588
25589         (Expression::MemberLookup): Provide a version that allows to
25590         specify the MemberTypes and BindingFlags. 
25591
25592         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25593         so it was not fetching variable information from outer blocks.
25594
25595         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25596         Beforefieldinit as it was buggy.
25597
25598         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25599         that Ravi put here.  
25600
25601         * class.cs (Constructor::Emit): Only emit if block is not null.
25602         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25603         deal with this by semantically definining it as if the user had
25604         done it.
25605
25606         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25607         constructors as we now "emit" them at a higher level.
25608
25609         (TypeContainer::DefineDefaultConstructor): Used to define the
25610         default constructors if none was provided.
25611
25612         (ConstructorInitializer): Add methods Resolve and Emit. 
25613
25614         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25615
25616 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25617
25618         * class.cs (TypeContainer::EmitDefaultConstructor): Register
25619         the default constructor builder with our hashtable for methodbuilders
25620         to methodcores.
25621
25622         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
25623         and argument_count is 0 in which case we have a match.
25624         (Binary::ResolveOperator): More null checking and miscellaneous coding
25625         style cleanup.
25626
25627 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25628
25629         * rootcontext.cs (IsNameSpace): Compare against null.
25630
25631         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
25632
25633         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
25634         and Unary::Operator.
25635
25636         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
25637         accordingly.
25638
25639         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
25640         we have overloaded operators.
25641         (Binary::ResolveOperator): Implement the part which does the operator overload
25642         resolution.
25643
25644         * class.cs (Operator::Emit): Implement.
25645         (TypeContainer::Emit): Emit the operators we have too.
25646
25647         * expression.cs (Binary::Emit): Update to emit the appropriate code for
25648         the case when we have a user-defined operator.
25649
25650 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25651
25652         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
25653
25654 2001-09-16  Ravi Pratap  <ravi@ximian.com>
25655
25656         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
25657         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
25658         (Constructor::Emit): Implement.
25659         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
25660         if we have no work to do. 
25661         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
25662         Emit method.
25663
25664         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
25665         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
25666
25667         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
25668         of parent.parent.
25669
25670 2001-09-15  Ravi Pratap  <ravi@ximian.com>
25671
25672         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
25673         in the source.
25674         (Tree::RecordNamespace): Method to do what the name says ;-)
25675         (Tree::Namespaces): Property to get at the namespaces hashtable.
25676
25677         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
25678         keep track.
25679
25680         * rootcontext.cs (IsNamespace): Fixed it :-)
25681
25682 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25683
25684         * class.cs (TypeContainer::FindMembers): Add support for
25685         constructors. 
25686         (MethodCore): New class that encapsulates both the shared aspects
25687         of a Constructor and a Method.  
25688         (Method, Constructor): Factored pieces into MethodCore.
25689
25690         * driver.cs: Added --fatal which makes errors throw exceptions.
25691         Load System assembly as well as part of the standard library.
25692
25693         * report.cs: Allow throwing exceptions on errors for debugging.
25694
25695         * modifiers.cs: Do not use `parent', instead use the real type
25696         container to evaluate permission settings.
25697
25698         * class.cs: Put Ravi's patch back in.  He is right, and we will
25699         have to cope with the
25700
25701 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25702
25703         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
25704         FamORAssem, not FamANDAssem.
25705
25706 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25707
25708         * driver.cs: Added --parse option that only parses its input files
25709         and terminates.
25710
25711         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
25712         incorrect.  IsTopLevel is not used to tell whether an object is
25713         root_types or not (that can be achieved by testing this ==
25714         root_types).  But to see if this is a top-level *class* (not
25715         necessarly our "toplevel" container). 
25716
25717 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25718
25719         * enum.cs (Enum::Define): Modify to call the Lookup method on the
25720         parent instead of a direct call to GetType.
25721
25722 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25723
25724         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
25725         Modifiers.TypeAttr. This should just be a call to that method.
25726
25727         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
25728         object so that we can determine if we are top-level or not.
25729
25730         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
25731         TypeContainer too.
25732
25733         * enum.cs (Enum::Define): Ditto.
25734
25735         * modifiers.cs (FieldAttr): Re-write.
25736
25737         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
25738         (TypeContainer::HaveStaticConstructor): New property to provide access
25739         to precisely that info.
25740
25741         * modifiers.cs (MethodAttr): Re-write.
25742         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
25743
25744         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
25745         of top-level types as claimed.
25746
25747 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25748
25749         * expression.cs (MemberLookup): Fruitless attempt to lookup
25750         constructors.  Maybe I need to emit default constructors?  That
25751         might be it (currently .NET emits this for me automatically).
25752         (Invocation::OverloadResolve): Cope with Arguments == null.
25753         (Invocation::EmitArguments): new function, shared by the new
25754         constructor and us.
25755         (Invocation::Emit): Handle static and instance methods.  Emit
25756         proper call instruction for virtual or non-virtual invocations.
25757         (New::Emit): Implement.
25758         (New::Resolve): Implement.
25759         (MemberAccess:Resolve): Implement.
25760         (MethodGroupExpr::InstanceExpression): used conforming to the spec
25761         to track instances.
25762         (FieldExpr::Resolve): Set type.
25763
25764         * support.cs: Handle empty arguments.
25765                 
25766         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
25767         SimpleLookup): Auxiliary routines to help parse a qualifier
25768         identifier.  
25769
25770         Update qualifier_identifier rule.
25771
25772         * codegen.cs: Removed debugging messages.
25773
25774         * class.cs: Make this a global thing, this acts just as a "key" to
25775         objects that we might have around.
25776
25777         (Populate): Only initialize method_builders_to_methods once.
25778
25779         * expression.cs (PropertyExpr): Initialize type from the
25780         PropertyType. 
25781
25782         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
25783         Resolve pattern.  Attempt to implicitly convert value to boolean.
25784         Emit code.
25785
25786         * expression.cs: Set the type for the int32/int32 argument case.
25787         (Binary::ResolveOperator): Set the return type to boolean for
25788         comparission operators
25789
25790         * typemanager.cs: Remove debugging print code.
25791
25792         (Invocation::Resolve): resolve type.
25793
25794         * class.cs: Allocate a MemberInfo of the correct size, as the code
25795         elsewhere depends on the test to reflect the correct contents.
25796
25797         (Method::) Keep track of parameters, due to System.Reflection holes
25798
25799         (TypeContainer::Populate): Keep track of MethodBuilders to Method
25800         mapping here.
25801
25802         (TypeContainer::FindMembers): Use ArrayList and then copy an array
25803         of the exact size and return that.
25804
25805         (Class::LookupMethodByBuilder): New function that maps
25806         MethodBuilders to its methods.  Required to locate the information
25807         on methods because System.Reflection bit us again.
25808
25809         * support.cs: New file, contains an interface ParameterData and
25810         two implementations: ReflectionParameters and InternalParameters
25811         used to access Parameter information.  We will need to grow this
25812         as required.
25813
25814         * expression.cs (Invocation::GetParameterData): implement a cache
25815         and a wrapper around the ParameterData creation for methods. 
25816         (Invocation::OverloadResolve): Use new code.
25817
25818 2001-09-13  Ravi Pratap  <ravi@ximian.com>
25819
25820         * class.cs (TypeContainer::EmitField): Remove and move into 
25821         (Field::Define): here and modify accordingly.
25822         (Field.FieldBuilder): New member.
25823         (TypeContainer::Populate): Update accordingly.
25824         (TypeContainer::FindMembers): Implement.
25825
25826 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25827
25828         * statement.cs: (VariableInfo::VariableType): New field to be
25829         initialized with the full type once it is resolved. 
25830
25831 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
25832
25833         * parameter.cs (GetParameterInfo): Use a type cache to compute
25834         things only once, and to reuse this information
25835
25836         * expression.cs (LocalVariableReference::Emit): Implement.
25837         (OpcodeCast::Emit): fix.
25838
25839         (ParameterReference::Resolve): Implement.
25840         (ParameterReference::Emit): Implement.
25841
25842         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
25843         that are expressions need to stay as Expressions.
25844
25845         * typemanager.cs (CSharpName): Returns the C# name of a type if
25846         possible. 
25847
25848         * expression.cs (Expression::ConvertImplicit): New function that
25849         implements implicit type conversions.
25850
25851         (Expression::ImplicitReferenceConversion): Implements implicit
25852         reference conversions.
25853
25854         (EmptyCast): New type for transparent casts.
25855
25856         (OpcodeCast): New type for casts of types that are performed with
25857         a sequence of bytecodes.
25858
25859         (BoxedCast): New type used for casting value types into reference
25860         types.  Emits a box opcode.
25861
25862         (Binary::DoNumericPromotions): Implements numeric promotions of
25863         and computation of the Binary::Type.
25864
25865         (Binary::EmitBranchable): Optimization.
25866
25867         (Binary::Emit): Implement code emission for expressions.
25868
25869         * typemanager.cs (TypeManager): Added two new core types: sbyte
25870         and byte.
25871
25872 2001-09-12  Ravi Pratap  <ravi@ximian.com>
25873
25874         * class.cs (TypeContainer::FindMembers): Method which does exactly
25875         what Type.FindMembers does, only we don't have to use reflection. No
25876         implementation yet.
25877
25878         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
25879         typecontainer objects as we need to get at them.
25880         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
25881
25882         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
25883         typecontainer object.
25884
25885         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
25886         of just a Report object.
25887
25888 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25889
25890         * class.cs (Event::Define): Go back to using the prefixes "add_" and
25891         "remove_"
25892         (TypeContainer::Populate): Now define the delegates of the type too.
25893         (TypeContainer.Delegates): Property to access the list of delegates defined
25894         in the type.
25895
25896         * delegates.cs (Delegate::Define): Implement partially.
25897
25898         * modifiers.cs (TypeAttr): Handle more flags.
25899
25900 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25901
25902         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
25903         and not <=
25904         (Operator::Define): Re-write logic to get types by using the LookupType method
25905         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
25906         (Indexer::Define): Ditto.
25907         (Event::Define): Ditto.
25908         (Property::Define): Ditto.
25909
25910 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25911
25912         * class.cs (TypeContainer::Populate): Now define operators too. 
25913         (TypeContainer.Operators): New property to access the list of operators
25914         in a type.
25915         (Operator.OperatorMethodBuilder): New member to hold the method builder
25916         for the operator we are defining.
25917         (Operator::Define): Implement.
25918
25919 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25920
25921         * class.cs (Event::Define): Make the prefixes of the accessor methods
25922         addOn_ and removeOn_ 
25923
25924         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
25925         of the location being passed in too. Ideally, this should go later since all
25926         error reporting should be done through the Report object.
25927
25928         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
25929         (Populate): Iterate thru the indexers we have and define them too.
25930         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
25931         for the get and set accessors.
25932         (Indexer::Define): Implement.
25933
25934 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
25935
25936         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
25937         my previous implementation, did not work.
25938
25939         * typemanager.cs: Add a couple of missing types (the longs).
25940
25941         * literal.cs: Use TypeManager.bool_type instead of getting it.
25942
25943         * expression.cs (EventExpr): New kind of expressions.
25944         (Expressio::ExprClassFromMemberInfo): finish
25945
25946 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
25947
25948         * assign.cs: Emit stores to static fields differently.
25949
25950 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25951
25952         * Merge in changes and adjust code to tackle conflicts. Backed out my
25953         code in Assign::Resolve ;-) 
25954
25955 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25956
25957         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
25958         instead Report.Error and also pass in the location.
25959         (CSharpParser::Lexer): New readonly property to return the reference
25960         to the Tokenizer object.
25961         (declare_local_variables): Use Report.Error with location instead of plain 
25962         old error.
25963         (CheckDef): Ditto.
25964
25965         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
25966         (Operator.CheckBinaryOperator): Ditto.
25967
25968         * cs-parser.jay (operator_declarator): Update accordingly.
25969
25970         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
25971         (CheckBinaryOperator): Same here.
25972
25973         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
25974         on the name without any prefixes of namespace names etc. This is because we
25975         already might have something already fully qualified like 
25976         'System.Console.WriteLine'
25977
25978         * assign.cs (Resolve): Begin implementation. Stuck ;-)
25979
25980 2001-09-07  Ravi Pratap  <ravi@ximian.com>
25981
25982         * cs-tokenizer.cs (location): Return a string which also contains
25983         the file name.
25984
25985         * expression.cs (ElementAccess): New class for expressions of the
25986         type 'element access.'
25987         (BaseAccess): New class for expressions of the type 'base access.'
25988         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
25989         respectively.
25990
25991         * cs-parser.jay (element_access): Implement action.
25992         (base_access): Implement actions.
25993         (checked_expression, unchecked_expression): Implement.
25994
25995         * cs-parser.jay (local_variable_type): Correct and implement.
25996         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
25997
25998         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
25999
26000         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
26001         name and the specifiers.
26002
26003         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
26004
26005         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
26006         making them all public ;-)
26007
26008         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
26009         class anyways.
26010
26011 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
26012
26013         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
26014         PropertyExprs.
26015         (FieldExpr, PropertyExprs): New resolved expressions.
26016         (SimpleName::MemberStaticCheck): Perform static checks for access
26017         to non-static fields on static methods. Maybe this should be
26018         generalized for MemberAccesses. 
26019         (SimpleName::ResolveSimpleName): More work on simple name
26020         resolution. 
26021
26022         * cs-parser.jay (primary_expression/qualified_identifier): track
26023         the parameter index.
26024
26025         * codegen.cs (CodeGen::Save): Catch save exception, report error.
26026         (EmitContext::EmitBoolExpression): Chain to expression generation
26027         instead of temporary hack.
26028         (::EmitStatementExpression): Put generic expression code generation.
26029
26030         * assign.cs (Assign::Emit): Implement variable assignments to
26031         local variables, parameters and fields.
26032
26033 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
26034
26035         * statement.cs (Block::GetVariableInfo): New method, returns the
26036         VariableInfo for a variable name in a block.
26037         (Block::GetVariableType): Implement in terms of GetVariableInfo
26038
26039         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
26040         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
26041
26042 2001-09-06  Ravi Pratap  <ravi@ximian.com>
26043
26044         * cs-parser.jay (operator_declaration): Continue on my quest : update
26045         to take attributes argument.
26046         (event_declaration): Ditto.
26047         (enum_declaration): Ditto.
26048         (indexer_declaration): Ditto.
26049
26050         * class.cs (Operator::Operator): Update constructor accordingly.
26051         (Event::Event): Ditto.
26052
26053         * delegate.cs (Delegate::Delegate): Same here.
26054
26055         * enum.cs (Enum::Enum): Same here.
26056
26057 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26058
26059         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
26060
26061         * ../tests/cs0658.cs : New file to demonstrate error 0658.
26062
26063         * attribute.cs (Attributes): New class to encapsulate all attributes which were
26064         being passed around as an arraylist.
26065         (Attributes::AddAttribute): Method to add attribute sections.
26066
26067         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
26068         (struct_declaration): Update accordingly.
26069         (constant_declaration): Update.
26070         (field_declaration): Update.
26071         (method_header): Update.
26072         (fixed_parameter): Update.
26073         (parameter_array): Ditto.
26074         (property_declaration): Ditto.
26075         (destructor_declaration): Ditto.
26076
26077         * class.cs (Struct::Struct): Update constructors accordingly.
26078         (Class::Class): Ditto.
26079         (Field::Field): Ditto.
26080         (Method::Method): Ditto.
26081         (Property::Property): Ditto.
26082         (TypeContainer::OptAttribute): update property's return type.
26083
26084         * interface.cs (Interface.opt_attributes): New member.
26085         (Interface::Interface): Update to take the extra Attributes argument.
26086
26087         * parameter.cs (Parameter::Parameter): Ditto.
26088
26089         * constant.cs (Constant::Constant): Ditto.
26090
26091         * interface.cs (InterfaceMemberBase): New OptAttributes field.
26092         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
26093         the attributes as a parameter.
26094         (InterfaceProperty): Update constructor call.
26095         (InterfaceEvent): Ditto.
26096         (InterfaceMethod): Ditto.
26097         (InterfaceIndexer): Ditto.
26098
26099         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
26100         pass the attributes too.
26101         (interface_event_declaration): Ditto.
26102         (interface_property_declaration): Ditto.
26103         (interface_method_declaration): Ditto.
26104         (interface_declaration): Ditto.
26105
26106 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
26107
26108         * class.cs (Method::Define): Track the "static Main" definition to
26109         create an entry point. 
26110
26111         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
26112         EntryPoint if we find it. 
26113
26114         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
26115         (EmitContext::ig): Make this variable public.
26116
26117         * driver.cs: Make the default output file be the first file name
26118         with the .exe extension.  
26119
26120         Detect empty compilations
26121
26122         Handle various kinds of output targets.  Handle --target and
26123         rename -t to --dumper.
26124
26125         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
26126         methods inherited from Expression return now an Expression.  This
26127         will is used during the tree rewriting as we resolve them during
26128         semantic analysis.
26129
26130         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
26131         the spec.  Missing entirely is the information about
26132         accessability of elements of it.
26133
26134         (Expression::ExprClassFromMemberInfo): New constructor for
26135         Expressions that creates a fully initialized Expression based on
26136         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
26137         a Type.
26138
26139         (Invocation::Resolve): Begin implementing resolution of invocations.
26140
26141         * literal.cs (StringLiteral):  Implement Emit.
26142
26143 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26144
26145         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
26146         member.
26147
26148 2001-09-04  Ravi Pratap  <ravi@ximian.com>
26149
26150         * cs-parser.jay (attribute_arguments): Implement actions.
26151         (attribute): Fix bug in production. Implement action.
26152         (attribute_list): Implement.
26153         (attribute_target): Implement.
26154         (attribute_target_specifier, opt_target_specifier): Implement
26155         (CheckAttributeTarget): New method to check if the attribute target
26156         is valid.
26157         (attribute_section): Implement.
26158         (opt_attributes): Implement.
26159
26160         * attribute.cs : New file to handle attributes.
26161         (Attribute): Class to hold attribute info.
26162
26163         * cs-parser.jay (opt_attribute_target_specifier): Remove production
26164         (attribute_section): Modify production to use 2 different rules to 
26165         achieve the same thing. 1 s/r conflict down !
26166         Clean out commented, useless, non-reducing dimension_separator rules.
26167
26168         * class.cs (TypeContainer.attributes): New member to hold list
26169         of attributes for a type.
26170         (Struct::Struct): Modify to take one more argument, the attribute list.
26171         (Class::Class): Ditto.
26172         (Field::Field): Ditto.
26173         (Method::Method): Ditto.
26174         (Property::Property): Ditto.
26175
26176         * cs-parser.jay (struct_declaration): Update constructor call to
26177         pass in the attributes too.
26178         (class_declaration): Ditto.
26179         (constant_declaration): Ditto.
26180         (field_declaration): Ditto.
26181         (method_header): Ditto.
26182         (fixed_parameter): Ditto.
26183         (parameter_array): Ditto.
26184         (property_declaration): Ditto.
26185
26186         * constant.cs (Constant::Constant): Update constructor similarly.
26187         Use System.Collections.
26188
26189         * parameter.cs (Parameter::Parameter): Update as above.
26190
26191 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26192
26193         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
26194         (TypeContainer.delegates): New member to hold list of delegates.
26195
26196         * cs-parser.jay (delegate_declaration): Implement the action correctly 
26197         this time as I seem to be on crack ;-)
26198
26199 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
26200
26201         * rootcontext.cs (RootContext::IsNamespace): new function, used to
26202         tell whether an identifier represents a namespace.
26203
26204         * expression.cs (NamespaceExpr): A namespace expression, used only
26205         temporarly during expression resolution.
26206         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
26207         utility functions to resolve names on expressions.
26208
26209 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
26210
26211         * codegen.cs: Add hook for StatementExpressions. 
26212
26213         * class.cs: Fix inverted test for static flag in methods.
26214
26215 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26216
26217         * class.cs (Operator::CheckUnaryOperator): Correct error number used
26218         to make it coincide with MS' number.
26219         (Operator::CheckBinaryOperator): Ditto.
26220
26221         * ../errors/errors.txt : Remove error numbers added earlier.
26222
26223         * ../errors/cs1019.cs : Test case for error # 1019
26224
26225         * ../errros/cs1020.cs : Test case for error # 1020
26226
26227         * cs-parser.jay : Clean out commented cruft.
26228         (dimension_separators, dimension_separator): Comment out. Ostensibly not
26229         used anywhere - non-reducing rule.
26230         (namespace_declarations): Non-reducing rule - comment out.
26231
26232         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
26233         with TypeContainer::AddEnum.
26234
26235         * delegate.cs : New file for delegate handling classes.
26236         (Delegate): Class for declaring delegates.
26237
26238         * makefile : Update.
26239
26240         * cs-parser.jay (delegate_declaration): Implement.
26241
26242 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
26243
26244         * class.cs (Event::Define): Implement.
26245         (Event.EventBuilder): New member.
26246
26247         * class.cs (TypeContainer::Populate): Update to define all enums and events
26248         we have.
26249         (Events): New property for the events arraylist we hold. Shouldn't we move to using
26250         readonly fields for all these cases ?
26251
26252 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26253
26254         * class.cs (Property): Revamp to use the convention of making fields readonly.
26255         Accordingly modify code elsewhere.
26256
26257         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
26258         the Define method of the Property class.
26259
26260         * class.cs : Clean up applied patch and update references to variables etc. Fix 
26261         trivial bug.
26262         (TypeContainer::Populate): Update to define all the properties we have. Also
26263         define all enumerations.
26264
26265         * enum.cs (Define): Implement.
26266
26267 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26268
26269         * cs-parser.jay (overloadable_operator): The semantic value is an
26270         enum of the Operator class.
26271         (operator_declarator): Implement actions.
26272         (operator_declaration): Implement.
26273
26274         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
26275         validity of definitions.
26276         (Operator::CheckBinaryOperator): Static method to check for binary operators
26277         (TypeContainer::AddOperator): New method to add an operator to a type.
26278
26279         * cs-parser.jay (indexer_declaration): Added line to actually call the
26280         AddIndexer method so it gets added ;-)
26281
26282         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
26283         already taken care of by the MS compiler ?  
26284
26285 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26286
26287         * class.cs (Operator): New class for operator declarations.
26288         (Operator::OpType): Enum for the various operators.
26289
26290 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26291
26292         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
26293         ostensibly handle this in semantic analysis.
26294
26295         * cs-parser.jay (general_catch_clause): Comment out
26296         (specific_catch_clauses, specific_catch_clause): Ditto.
26297         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
26298         (catch_args, opt_catch_args): New productions.
26299         (catch_clause): Rewrite to use the new productions above
26300         (catch_clauses): Modify accordingly.
26301         (opt_catch_clauses): New production to use in try_statement
26302         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
26303         and re-write the code in the actions to extract the specific and
26304         general catch clauses by being a little smart ;-)
26305
26306         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
26307         Hooray, try and catch statements parse fine !
26308
26309 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26310
26311         * statement.cs (Block::GetVariableType): Fix logic to extract the type
26312         string from the hashtable of variables.
26313
26314         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
26315         I end up making that mistake ;-)
26316         (catch_clauses): Fixed gross error which made Key and Value of the 
26317         DictionaryEntry the same : $1 !!
26318
26319 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26320
26321         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
26322
26323         * cs-parser.jay (event_declaration): Correct to remove the semicolon
26324         when the add and remove accessors are specified. 
26325
26326 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26327
26328         * cs-parser.jay (IndexerDeclaration): New helper class to hold
26329         information about indexer_declarator.
26330         (indexer_declarator): Implement actions.
26331         (parsing_indexer): New local boolean used to keep track of whether
26332         we are parsing indexers or properties. This is necessary because 
26333         implicit_parameters come into picture even for the get accessor in the 
26334         case of an indexer.
26335         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
26336
26337         * class.cs (Indexer): New class for indexer declarations.
26338         (TypeContainer::AddIndexer): New method to add an indexer to a type.
26339         (TypeContainer::indexers): New member to hold list of indexers for the
26340         type.
26341
26342 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26343
26344         * cs-parser.jay (add_accessor_declaration): Implement action.
26345         (remove_accessor_declaration): Implement action.
26346         (event_accessors_declaration): Implement
26347         (variable_declarators): swap statements for first rule - trivial.
26348
26349         * class.cs (Event): New class to hold information about event
26350         declarations.
26351         (TypeContainer::AddEvent): New method to add an event to a type
26352         (TypeContainer::events): New member to hold list of events.
26353
26354         * cs-parser.jay (event_declaration): Implement actions.
26355
26356 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26357
26358         * cs-parser.jay (dim_separators): Implement. Make it a string
26359         concatenating all the commas together, just as they appear.
26360         (opt_dim_separators): Modify accordingly
26361         (rank_specifiers): Update accordingly. Basically do the same
26362         thing - instead, collect the brackets here.
26363         (opt_rank_sepcifiers): Modify accordingly.
26364         (array_type): Modify to actually return the complete type string
26365         instead of ignoring the rank_specifiers.
26366         (expression_list): Implement to collect the expressions
26367         (variable_initializer): Implement. We make it a list of expressions
26368         essentially so that we can handle the array_initializer case neatly too.
26369         (variable_initializer_list): Implement.
26370         (array_initializer): Make it a list of variable_initializers
26371         (opt_array_initializer): Modify accordingly.
26372
26373         * expression.cs (New::NType): Add enumeration to help us
26374         keep track of whether we have an object/delegate creation
26375         or an array creation.
26376         (New:NewType, New::Rank, New::Indices, New::Initializers): New
26377         members to hold data about array creation.
26378         (New:New): Modify to update NewType
26379         (New:New): New Overloaded contructor for the array creation
26380         case.
26381
26382         * cs-parser.jay (array_creation_expression): Implement to call
26383         the overloaded New constructor.
26384
26385 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
26386
26387         * class.cs (TypeContainer::Constructors): Return member
26388         constructors instead of returning null.
26389
26390 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
26391
26392         * typemanager.cs (InitCoreTypes): Initialize the various core
26393         types after we have populated the type manager with the user
26394         defined types (this distinction will be important later while
26395         compiling corlib.dll)
26396
26397         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
26398         on Expression Classification.  Now all expressions have a method
26399         `Resolve' and a method `Emit'.
26400
26401         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
26402         generation from working.     Also add some temporary debugging
26403         code. 
26404
26405 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
26406
26407         * codegen.cs: Lots of code generation pieces.  This is only the
26408         beginning, will continue tomorrow with more touches of polish.  We
26409         handle the fundamentals of if, while, do, for, return.  Others are
26410         trickier and I need to start working on invocations soon.
26411
26412         * gen-treedump.cs: Bug fix, use s.Increment here instead of
26413         s.InitStatement. 
26414
26415         * codegen.cs (EmitContext): New struct, used during code
26416         emission to keep a context.   Most of the code generation will be
26417         here. 
26418
26419         * cs-parser.jay: Add embedded blocks to the list of statements of
26420         this block.  So code generation proceeds in a top down fashion.
26421
26422 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
26423
26424         * statement.cs: Add support for multiple child blocks.
26425
26426 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
26427
26428         * codegen.cs (EmitCode): New function, will emit the code for a
26429         Block of code given a TypeContainer and its ILGenerator. 
26430
26431         * statement.cs (Block): Standard public readonly optimization.
26432         (Block::Block constructors): Link children. 
26433         (Block::Child): Child Linker.
26434         (Block::EmitVariables): Emits IL variable declarations.
26435
26436         * class.cs: Drop support for MethodGroups here, delay until
26437         Semantic Analysis.
26438         (Method::): Applied the same simplification that I did before, and
26439         move from Properties to public readonly fields.
26440         (Method::ParameterTypes): Returns the parameter types for the
26441         function, and implements a cache that will be useful later when I
26442         do error checking and the semantic analysis on the methods is
26443         performed.
26444         (Constructor::GetCallingConvention): Renamed from CallingConvetion
26445         and made a method, optional argument tells whether this is a class
26446         or a structure to apply the `has-this' bit.
26447         (Method::GetCallingConvention): Implement, returns the calling
26448         convention. 
26449         (Method::Define): Defines the type, a second pass is performed
26450         later to populate the methods.
26451
26452         (Constructor::ParameterTypes): implement a cache similar to the
26453         one on Method::ParameterTypes, useful later when we do semantic
26454         analysis. 
26455
26456         (TypeContainer::EmitMethod):  New method.  Emits methods.
26457
26458         * expression.cs: Removed MethodGroup class from here.
26459
26460         * parameter.cs (Parameters::GetCallingConvention): new method.
26461
26462 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
26463
26464         * class.cs (TypeContainer::Populate): Drop RootContext from the
26465         argument. 
26466
26467         (Constructor::CallingConvention): Returns the calling convention.
26468         (Constructor::ParameterTypes): Returns the constructor parameter
26469         types. 
26470
26471         (TypeContainer::AddConstructor): Keep track of default constructor
26472         and the default static constructor.
26473
26474         (Constructor::) Another class that starts using `public readonly'
26475         instead of properties. 
26476
26477         (Constructor::IsDefault): Whether this is a default constructor. 
26478
26479         (Field::) use readonly public fields instead of properties also.
26480
26481         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
26482         track of static constructors;  If none is used, turn on
26483         BeforeFieldInit in the TypeAttributes. 
26484
26485         * cs-parser.jay (opt_argument_list): now the return can be null
26486         for the cases where there are no arguments. 
26487
26488         (constructor_declarator): If there is no implicit `base' or
26489         `this', then invoke the default parent constructor. 
26490
26491         * modifiers.cs (MethodAttr): New static function maps a set of
26492         modifiers flags into a MethodAttributes enum
26493         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26494         MethodAttr, TypeAttr to represent the various mappings where the
26495         modifiers are used.
26496         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26497
26498 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26499
26500         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26501         method arguments.
26502
26503         * interface.cs (PopulateIndexer): Implemented the code generator
26504         for interface indexers.
26505
26506 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26507
26508         * interface.cs (InterfaceMemberBase): Now we track the new status
26509         here.  
26510
26511         (PopulateProperty): Implement property population.  Woohoo!  Got
26512         Methods and Properties going today. 
26513
26514         Removed all the properties for interfaces, and replaced them with
26515         `public readonly' fields. 
26516
26517 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26518
26519         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26520         initialize their hashtables/arraylists only when they are needed
26521         instead of doing this always.
26522
26523         * parameter.cs: Handle refs and out parameters.
26524
26525         * cs-parser.jay: Use an ArrayList to construct the arguments
26526         instead of the ParameterCollection, and then cast that to a
26527         Parameter[] array.
26528
26529         * parameter.cs: Drop the use of ParameterCollection and use
26530         instead arrays of Parameters.
26531
26532         (GetParameterInfo): Use the Type, not the Name when resolving
26533         types. 
26534
26535 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26536
26537         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26538         and instead use public readonly fields.
26539
26540         * class.cs: Put back walking code for type containers.
26541
26542 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26543
26544         * class.cs (MakeConstant): Code to define constants.
26545
26546         * rootcontext.cs (LookupType): New function.  Used to locate types 
26547
26548
26549 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26550
26551         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26552         this System.Reflection code is.  Kudos to Microsoft
26553
26554         * typemanager.cs: Implement a type cache and avoid loading all
26555         types at boot time.  Wrap in LookupType the internals.  This made
26556         the compiler so much faster.  Wow.  I rule!
26557
26558         * driver.cs: Make sure we always load mscorlib first (for
26559         debugging purposes, nothing really important).
26560
26561         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26562         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26563
26564         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26565         on namespaces that have been imported using the `using' keyword.
26566
26567         * class.cs (TypeContainer::TypeAttr): Virtualize.
26568         (Class::TypeAttr): Return attributes suitable for this bad boy.
26569         (Struct::TypeAttr): ditto.
26570         Handle nested classes.
26571         (TypeContainer::) Remove all the type visiting code, it is now
26572         replaced with the rootcontext.cs code
26573
26574         * rootcontext.cs (GetClassBases): Added support for structs. 
26575
26576 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26577
26578         * interface.cs, statement.cs, class.cs, parameter.cs,
26579         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26580         Drop use of TypeRefs, and use strings instead.
26581
26582 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26583
26584         * rootcontext.cs: 
26585
26586         * class.cs (Struct::Struct): set the SEALED flags after
26587         checking the modifiers.
26588         (TypeContainer::TypeAttr): new property, returns the
26589         TypeAttributes for a class.  
26590
26591         * cs-parser.jay (type_list): Oops, list production was creating a
26592         new list of base types.
26593
26594         * rootcontext.cs (StdLib): New property.
26595         (GetInterfaceTypeByName): returns an interface by type name, and
26596         encapsulates error handling here.
26597         (GetInterfaces): simplified.
26598         (ResolveTree): Encapsulated all the tree resolution here.
26599         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26600         types. 
26601
26602         * driver.cs: Add support for --nostdlib, to avoid loading the
26603         default assemblies.
26604         (Main): Do not put tree resolution here. 
26605
26606         * rootcontext.cs: Beginning of the class resolution.
26607
26608 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26609
26610         * rootcontext.cs: Provide better error reporting. 
26611
26612         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26613
26614         * rootcontext.cs (CreateInterface): Handle the case where there
26615         are no parent interfaces.
26616
26617         (CloseTypes): Routine to flush types at the end.
26618         (CreateInterface): Track types.
26619         (GetInterfaces): Returns an array of Types from the list of
26620         defined interfaces.
26621
26622         * typemanager.c (AddUserType): Mechanism to track user types (puts
26623         the type on the global type hash, and allows us to close it at the
26624         end). 
26625
26626 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
26627
26628         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
26629         RecordInterface instead.
26630
26631         * cs-parser.jay: Updated to reflect changes above.
26632
26633         * decl.cs (Definition): Keep track of the TypeBuilder type that
26634         represents this type here.  Not sure we will use it in the long
26635         run, but wont hurt for now.
26636
26637         * driver.cs: Smaller changes to accomodate the new code.
26638
26639         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
26640         when done. 
26641
26642         * rootcontext.cs (CreateInterface):  New method, used to create
26643         the System.TypeBuilder type for interfaces.
26644         (ResolveInterfaces): new entry point to resolve the interface
26645         hierarchy. 
26646         (CodeGen): Property, used to keep track of the code generator.
26647
26648 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
26649
26650         * cs-parser.jay: Add a second production for delegate_declaration
26651         with `VOID'.
26652
26653         (enum_body): Put an opt_comma here instead of putting it on
26654         enum_body or enum_member_declarations so we can handle trailing
26655         commas on enumeration members.  Gets rid of a shift/reduce.
26656
26657         (type_list): Need a COMMA in the middle.
26658
26659         (indexer_declaration): Tell tokenizer to recognize get/set
26660
26661         * Remove old targets.
26662
26663         * Re-add the parser target.
26664
26665 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26666
26667         * cs-parser.jay: Add precendence rules for a number of operators
26668         ot reduce the number of shift/reduce conflicts in the grammar.
26669
26670 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
26671
26672         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
26673         and put it here.
26674
26675         Get rid of old crufty code.
26676
26677         * rootcontext.cs: Use this to keep track of the parsed
26678         representation and the defined types available to the program. 
26679
26680         * gen-treedump.cs: adjust for new convention.
26681
26682         * type.cs: Split out the type manager, and the assembly builder
26683         from here. 
26684
26685         * typemanager.cs: the type manager will live here now.
26686
26687         * cil-codegen.cs: And the code generator here. 
26688
26689 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
26690
26691         * makefile: Fixed up for easy making.
26692
26693 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26694
26695         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
26696         the 
26697
26698         (unary_expression): Expand pre_increment_expression and
26699         post_decrement_expression to reduce a shift/reduce.
26700
26701 2001-07-11  Simon Cozens
26702
26703         * cs-tokenizer.cs: Hex numbers should begin with a 0.
26704
26705         Improve allow_keyword_as_indent name.
26706
26707 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
26708
26709         * Adjustments for Beta2. 
26710
26711 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
26712
26713         * decl.cs: Added `Define' abstract method.
26714         (InTransit): new property, used to catch recursive definitions. 
26715
26716         * interface.cs: Implement `Define'. 
26717
26718         * modifiers.cs: Map Modifiers.constants to
26719         System.Reflection.TypeAttribute flags.
26720
26721         * class.cs: Keep track of types and user-defined types.
26722         (BuilderInit): New method for creating an assembly
26723         (ResolveType): New function to launch the resolution process, only
26724         used by interfaces for now.
26725
26726         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
26727         that are inserted into the name space. 
26728
26729 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
26730
26731         * ARGH.  I have screwed up my tree so many times due to the use of
26732         rsync rather than using CVS.  Going to fix this at once. 
26733
26734         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
26735         load types.
26736
26737 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
26738
26739         * Experiment successful: Use System.Type rather that our own
26740         version of Type.  
26741
26742 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
26743
26744         * cs-parser.jay: Removed nsAliases from here.
26745
26746         Use new namespaces, handle `using XXX;' 
26747
26748         * namespace.cs: Reimplemented namespace handling, use a recursive
26749         definition of the class.  Now we can keep track of using clauses
26750         and catch invalid using clauses.
26751
26752 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
26753
26754         * gen-treedump.cs: Adapted for all the renaming.
26755
26756         * expression.cs (Expression): this class now has a Type property
26757         which returns an expression Type.
26758
26759         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
26760         `Type', as this has a different meaning now in the base
26761
26762 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
26763
26764         * interface.cs, class.cs: Removed from all the sources the
26765         references to signature computation, as we can not do method
26766         signature computation during the parsing time, as we are not
26767         trying to solve at that point distinguishing:
26768
26769         class X {
26770                 void a (Blah x) {}
26771                 void a (NS.Blah x) {}
26772         }
26773
26774         Which depending on the context might be valid or not, as we do not
26775         know if Blah is the same thing as NS.Blah at that point.
26776
26777         * Redid everything so the code uses TypeRefs now instead of
26778         Types.  TypeRefs are just temporary type placeholders, that need
26779         to be resolved.  They initially have a pointer to a string and the
26780         current scope in which they are used.  This is used later by the
26781         compiler to resolve the reference to an actual Type. 
26782
26783         * DeclSpace is no longer a CIR.Type, and neither are
26784         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
26785         are all DeclSpaces, but no Types. 
26786
26787         * type.cs (TypeRefManager): This implements the TypeRef manager,
26788         which keeps track of all the types that need to be resolved after
26789         the parsing has finished. 
26790
26791 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
26792
26793         * ARGH.  We are going to have to store `foreach' as a class rather
26794         than resolving it, as we need to verify error 1579 after name
26795         resolution.   *OR* we could keep a flag that says `This request to
26796         IEnumerator comes from a foreach statement' which we can then use
26797         to generate the error.
26798
26799 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
26800
26801         * class.cs (TypeContainer.AddMethod): we now add methods to the
26802         MethodGroup instead of the method hashtable.  
26803
26804         * expression.cs: Add MethodGroup abstraction, which gets us one
26805         step closer to the specification in the way we handle method
26806         declarations.  
26807
26808         * cs-parser.jay (primary_expression): qualified_identifier now
26809         tried to match up an identifier to a local variable reference or
26810         to a parameter reference.
26811
26812         current_local_parameters is now a parser global variable that
26813         points to the current parameters for the block, used during name
26814         lookup.
26815
26816         (property_declaration): Now creates an implicit `value' argument to
26817         the set accessor.
26818
26819 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
26820
26821         * parameter.cs: Do not use `param' arguments as part of the
26822         signature, per the spec.
26823
26824 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
26825
26826         * decl.cs: Base class for classes, structs and interfaces.  This
26827         is the "Declaration Space" 
26828
26829         * cs-parser.jay: Use CheckDef for checking declaration errors
26830         instead of having one on each function.
26831
26832         * class.cs: Factor out some code for handling error handling in
26833         accordance to the "Declarations" section in the "Basic Concepts"
26834         chapter in the ECMA C# spec.
26835
26836         * interface.cs: Make all interface member classes derive from
26837         InterfaceMemberBase.
26838
26839 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
26840
26841         * Many things: all interfaces are parsed and generated in
26842         gen-treedump.  Support for member variables, constructors,
26843         destructors, properties, constants is there.
26844
26845         Beginning of the IL backend, but very little done, just there for
26846         testing purposes. 
26847
26848 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
26849
26850         * cs-parser.jay: Fix labeled statement.
26851
26852         * cs-tokenizer.cs (escape): Escape " and ' always.
26853         ref_line, ref_name: keep track of the line/filename as instructed
26854         by #line by the compiler.
26855         Parse #line.
26856
26857 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
26858
26859         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
26860         to match the values in System.CodeDOM.
26861
26862         Divid renamed to Divide.
26863
26864         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
26865         statements. 
26866         (Statements.set): remove.
26867
26868         * System.CodeDOM/CodeCatchClause.cs: always have a valid
26869         statements. 
26870
26871         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
26872         falseStatements always have valid values. 
26873
26874         * cs-parser.jay: Use System.CodeDOM now.
26875