8dbf45a4f8c23dc70e55fb7c601a95c1109f3767
[mono.git] / mcs / gmcs / ChangeLog
1 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
2
3         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
4         for anonymous block with out argument.
5
6 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
7
8         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9         not used private events only.
10
11 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
12
13         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
14
15         * cs-parser.jay: Parse correctly cast of default (T).
16
17         * generic.cs (DefaultValueExpression.DoResolve): Check for void type.
18         Store original type via EmptyConstantCast.
19
20 2006-09-22  Martin Baulig  <martin@ximian.com>
21
22         * delegate.cs: Removed; this file is now shared with mcs.
23
24         * attribute.cs: Removed; this file is now shared with mcs.
25
26 2006-09-22  Martin Baulig  <martin@ximian.com>
27
28         * ecore.cs: Removed; this file is now shared with mcs.
29
30 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
31
32         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
33
34         * ecore.cs (NullCast): Derives from NullConstant.
35
36         * generic.cs (DefaultValueExpression): Fixed to cope with the constant
37         results.
38
39 2006-09-21  Martin Baulig  <martin@ximian.com>
40
41         * decl.cs: Removed; this file is now shared with mcs.
42
43 2006-09-21  Raja R Harinath  <rharinath@novell.com>
44
45         * rootcontext.cs: Remove after unification with mcs source.
46
47         * report.cs: Remove after unification with mcs source.
48         * generic.cs (AddTypeParameter, LookupTypeParameter): Move to
49         mcs/typemanager.cs.
50         (InitGenerics, CleanUpGenerics): Remove.
51
52         * support.cs: Remove after unification with mcs source.
53
54 2006-09-20  Raja R Harinath  <rharinath@novell.com>
55
56         * codegen.cs: Remove after unification with mcs source.
57
58 2006-09-19  Martin Baulig  <martin@ximian.com>
59
60         * expression.cs: Removed; this file is now shared with mcs.
61
62 2006-09-19  Martin Baulig  <martin@ximian.com>
63
64         * generic.cs
65         (TypeManager.IsEqual): Moved into ../mcs/typemanager.cs.
66         (TypeManager.DropGenericTypeArguments): Likewise.
67         (TypeManager.DropGenericMethodArguments): Likewise.
68         (TypeManager.GetTypeArguments): Likewise.
69         (TypeManager.HasGenericArguments): Likewise.
70
71 2006-09-19  Martin Baulig  <martin@ximian.com>
72
73         * ecore.cs (PropertyExpr.InstanceResolve): Fix the CS1540 check.
74
75 2006-09-19  Martin Baulig  <martin@ximian.com>
76
77         * typemanager.cs: Removed; this file is now shared with mcs.
78
79 2006-09-16  Raja R Harinath  <rharinath@novell.com>
80
81         * Makefile (LOCAL_MCS_FLAGS): Use instead of PROFILE_MCS_FLAGS.
82         * AssemblyInfo.cs, driver.cs: Remove after unification with mcs source.
83
84 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
85
86         A fix for #79401
87         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
88         only if parent type is class.
89         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
90         update.
91
92 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
93
94         * cs-parser.jay,
95         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
96         keywords are used.
97         * typemanager.cs(CSharpName): Converts NullType to null.
98
99 2006-09-15  Martin Baulig  <martin@ximian.com>
100
101         * pending.cs: Removed; this file is now shared with mcs.
102
103 2006-09-15  Martin Baulig  <martin@ximian.com>
104
105         * statement.cs: Removed; this file is now shared with mcs.
106
107 2006-09-15  Martin Baulig  <martin@ximian.com>
108
109         * rootcontext.cs (RootContext.BrokenCircularDeps): Removed.
110
111         * driver.cs: Removed the `--broken-cycles' argument.
112
113 2006-09-15  Martin Baulig  <martin@ximian.com>
114
115         * namespace.cs: Removed; this file is now shared with mcs.
116
117 2006-09-15  Martin Baulig  <martin@ximian.com>
118
119         * decl.cs (MemberName): Minor code cleanups.
120
121 2006-09-15  Martin Baulig  <martin@ximian.com>
122
123         * parameter.cs: Removed; this file is now shared with mcs.
124
125 2006-09-15  Martin Baulig  <martin@ximian.com>
126
127         * enum.cs: Removed; this file is now shared with mcs.
128
129 2006-09-15  Martin Baulig  <martin@ximian.com>
130
131         * Makefile: Define `GMCS_SOURCE'.
132
133         * flowanalysis.cs: Removed; this file is now shared with mcs.
134
135 2006-09-15  Martin Baulig  <martin@ximian.com>
136
137         Removed modifiers.cs, literal.cs, location.cs, roottypes.cs,
138         assign.cs, const.cs, cfold.cs, constant.cs, symbolwriter.cs and
139         doc.cs - they are now shared with mcs.
140
141         * gmcs.exe.sources: Include these files from ../mcs/.
142
143 2006-09-15  Martin Baulig  <martin@ximian.com>
144
145         * old-code.cs, gen-il.cs, gen-treedump.cs: Removed old stuff.
146         * g1.cs, sample-hello.cs, sample-stack.il: Likewise.
147
148 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
149
150         * assign.cs, ecore.cs, expression.cs: Share error message text.
151         * class.cs (FieldMember.Define): Check for variable of static type.
152         * decl.cs (check_type_parameter): Report correct type name.
153         * driver.cs (LoadAssembly): Uses error output for errors.
154         * generic.cs (Constraints.Resolve): Add check for constraint accessibility
155         (TypeArguments.Resolve): Static class cannot be used as an argument.
156         * statement.cs (ResolveMeta): Constants cannot be generic types.
157
158 2006-09-12  Martin Baulig  <martin@ximian.com>
159
160         * generic.cs (TypeManager.IsIList): Moved into convert.cs.
161
162         * convert.cs (Convert.Array_To_IList): Moved here and correctly
163         implement it; fixes #79345.
164
165 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
166
167         * decl.cs (DeclSpace.SetParameterInfo): Check for nonexistent type
168         parameter.
169         * expression.cs (TypeOf.GetAttributableValue): Check for open generic
170         types.
171         * generic.cs: Improved error messages.
172         * typemanager.cs (RemoveGenericArity): Made public.
173
174 2006-09-08  Martin Baulig  <martin@ximian.com>
175
176         * typemanager.cs (TypeManager.interlocked_type): New public field.
177         (TypeManager.int_interlocked_compare-exchange): New public field.
178         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
179         enumerator types here and call InitGenericCoreTypes().
180         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
181         after calling InitEnumUnderlyingTypes().
182
183         * rootcontext.cs
184         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
185         `classes_second_stage'. 
186
187 2006-09-07  Marek Safar  <marek.safar@seznam.cz>
188  
189         * class.cs, generic.cs (GenericMethod.Define): Check for type parameter
190         collisions.
191         * statement.cs (Block.Variables): Made public.
192
193 2006-09-07  Martin Baulig  <martin@ximian.com>
194
195         * driver.cs
196         (MainDriver): Revert r62663 from Marek; see #70506 for details.
197
198 2006-09-01  Martin Baulig  <martin@ximian.com>
199
200         * generic.cs
201         (TypeManager.IsIList): Also handle base classes and interfaces. 
202
203 2006-09-01  Raja R Harinath  <rharinath@novell.com>
204
205         Fix #79238
206         * expression.cs (Invocation.MoreSpecific): Check for reference
207         types earlier.
208
209 2006-08-29  Miguel de Icaza  <miguel@novell.com>
210
211         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
212
213 2006-08-17  Miguel de Icaza  <miguel@novell.com>
214
215         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
216         #52019 and #79064, the use of the \uXXXX sequence in source code
217         to represent unicode characters.
218
219 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
220  
221         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
222         support.
223         * class.cs, ecore.cs, statement.cs: Merged to one error message.
224
225 2006-08-14  Raja R Harinath  <rharinath@novell.com>
226
227         Fix #79067
228         * cs-tokenizer.cs (parse_less_than): Allow '*' to appear in a type
229         parameter too.  This only avoids a parse error -- the semantic
230         error is caught elsewhere.
231
232 2006-08-13  Miguel de Icaza  <miguel@novell.com>
233
234         * assign.cs: Catch attempts to assign to a method groups in += and
235         report as 1656
236
237 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
238
239         A fix for #79056
240         * cs-parser.jay: Don't destroy current array type by typeof of array's.
241
242 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
243
244         * cs-parser.jay: Check whether a constraint clause has already been
245         specified for type parameter.
246         * generic.cs (Constraints): Exposed location.
247
248 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
249
250         * class.cs (Method.Define): Issue a warning when generic method looks like
251         an entry point.
252         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
253         as well.
254         * report.cs: New warning number.
255
256 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
257  
258         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
259         looking for ctor.
260         * decl.cs (MemberCache.FindMembers): When container is interface we need to
261         search all base interfaces as a member can be ambiguous.
262         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
263         Constructor member type filter. 
264         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
265         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
266         reporting for returned memberinfos.
267         * report.cs: Updated.
268         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
269         version to work on all runtimes.
270         (TypeManager.RealMemberLookup): Removed members filtering.
271
272 2006-08-08  Raja R Harinath  <rharinath@novell.com>
273
274         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
275         (PropertyExpr.EmitAssign): Likewise.
276         * expression.cs (Indirection.EmitAssign): Likewise.
277         (LocalVariableReference.EmitAssign): Likewise.
278         (ParameterReference.EmitAssign): Likewise.
279         (Invocation.EmitArguments): Likewise.
280         (ArrayAccess.EmitAssign): Likewise.
281         (IndexerAccess.EmitAssign): Likewise.
282         (This.EmitAssign): Likewise.
283         (ConditionalLogicalOperator.Emit): Likewise.
284
285         Fix #79026
286         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
287         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
288         leave it in after returning it.
289         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
290
291 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
292
293         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
294         message.
295
296 2006-08-05  Marek Safar  <marek.safar@seznam.cz>
297
298         * class.cs (TypeContainer.AddPartial): Add check for partial declarations
299         with different type names.
300         (TypeContainer.UpdateTypeParameterConstraints): Updated an error message.
301
302 2006-08-03  Raja R Harinath  <rharinath@novell.com>
303
304         Fix cs0146-3.cs and cs0146-4.cs.
305         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
306         enclosing types don't depend on the current type.
307
308 2006-08-02  Raja R Harinath  <rharinath@novell.com>
309
310         Fix #77963
311         * class.cs (TypeContainer.DoDefineMembers): Use
312         FindBaseMemberWithSameName on Parent, since we're interested in
313         whether we hide inherited members or not.
314         (FindBaseMemberWithSameName): Make slightly more robust.
315
316         Fix #77396
317         * codegen.cs (IResolveContext.GenericDeclContainer): New.
318         (EmitContext): Implement new interface requirement.
319         * namespace.cs (UsingEntry, LocalAliasEntry): Likewise.
320         * decl.cs (MemberCore): Likewise.
321         (DeclSpace.GenericDeclContainer): Rename from DeclContainer.
322         * ecore.cs (SimpleName.ResolveAsTypeTerminal): Use
323         ec.GenericDeclContainer to check for generic parameters.
324         (SimpleName.DoSimpleNameResolve): Likewise.
325         * generic.cs (TypeParameter.DeclContainer): Remove override.
326
327         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
328         declspaces for doppelgangers too.
329         (UsingEntry): Implement IResolveContext.
330         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
331         'this' as the resolve context.
332         (LocalAliasEntry): Likewise.
333
334         Implement parts of #77403
335         * roottypes.cs (RootDeclSpace): New.  Used to represent the
336         toplevel declaration space.  Each namespace declaration introduces
337         a "partial" root declaretion space.
338         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
339         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
340         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
341         from 'current_namespace.SlaveDeclSpace'.
342         (namespace_declaration): Likewise.
343         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
344         check.  It can't happen now.
345         * decl.cs (DeclSpace.LookupType): Likewise.
346         * driver.cs (MainDriver): Sanity check.
347
348 2006-08-01  Raja R Harinath  <rharinath@novell.com>
349
350         * decl.cs (DeclSpace.FindNestedType): Remove.
351         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
352         LookupTypeContainer to get the container of the nested type.
353         * class.cs (TypeContainer.FindNestedType): Make non-override.
354
355 2006-07-31  Raja R Harinath  <rharinath@novell.com>
356
357         * decl.cs (DeclSpace.PartialContainer): Move field from ...
358         * class.cs (TypeContainer.PartialContainer): ... here.
359         (TypeContainer.AddBasesForPart): New helper.
360         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
361         instead.
362         * cs-parser.jay (current_class): Convert to DeclSpace.
363         (struct_declaration, interface_declaration, class_declaration):
364         Use AddBasesForPart instead of .Bases directly.
365         * const.cs, iterators.cs: Update to changes.
366
367 2006-07-28  Raja R Harinath  <rharinath@novell.com>
368
369         * class.cs (TypeContainer.AddMemberType): Rename from
370         AddToTypeContainer.
371         (TypeContainer.AddMember): Rename from AddToMemberContainer.
372         (AddTypeContainer): New.  Combine AddClassOrStruct and
373         AddInterface.
374         (AddPartial): Update.  Add 'is_partial' argument.
375         * roottypes.cs: Update to changes.
376         * cs-parser.jay (push_current_class): New helper for handling
377         current_container and current_class.
378         (struct_declaration, interface_declaration, class_declaration):
379         Use it.
380
381 2006-07-26  Raja R Harinath  <rharinath@novell.com>
382
383         * roottypes.cs: Rename from tree.cs.
384
385         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
386         * tree.cs (Tree, ITreeDump): Remove types.
387         * rootcontext.cs (tree, Tree): Remove fields.
388         (root, ToplevelTypes): New.
389         * *.cs: Update to rename.
390
391         * tree.cs (Tree.RecordDecl): Remove.
392         (RootTypes.AddToTypeContainer): Record the toplevel type in its
393         namespace here.
394         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
395
396 2006-07-23  Raja R Harinath  <harinath@gmail.com>
397
398         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
399         DoFlowAnalysis and OmitStructFlowAnalysis here.
400         (ec.With): Rename from WithUnsafe and generalize.
401         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
402         (ec.WithFlowAnalyis): New.
403         * ecore.cs, expression.cs, statement.cs: Update.
404
405 2006-07-22  Raja R Harinath  <harinath@gmail.com>
406
407         * statement.cs (Block.ResolveMeta): Simplify slightly.
408
409         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
410         multiple boolean fields.  Convert InUnsafe, constant_check_state,
411         check_state to flags.
412         (CheckState, ConstantCheckState): Update.
413         (InUnsafe): New read-only property.
414         (FlagsHandle): Rename from CheckStateHandle and convert to handle
415         arbitrary flags.
416         (WithUnsafe): New helper similar to WithCheckState.
417         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
418         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
419
420 2006-07-21  Raja R Harinath  <rharinath@novell.com>
421
422         Make comparisons use the same IL irrespective of whether they're
423         in a 'checked' or 'unchecked' context: one of the issues in #78899
424         * codegen.cs (EmitContext.CheckState): Make read-only property.
425         (EmitContext.ConstantCheckState): Likewise.
426         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
427         helper that implement a save/restore stack for CheckState
428         values.  This is the only way to change check-state.
429         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
430         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
431         (CheckedExpr.EmitBranchable): New forwarding method.
432         (UnCheckedExpr): Likewise.
433         * statement.cs (Block.ResolveMeta): Use WithCheckState.
434         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
435         (Checked.Resolve, checked.DoEmit): Likewise.
436
437 2006-07-21  Martin Baulig  <martin@ximian.com>
438
439         * generic.cs (TypeManager.InferType): When inferring an array
440         type, also allow IList<T> and ICollection<T>.  Fixes #78900.
441
442 2006-07-21  Martin Baulig  <martin@ximian.com>
443
444         * generic.cs (TypeManager.IsIEnumerable): Renamed into IsIList()
445         and allow IList`1 and all its base interfaces.
446
447         * convert.cs (Convert.ImplicitReferenceConversion): Allow
448         converting from an array-type of T to IList<T>.
449
450 2006-07-21  Martin Baulig  <martin@ximian.com>
451
452         * ecore.cs (SimpleName.DoSimpleNameResolve): Added CS0307 check.
453
454 2006-07-20  Miguel de Icaza  <miguel@novell.com>
455
456         * anonymous.cs: Cache the resolved anonymous delegate, and return
457         this so that the ResolveTopBlock is only triggered once, not
458         twice.
459
460         Currently we trigger ResolvetopBlock twice due to a first pass of
461         argument check compatibility, and a second pass that does the
462         actual resolution.   
463
464 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
465
466         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
467         modifiers.
468         * rootcontext.cs (Reset): Add helper_classes.
469
470 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
471
472         A fix for #78860
473         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
474         correctly.
475
476 2006-07-13  Miguel de Icaza  <miguel@novell.com>
477
478         * statement.cs (Lock): Handle expressions of type
479         TypeManager.null_type specially.  Fixes #78770
480
481 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
482
483         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
484         to an event.
485
486 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
487
488         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
489         for accessors as well.
490         * ecore.cs (EventExpr): Add AccessorTable.
491
492 2006-07-03  Martin Baulig  <martin@ximian.com>
493
494         * ecore.cs (UnboxCast.Emit): Also use `Unbox_Any' for generic
495         instances of value types.
496
497         * convert.cs (Convert.ExplicitConversion): Correctly handle
498         object->nullable conversions.   
499
500 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
501
502         A fix for #78738
503         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
504         for CS0122 where appropriate.
505         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
506         level attributes.
507         (Filter): Assembly can be null in the case of top level attributes.
508
509 2006-06-28  Raja R Harinath  <rharinath@novell.com>
510
511         Fix #78716
512         * generic.cs (TypeManager.InferParamsTypeArguments): If there are
513         no arguments, return 'false': nothing can be inferred.
514
515 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
516
517         A fix for #78690
518
519         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
520         is done at global level.
521
522 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
523
524         A fix for #77002, Implemented TypeForwarder support.
525
526         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
527         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Add TypeForwarder
528         attribute handling.
529         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
530         * typemanager.cs (): Add type_forwarder_attr_type.
531
532 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
533
534         * report.cs: Add CS0469 warning.
535
536 2006-06-22  Martin Baulig  <martin@ximian.com>
537
538         * class.cs
539         (TypeContainer.GetNormalBases): Also use ResolveAsBaseTerminal()
540         for interfaces; fixes #78686, which is a modification of #78380
541         with interfaces instead of classes.
542
543 2006-06-21  Martin Baulig  <martin@ximian.com>
544
545         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
546         the `try'-block, so we also report CS0016 etc. there.
547
548 2006-06-21  Martin Baulig  <martin@ximian.com>
549
550         * ecore.cs (FieldExpr.EmitAssign, FieldExpr.AddressOf): Correctly
551         handle SetAssigned() and SetMemberIsUsed() for generic types;
552         fixes #77545.
553
554 2006-06-21  Martin Baulig  <martin@ximian.com>
555
556         * delegate.cs
557         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
558
559 2006-06-21  Martin Baulig  <martin@ximian.com>
560
561         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
562         also report CS1686 for parameters.
563
564 2006-06-21  Martin Baulig  <martin@ximian.com>
565
566         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
567         instead of an error if the value is not implicitly convertible to
568         the switch types; fixes #77964.
569
570 2006-06-21  Raja R Harinath  <rharinath@novell.com>
571
572         Fix #78673
573         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
574         FieldBuilder is null.
575
576         Fix #78662
577         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
578         'left' and 'right' before error-checking.
579
580 2006-06-19  Martin Baulig  <martin@ximian.com>
581
582         * convert.cs
583         (Convert.ImplicitConversionStandard): Cleanup and correctly
584         implement nullable conversions.
585         (Convert.ImplicitStandardConversionExists): Likewise.
586         (Convert.ExplicitConversion): Likewise.
587
588 2006-06-19  Martin Baulig  <martin@ximian.com>
589
590         * generic.cs
591         (Nullable.Wrap.Create, Nullable.Unwrap.Create): New public static
592         methods; make the ctors protected.
593
594 2006-06-19  Martin Baulig  <martin@ximian.com>
595
596         Fixed #78380; added gtest-273.cs.
597
598         * ecore.cs
599         (Expression.ResolveAsBaseTerminal): Move the constraint checking
600         into ResolveAsTypeTerminal().
601
602         * generic.cs
603         (ConstraintChecker.HasDefaultConstructor): Use the non-cache based
604         TypeManager.FindMembers() to check for the default ctor.
605
606 2006-06-18  Marek Safar  <marek.safar@seznam.cz>
607
608         * generic.cs: Fixed NullableInfo accessibility.
609
610 2006-06-16  Martin Baulig  <martin@ximian.com>
611
612         * generic.cs
613         (Constraints.InflatedConstraints.inflate): Correctly inflate
614         generic types; fixes #78400.
615
616 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
617
618         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
619         Fixed bug #78601.
620         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
621         (FieldExpr.DoResolve): likewise.
622         (PropertyExpr.InstanceResolve): likewise.
623         (EventExpr.InstanceResolve): likewise. 
624
625 2006-06-15  Martin Baulig  <martin@ximian.com>
626
627         * statement.cs
628         (SwitchLabel.ResolveAndReduce): Added `bool allow_nullable'
629         argument; always allow a `null' label if true.
630         (Switch.SwitchGoverningType): Take an `Expression expr' argument.
631         (Switch.TableSwitchEmit, Switch.SimpleSwitchEmit): Check whether
632         we have a `null' label and mark the new `null_target' label;
633         default to the `default' label.
634         (Switch.Resolve): Add support for nullable types.  Fixes #78630.
635
636 2006-06-15  Martin Baulig  <martin@ximian.com>
637
638         * class.cs (Operator.Define): Allow an implicit/explicit operator
639         to convert to/from a nullable value of the enclosing type.
640
641         * generic.cs (TypeManager.IsNullableTypeOf): New public method.
642         (Nullable.Unwrap, Nullable.Wrap): Make these classes public.
643
644         * convert.cs
645         (Convert.ImplicitStandardConversionExists): Add support for lifted
646         implicit/explicit conversions.
647         (Convert.ImplicitConversionStandard): Likewise.
648
649 2006-06-13  Martin Baulig  <martin@ximian.com>
650
651         * ecore.cs (SimpleName.DoSimpleNameResolve): Check whether we have
652         type arguments and create a ConstructedType if necessary.  Fixes #78400.
653
654 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
655
656         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
657         attribute applicable tests for attribute argument.
658
659 2006-06-02  Raja R Harinath  <rharinath@novell.com>
660
661         Fix #78079
662         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
663         (Binary.OverloadResolve_PredefinedIntegral): New.
664         (Binary.OverloadResolve_PredefinedFloating): New.
665         (Binary.OverloadResolve_PredefinedString): New.
666         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
667         Follow the standard more closely, and treat numeric promotions in
668         terms of overload resolution.
669         (Binary.CheckShiftArguments): Simplify.
670
671 2006-06-01  Raja R Harinath  <rharinath@novell.com>
672
673         * flowanalysis.cs (MyBitVector): Simplify representation.
674         (MyBitVector.Clone): Avoid allocating BitArray.
675         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
676         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
677         (*): Update.  Change all references to MyBitVector.And and
678         MyBitVector.Or to &= and |=.
679
680 2006-05-31  Raja R Harinath  <rharinath@novell.com>
681
682         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
683         Use bne.un instead of ceq+brfalse.
684
685         Fix cs0208-[23].cs
686         * typemanager.cs (IsUnmanagedType): Disallow generic types and
687         generic parameters.
688
689 2006-05-29  Raja R Harinath  <rharinath@novell.com>
690
691         Fix cs0231-[34].cs.
692         * cs-parser.jay (formal_parameter_list): Extend the pattern below
693         to param arguments too.
694
695 2006-05-26  Miguel de Icaza  <miguel@novell.com>
696
697         * cs-parser.jay: Catch another parsing form for arglist being
698         followed by other arguments.  Fixes #78313.
699
700 2006-05-25  Raja R Harinath  <rharinath@novell.com>
701
702         Fix #78324
703         * expression.cs (Binary.DoResolve): Use Nullable.LiftedBinaryOperator
704         also when one of the operands is a null literal.
705         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality): Rewrite
706         to improve clarity, and generate slightly better code.
707
708 2006-05-24  Raja R Harinath  <rharinath@novell.com>
709
710         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
711         checking of out parameters to ...
712         (FlowBranchingToplevel.Merge): ... here.
713         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
714         set, propagate the origin upward, and only complain if there was
715         no other error.
716         (FlowBranchingException.AddContinueOrigin): Likewise.
717         (FlowBranchingException.AddReturnOrigin): Likewise.
718         (FlowBranchingException.AddGotoOrigin): Likewise.       
719
720 2006-05-23  Raja R Harinath  <rharinath@novell.com>
721
722         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
723         unreachable, skip it.
724         (FlowBranchingException.Merge): Always propagate jumps, even if
725         the finally block renders subsequent code unreachable.
726
727 2006-05-18  Raja R Harinath  <rharinath@novell.com>
728
729         Fix #77601
730         * statement.cs (Goto.Resolve): Move responsibility for resolving
731         'goto' to FlowBranching.AddGotoOrigin.
732         (Goto.SetResolvedTarget): New.  Callback to set the
733         LabeledStatement that's the target of the goto.
734         (Goto.DoEmit): Use Leave instead of Br when crossing an
735         unwind-protect boundary.
736         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
737         LookupLabel and adjust to new semantics.
738         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
739         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
740         Goto.SetResolvedTarget to update target.
741         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
742         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
743         AddBreakOrigin & co.  Delay propagation until ...
744         (FlowBranchingException.Merge): ... this.
745
746         * statement.cs (Block.Resolve): Always depend on flow-branching to
747         determine unreachability.  Kill workaround that originally emitted
748         only one statement after an "unreachable" label (see infloop in
749         test-515.cs).
750
751         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
752         This is still "wrong", but anything better would probably need a
753         multi-pass algorithm.
754         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
755         usage vector.  Force current usage vector to be reachable, to
756         optimistically signify backward jumps.
757         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
758         detected.
759         (FlowBranchingLabeled.Merge): New.  If no backward jump was
760         detected, return the original salted-away usage vector instead,
761         updated with appropriate changes.  Print unreachable warning if
762         necessary.
763         * statement.cs (Block.Resolve): Don't print unreachable warning on
764         a labeled statement.
765
766 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
767
768         * driver.cs: Pass filename without path to AssemblyBuilder's
769         AddResourceFile. Fixes bug #78407.
770
771 2006-05-17  Raja R Harinath  <rharinath@novell.com>
772
773         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
774         * flowanalysis.cs (FlowBranchingLabeled): ... here.
775         (FlowBranching.MergeChild): Overwrite
776         reachability information from Labeled branchings too.
777
778 2006-05-16  Raja R Harinath  <rharinath@novell.com>
779
780         * statement.cs (Goto.Resolve): Merge jump origins here ...
781         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
782
783         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
784         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
785         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
786         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
787         here, ...
788         * statement.cs (Goto.Resolve): ... not here.
789         (Goto.Emit): Remove CS1632 check.
790
791 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
792
793         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
794         error message.
795
796 2006-05-11  Raja R Harinath  <rharinath@novell.com>
797
798         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
799         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
800         (FlowBranchingException.Label): Likewise.
801
802         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
803         given value.
804         (MyBitVector.Or): Use it to avoid losing information (Count).
805         (FlowBranching.MergeOrigins): Likewise.
806
807         * flowanalysis.cs (UsageVector.IsDirty): Remove.
808         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
809         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
810         (UsageVector.ToString): Simplify.
811         (UsageVector.MergeSiblings): Move here from ...
812         (FlowBranching.Merge): ... here.
813         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
814         not a MyBitVector.
815
816 2006-05-10  Raja R Harinath  <rharinath@novell.com>
817
818         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
819         null bitvector is treated as all-true.
820
821         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
822         (MyBitVector): Rationalize invariants.  'vector != null' implies
823         that we have our own copy of the bitvector.  Otherwise,
824         'InheritsFrom == null' implies all inherited bits are true.
825
826 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
827
828         * statement.cs (LocalInfo): Add IsConstant.
829         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
830         local variable for constants.
831
832 2006-05-09  Raja R Harinath  <rharinath@novell.com>
833
834         * flowanalysis.cs (MyBitVector.Empty): New.
835         (MyBitVector): Don't allow InheritedFrom to be null.
836         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
837         (UsageVector, FlowBranching): Update to changes.
838
839         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
840         recursion.  The 'Parent == null' condition isn't sufficient for
841         anonymous methods.
842         (FlowBranching.AddBreakOrigin): Likewise.
843         (FlowBranching.AddContinueOrigin): Likewise.
844         (FlowBranching.AddReturnOrigin): Likewise.
845         (FlowBranching.StealFinallyClauses): Likewise.
846         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
847         (FlowBranching.CheckOutParameters): Likewise.
848         (FlowBranchingToplevel): Terminate all the above recursions here.
849         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
850         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
851
852         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
853         toplevel block.
854         (FlowBranchingToplevel): New.  Empty for now.
855         (FlowBranching.MergeTopBlock): Update.
856         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
857         branching for the anonymous delegate.
858         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
859
860         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
861         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
862         information at the start of the merge.  Reorganize.
863
864 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
865
866         * class.cs (MethodData.Define): Method cannot implement interface accessor.
867
868 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
869
870         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
871         to newly introduced ctor.
872
873         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
874         message to one place.
875         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
876         global namespace.
877
878 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
879
880         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
881
882         * ecore.cs (Expression.ResolveAsConstant): Updated.
883
884         * statement.cs (ResolveMeta): Updated.
885
886 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
887
888         * cs-parser.jay: __arglist cannot be used in initializer.
889
890 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
891
892         A fix for #77879
893         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
894         private types.
895
896 2006-05-05  Raja R Harinath  <rharinath@novell.com>
897
898         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
899         (LabeledStatement): Add 'name' parameter.
900         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
901         (Block.AddLabel): Update to changes.
902         * cs-parser.jay (labeled_statement): Likewise.
903
904         * flowanalysis.cs (BranchingType.Labeled): New.
905         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
906         (FlowBranchingLabeled): New.  Does nothing for now, but will
907         eventually handle 'goto' flows.
908         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
909         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
910         that's terminated ...
911         (Block.Resolve): ... here.
912
913         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
914         (UsageVector.MergeFinallyOrigins): Likewise.
915         (FlowBranching.InTryOrCatch): Likewise.
916         (FlowBranching.AddFinallyVector): Likewise.
917         (FlowBranchingException): Update to changes.
918
919         Fix #78290
920         * statement.cs (Return.Resolve): Move error checking to ...
921         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
922         (FlowBranchingException): Handle return origins like break and
923         continue origins.
924         (FlowBranching.UsageVector.CheckOutParameters): Remove.
925
926 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
927
928         A fix for #76122
929         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
930         filter.
931
932 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
933
934         A fix for #77543
935         * class.cs (MethodData.Define): Do public accessor check only when method
936         implements an interface.
937
938 2006-05-04  Raja R Harinath  <rharinath@novell.com>
939
940         Remove special handling of 'break'
941         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
942         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
943         (UsageVector.Break): Remove.
944         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
945         reachability.
946         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
947
948         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
949         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
950
951 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
952
953         A fix for #75726
954         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
955         be the interface member.
956
957 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
958
959         A fix for #60069
960         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
961         for emitting small (int) values.
962
963 2006-05-03  Raja R Harinath  <rharinath@novell.com>
964
965         Fix #59427
966         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
967         control-flow passes through the 'finally' after merging-in all the
968         control-flows from 'try' and the 'catch' clauses.
969
970         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
971         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
972         always true at the only non-recursive entry point.
973         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
974         FlowBranchingBreakable.
975         (FlowBranchingLoop): Remove.
976         * statement.cs (Return.DoResolve): Update to changes.
977
978         Fix #76471, #76665
979         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
980         (FlowBranching.CreateBranching): Handle it: create a
981         FlowBranchingContinuable.
982         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
983         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
984         except that it handles the 'continue' command.
985         (FlowBranching.UsageVector.MergeOrigins): Rename from
986         MergeBreakOrigins.
987         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
988         except that it overrides AddContinueOrigin.
989         (FlowBranchingException): Override AddContinueOrigin, similar to
990         AddBreakOrigin.
991         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
992         Create a new branching around the embedded statement.
993         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
994         control flow after the embedded statement.
995         (Continue.Resolve): Move all error checking to AddContinueOrigin.
996
997         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
998         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
999         FlowBranchingBreakable.
1000         (FlowBranchingSwitch): Remove.
1001
1002         Fix test-503.cs
1003         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
1004         error reporting to ...
1005         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
1006         Rename from 'AddBreakVector'.  Add new location argument.  Return
1007         a bool indicating whether the 'break' crosses an unwind-protect.
1008         (FlowBranchingException.AddBreakOrigin): Add.
1009         (FlowBranchingException.Merge): Propagate 'break's to surrounding
1010         flowbranching after updating with the effects of the 'finally'
1011         clause.
1012         (FlowBranchingBreakable): New common base class for
1013         FlowBranchingLoop and FlowBranchingSwitch.
1014
1015         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
1016         embedded statement.
1017         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
1018
1019 2006-05-02  Raja R Harinath  <rharinath@novell.com>
1020
1021         * statement.cs (Do.Resolve): If the loop is infinite, set the
1022         barrier.
1023         (While.Resolve, For.Resolve): Set a barrier after the embedded
1024         statement.  There's no direct control flow that goes from the end
1025         of the embedded statement to the end of the loop.
1026         * flowanalysis.cs (FlowBranching.Infinite): Remove.
1027         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
1028         above ensure that the reachability is correctly computed.
1029
1030         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
1031         (UsageVector.MergeBreakOrigins): If the current path is
1032         unreachable, treat it as if all parameters/locals are initialized.
1033         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
1034         infinite loops before merging-in break origins.
1035
1036         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
1037         (Reachability.Reachable): Split part into ...
1038         (Reachability.Unreachable): ... this.  Simplify.
1039         (Reachability.IsUnreachable): Use 'Unreachable' instead.
1040
1041         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
1042         (Reachability.SetThrowsSometimes): Likewise.
1043         (FlowBranchingBlock.MergeTopBlock): Don't compare against
1044         TriState.Always, use corresponding property.
1045         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
1046         (Block.Resolve): Likewise.  Remove some redundant checks.
1047
1048 2006-05-02  Raja R Harinath  <harinath@gmail.com>
1049
1050         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
1051         (Reachability.Meet): Don't bother checking AlwaysThrows --
1052         barrier is always set.
1053         (FlowBranchingBlock.Merge): Likewise.
1054
1055 2006-05-01  Rafael Teixeira <rafaelteixeirabr@hotmail.com>
1056
1057         * attribute.cs: fixed_buffer_cache is declared only if NET_2_0 is
1058         defined, so it's references should also compile only for NET_2_0
1059         (as occurs in mcs version)
1060
1061 2006-05-01  Raja R Harinath  <harinath@gmail.com>
1062
1063         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
1064         checks for unreachable.
1065
1066 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
1067
1068         A fix for #77980
1069         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
1070
1071         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
1072         whether field is really assigned.
1073
1074 2006-04-30  Raja R Harinath  <harinath@gmail.com>
1075
1076         * flowanalysis.cs (Reachability): Make 4-argument constructor
1077         private.
1078         (Reachability.Meet): Rename from 'And'.  Remove static variant.
1079         (Reachability.Always): Rename from the highly misleading
1080         'Reachability.Never'.
1081         (FlowBranching.Merge): Update to changes.  Mark an impossible
1082         situation with a 'throw'.
1083         (*): Update to changes.
1084
1085 2006-04-29  Raja R Harinath  <harinath@gmail.com>
1086
1087         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
1088         Remove 'Undefined'.
1089         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
1090         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
1091         (*): Update to changes.
1092         * statement.cs: Update to changes.
1093
1094 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
1095
1096         A fix for #78049
1097         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
1098
1099 2006-04-28  Raja R Harinath  <harinath@gmail.com>
1100
1101         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
1102         dummy UsageVector.
1103
1104         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
1105         argument to two arguments: an usage-vector and a bool.  Move call
1106         to FlowBranching.Merge () ...
1107         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
1108
1109         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
1110         handling of loop and switch reachability to ...
1111         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
1112
1113 2006-04-27  Raja R Harinath  <harinath@gmail.com>
1114
1115         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
1116         handling to FlowBranchingLoop.InLoop.
1117         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
1118
1119 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
1120
1121         A fix for #78115
1122         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
1123         anonymous method is allowed from AnonymousContainer here.
1124
1125         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
1126
1127 2006-04-24  Raja R Harinath  <rharinath@novell.com>
1128
1129         Fix #78156
1130         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
1131
1132 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
1133
1134         A fix for #49011.
1135         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
1136         (DoubleConstant.Reduce): Ditto.
1137
1138 2006-04-23  Raja R Harinath  <rharinath@novell.com>
1139
1140         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
1141         Remove 'lvalue_right_side' argument.  Move parts to ...
1142         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
1143         (LocalVariable.DoResolveLValue): ... these.
1144
1145 2006-04-21  Raja R Harinath  <rharinath@novell.com>
1146
1147         Fix cs1655.cs
1148         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
1149         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
1150         (LocalVariableReference.DoResolveBase): Use it to implement new
1151         CS1655 check.
1152         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
1153         (Argument.Resolve): Simplify.  Move CS1510 check ...
1154         * ecore.cs (Expression.ResolveLValue): ... here.
1155         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
1156         (PropertyExpr.DoResolveLValue): Likewise.
1157         (FieldExpr.Report_AssignToReadonly): Likewise.
1158         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
1159         LValueMemberAccess or LValueMemberOutAccess on instance depending
1160         on it.
1161         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
1162         DoResolve as appropriate.
1163
1164 2006-04-20  Raja R Harinath  <rharinath@novell.com>
1165
1166         Fix #75800
1167         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
1168         implicit conversions on 'out' and 'ref' arguments.
1169
1170         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
1171         improve clarity.  Remove dead code.
1172
1173         Fix #66031
1174         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
1175         (Catch.Resolve): Resolve VarBlock if it exists.
1176
1177 2006-04-19  Miguel de Icaza  <miguel@novell.com>
1178
1179         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
1180         twice, this was some residual code, the enumerator was emitted
1181         properly in the two branche of if later.
1182
1183         Fixes #78031
1184         
1185         Thanks to Martin for finding the source of the problem
1186         
1187 2006-04-19  Raja R Harinath  <rharinath@novell.com>
1188
1189         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
1190         cast is never an lvalue.
1191         (Cast.DoResolve, Cast.ResolveRest): Combine.
1192         (Argument.Emit): Simplify slightly.  Move 'Expr is
1193         IMemoryLocation' check ...
1194         (Argument.Resolve): ... here.
1195         (Argument.Error_LValueRequired): Remove.  Inline into only user.
1196
1197         Simplifications.  Fix cs0191-2.cs
1198         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
1199         CS1649 and CS1651 to ...
1200         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
1201         the actual selection of the error code and message to a lookup
1202         table.  Add a dummy return value to simplify callsites.
1203         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
1204         readonly fields of other instances of the same type.  Move CS0197
1205         warning from ...
1206         * expression.cs (Argument.Resolve): ... here.  Simplify code.
1207         Ensure that ec.InRefOutArgumentResolving is only set during LValue
1208         resolution of an out or ref argument.  The code simplification
1209         above uses this invariant.
1210
1211 2006-04-18  Raja R Harinath  <rharinath@novell.com>
1212
1213         Possibly fix #77752.  Fix cs1690-[4-7].cs.
1214         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
1215         CheckMarshallByRefAccess.  Drop parameter.
1216         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
1217         warning.
1218         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
1219         InstanceExpression.
1220         * report.cs (AllWarnings): Add CS1690.
1221         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
1222         for ref access too.
1223         (LocalVariableReference.DoResolveBase): Update.
1224
1225 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1226
1227         * class.cs (MethodOrOperator): Moved common parts from method class.
1228         detect obsolete attributes.
1229         (Method.Define): Simplified as it reuses code from base.
1230         (Constructor.ValidAttributeTargets): Fixed issue found during
1231         refactoring.
1232         (Destructor.ValidAttributeTargets): Fixed issue found during
1233         refactoring.
1234         (Operator): Finished refactoring set off by #78020. Operator class is now
1235         ordinary method class.
1236
1237         * anonymous.cs: Updated.
1238
1239 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1240
1241         * class.cs (Constructor.Emit): Don't emit the attributes twice.
1242
1243 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1244
1245         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
1246         detect obsolete attributes.
1247         (Method.CreateEmitContext): Moved to MethodOrOperator.
1248
1249 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
1250
1251         A fix for #78048.
1252         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
1253         customized exception to make crash detection easier.
1254         (MethodOrOperator): Started to work on new base class for methods and
1255         operators.
1256         (Method): Derives from MethodOrOperator.
1257         (Constructor.Emit): Emits its own attributes.
1258         (AbstractPropertyEventMethod.Emit): Ditto.
1259         (Operator): Derives from MethodOrOperator, will refactor fully in extra
1260         patch.
1261         (Operator.Emit): It's temporary more tricky than should be.
1262         
1263         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
1264
1265         * report.cs (InternalErrorException): Add ctor with inner exception.
1266
1267 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
1268
1269         A fix for #76744.
1270         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
1271         only not visible.
1272
1273 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
1274
1275         A fix for #77916.
1276         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
1277         array.
1278
1279 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1280
1281         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
1282         attribute is present and Guid not.
1283         (Interface.ApplyAttributeBuilder): Ditto.
1284
1285         * attribute.cs: Add error message.
1286
1287 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
1288
1289         A fix for #78020.
1290
1291         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
1292         sources (it's composite) so hold them in extra array as they are used in
1293         Emit phase only. It worked in the previous versions by mistake.
1294         (Attribute.Emit): Emit attribute for more owners when exist.
1295
1296         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
1297         it has now different behaviour.
1298
1299 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
1300
1301         * constant.cs (Constant.IsDefaultInitializer): New method.
1302
1303         * class.cs: Updated.
1304
1305         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
1306         re-initialize default values. It saves KBs almost for every assembly.
1307         Thanks Zoltan for the idea.
1308         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
1309         (ArrayCreation.DoResolve): Resolve only once.
1310         (ArrayCreation.Emit): Emit static initializer only when it is faster.
1311         (ArrayCreation.GetAttributableValue): Cope with optimized values.
1312
1313 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
1314
1315         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
1316         From #77961.
1317
1318 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1319
1320         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
1321         in an embedded statement too.
1322
1323 2006-04-01  Raja R Harinath  <rharinath@novell.com>
1324
1325         Fix #77929
1326         * typemanager.cs (IsNestedChildOf): Drop generic arguments before
1327         testing.
1328
1329         Fix #77958
1330         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
1331
1332         Fix #77962
1333         * report.cs (SymbolRelatedToPreviousError): Drop generic type
1334         arguments before checking whether a type is reflected or not.
1335
1336         Fix #77954
1337         * expression.cs (Invocation.IsApplicable): Ensure a generic method
1338         definition doesn't take part in overload resolution.
1339         (Invocation.IsParamsMethodApplicable): Likewise.
1340         (Invocation.OverloadResolve): When replacing a reflected override
1341         method with its base definition, ensure that type arguments are
1342         applied.
1343
1344 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
1345
1346         A fix for #77966.
1347
1348         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
1349         was not specified.
1350
1351         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
1352
1353 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
1354
1355         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
1356         phase.
1357
1358         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
1359         LocalTemporary change.
1360
1361         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
1362         TypeContainer.
1363         (ClassOrStruct.DefineFieldInitializers): Implemented static field
1364         initializers optimization.
1365         (ClassOrStruct.TypeAttr): Moved from modifiers.
1366         (Constructor.CheckBase): Don't crash when static ctor has parameters.
1367         (FieldBase.ResolveInitializer): Resolves initializer.
1368         (FieldBase.HasDefaultInitializer): New property.
1369
1370         * cs-parser.jay: Removed message.
1371
1372         * expression.cs (CompilerGeneratedThis): New specialization.
1373
1374         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
1375
1376 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
1377
1378         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
1379
1380 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1381
1382         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
1383         be now EnumConstants only.
1384
1385 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
1386
1387         * attribute.cs, driver.cs: Reset more caches.
1388
1389 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1390
1391         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
1392
1393 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1394
1395         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
1396         for easier reuse. Updated all overrides.
1397         (IntegralConstant): New base class for all integral constants.
1398         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
1399         of the constant range, report custom error.
1400         (UIntConstant.Reduce): Fixed uint conversion.
1401
1402         * ecore.cs, literal.cs: Reduce updates.
1403
1404 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1405
1406         A fix for #75813.
1407
1408         * class.cs (Constructor.Define): Removed extra if for default ctors.
1409         A patch from Atsushi Enomoto.
1410
1411 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1412
1413         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
1414         GetAttributableValue.
1415
1416         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
1417         when required.
1418
1419         * convert.cs (ImplicitConversionRequired): Error message moved to
1420         DoubleLiteral.
1421
1422         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
1423         automatic implicit conversion of an output value.
1424         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
1425
1426         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
1427         conversion.
1428         (TypeOf.GetAttributableValue): Add extra handling for object type.
1429
1430         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
1431         special error message.
1432
1433 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
1434
1435         * class.cs (Constructor.Emit): Don't crash when struct ctor is
1436         InternalCall.
1437         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
1438         compatible with MS runtime.
1439
1440 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
1441
1442         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
1443         attribute arguments here.
1444
1445         * class.cs (Indexer.Define): The check was moved to attribute class.
1446
1447 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1448
1449         * expression.cs (StringConcat.Append): Reverted back to no warning state.
1450
1451 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
1452
1453         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
1454
1455         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
1456         the blocks too.
1457
1458 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
1459
1460         * doc-bootstrap.cs : fix build.
1461
1462 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1463
1464         * expression.cs (StringConcat.Append): Issue a warning when empty string
1465         is going to append.
1466
1467 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
1468
1469         * assign.cs (CompoundAssign.ResolveSource): Removed.
1470
1471         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
1472         clean up.
1473
1474         * class.cs (TypeContainer.FindMethods): Removed.
1475         (TypeContainer.CheckMemberUsage): Made static.
1476
1477         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
1478
1479         * constant.cs (CheckRange): Removed unused type argument.
1480         (CheckUnsigned): Removed unused type argument.
1481
1482         * cs-parser.jay: Updated after MemberAccess clean up.
1483         Uses Length for empty string test.
1484
1485         * cs-tokenizer.cs: Uses Length for empty string test.
1486         (IsCastToken): Made static.
1487         (is_hex): Made static.
1488         (real_type_suffix): Made static.
1489
1490         * decl.cs (SetupCache): Made static.
1491         (OnGenerateDocComment): Removed unused ds argument.
1492
1493         * delegate.cs (VerifyDelegate): Removed unused argument.
1494
1495         * doc.cs: Uses Length for empty string test.
1496
1497         * driver.cs: Uses Length for empty string test.
1498
1499         * enum.cs (IsValidEnumType): Made static
1500
1501         * expression.cs (EnumLiftUp): Removed unused argument.
1502         (ResolveMethodGroup): Ditto.
1503         (BetterConversion): Ditto.
1504         (GetVarargsTypes): Ditto.
1505         (UpdateIndices): Ditto.
1506         (ValidateInitializers): Ditto.
1507         (MemberAccess.ctor): Ditto.
1508         (GetIndexersForType): Ditto.
1509
1510         * flowanalysis.cs: (MergeFinally): Removed unused argument.
1511
1512         * iterators.cs: Updated after MemberAccess clean up.
1513
1514         * location.cs: Uses Length for empty string test.
1515
1516         * namespace.cs: Uses Length for empty string test.
1517
1518          * report.cs (CheckWarningCode): Made static.
1519
1520         * statement.cs (LabeledStatement): Removed unused argument.
1521
1522         * typemanager.cs (FilterNone): Removed.
1523
1524 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1525
1526         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
1527         obsolete.
1528
1529         * class.cs: Updated.
1530
1531 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1532
1533         * cs-parser.jay.cs: __arglist is not allowed for delegates.
1534
1535 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1536
1537         A fix for #77816.
1538
1539         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
1540         host container.
1541         (AnonymousMethod.ImplicitStandardConversionExists): New method.
1542         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
1543         Add more error reporting; Fixed issue with params.
1544
1545         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
1546
1547         * cs-parser.jay: AnonymousMethod requires host container.
1548
1549         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
1550
1551 2006-03-18  Raja R Harinath  <harinath@gmail.com>
1552
1553         * class.cs: Change 'TypeContainer ds' constructor argument to
1554         'DeclSpace parent'.  Some classes were missed below due to
1555         different naming convention.
1556
1557         * class.cs (MemberCore.Parent): Delete.  This makes the
1558         ParentContainer changes below enforceable by the compiler.
1559
1560         Treat pointers to enclosing declaration space as 'DeclSpace', not
1561         'TypeContainer'.
1562         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
1563         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
1564
1565         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
1566         of TypeContainer.
1567         (Block.AddThisVariable): Likewise.
1568         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
1569         (AbstractPropertyEventMethod.Emit): Likewise.
1570         (AbstractPropertyEventMethod.EmitMethod): Likewise.
1571         (GetMethod.Define, SetMethod.Define): Likewise.
1572         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
1573         (DelegateMethod.EmitMethod): Likewise.
1574
1575         Fix regression test-partial-13.cs.
1576         Rationalize use of PartialContainer.  Ensure that the partial
1577         class semantics can be tied to type-correctness, i.e., any
1578         violation will cause a compile error.
1579         * class.cs, const.cs: Access all fields that belong to class
1580         TypeContainer via ParentContainer.  Arguments of EmitContexts and
1581         Resolve()-like functions still use 'Parent'.
1582
1583         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
1584         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
1585         (PropertyMethod.CheckModifiers): Remove unused argument.
1586         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
1587         DeclSpace.
1588
1589 2006-03-28  Raja R Harinath  <rharinath@novell.com>
1590
1591         * decl.cs (DeclSpace.LookupGeneric): Update to changes.
1592
1593 2006-03-17  Raja R Harinath  <harinath@gmail.com>
1594
1595         Make semantics of PartialContainer simpler.
1596         * decl.cs (DeclSpace.IsPartial): Remove.
1597         * class.cs (TypeContainer.IsPartial): Likewise.
1598         (TypeContainer..ctor): Set PartialContainer to point to self.
1599         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
1600         (TypeContainer.FindNestedType): Likewise.
1601         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
1602
1603 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
1604
1605         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
1606
1607 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1608
1609         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
1610         classes.
1611
1612 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
1613
1614         * class.cs (Operator.Define): An error for base conversion was not
1615         reported correctly.
1616
1617 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
1618
1619         A fix for #77593, #77574.
1620
1621         * class.cs (MethodCore.CheckBase): Another if for operator.
1622
1623 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
1624
1625         A fix for #77822.
1626
1627         * expression.cs (VerifyArgumentsCompat): Reverted to double error
1628         reporting, it's more tricky than I thought.
1629
1630 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
1631
1632         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
1633         were not resolved
1634
1635         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
1636         (DelegateCreation.ImplicitStandardConversionExists): New method for just
1637         conversion test.
1638         
1639         * ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
1640         not needed.
1641
1642 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
1643
1644         A fix for #77353.
1645
1646         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
1647         (Event.Define): ditto
1648         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
1649
1650         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
1651         Removed redundant code and set NewSlot for Invoke method too.
1652
1653         * parameter.cs (Parameters.ctor): Add custom, type ctor.
1654         (Parameters.MergeGenerated): New method. Use this method when you merge
1655         compiler generated argument with user arguments.
1656
1657 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
1658
1659         * attribute.cs (ResolveAsTypeTerminal): Removed.
1660
1661         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
1662         specialization for predefined types; 30% speed up.
1663         Finally placed obsolete check to right place.
1664         (Expression.ResolveType): Removed.
1665
1666         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
1667         Updated after ResolveType was removed.
1668
1669         * expression.cs (Cast.ctor): Check void cast.
1670         (Binary.ResolveAsTypeTerminal): Is never type.
1671         (Conditional.ResolveAsTypeTerminal): Is never type.
1672
1673         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
1674
1675 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
1676
1677         * rootcontext.cs (ResolveCore): Removed System.INullableValue.
1678
1679 2006-03-23  Martin Baulig  <martin@ximian.com>
1680
1681         * expression.cs (Is.DoResolve, As.DoResolve): Perform a dynamic
1682         type check if either of the types is an open generic type.
1683
1684 2006-03-23  Martin Baulig  <martin@ximian.com>
1685
1686         * convert.cs
1687         (Convert.ExplicitTypeParameterConversion): New method; implement
1688         explicit type parameter conversions.
1689
1690 2006-03-23  Martin Baulig  <martin@ximian.com>
1691
1692         * convert.cs (Convert.ImplicitTypeParameterConversion): Do not
1693         blindly allow all conversions if we do not have any constraints.
1694
1695 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
1696
1697         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
1698         these two separated members to simplify the code.
1699         (Attribute.Resolve): Refactored to use new fields and methods.
1700         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
1701         implemented obsolete attribute checking.
1702         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
1703         implemented obsolete checking again. It look line never ending quest ;-)
1704         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
1705
1706         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
1707
1708         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
1709
1710         *class.cs (Property.Define): Add RegisterProperty call.
1711
1712         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
1713         argument groups (only 2).
1714
1715         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
1716         encoding expression to arguments.
1717         (Expression.ExprClassToResolveFlags): Just turned to property.
1718
1719         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
1720         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
1721         optimized as well as implemented support for zero-length attributes.
1722
1723         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
1724         Add caching of PropertyInfo's.
1725
1726 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1727
1728         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
1729         error multiple times.
1730
1731 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
1732
1733         New partial class implementation.
1734         A fix for #77027, #77029, #77403
1735
1736         * attribute.cs (Attributable): Made attributes protected.
1737
1738         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
1739         the replacements of ClassPart and PartialContainer.
1740         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
1741         (TypeContainer.AddInterface): Ditto.
1742         (TypeContainer.AddPartial): The main method for partial classes. It checks
1743         for errors and merges ModFlags and attributes. At the end class is added to
1744         partial_parts list.
1745         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
1746         required here.
1747         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
1748         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
1749         from the rest of partial classes.
1750         (TypeContainer.GetClassBases): Simplified.
1751         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
1752         DefineType.
1753         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
1754         (TypeContainer.HasExplicitLayout): Uses Flags now.
1755         (PartialContainer): Removed.
1756         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
1757         (StaticClass): Was merged with Class.
1758         (Class.GetClassBases): class and static class bases are verified here.
1759         (Class.TypeAttr): Added static attributes when class is static.
1760         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
1761         (MemberBase): In some cases we need to call parent container for partial
1762         class. It should be eliminated but it's not easy now.
1763
1764         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
1765
1766         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
1767         partial classed to accumulate class comments.
1768         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
1769
1770         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
1771
1772         * driver.cs (MainDriver): Tree.GetDecl was removed.
1773
1774         * modifiers.cs (Modifiers): Add partial modifier.
1775
1776         * tree.cs (Tree.decl): Removed.
1777         (RootTypes): Started to use this class more often for root types
1778         specializations.
1779
1780 2006-03-23  Raja R Harinath  <rharinath@novell.com>
1781
1782         * generic.cs (TypeParameter.UpdateConstraints): Update
1783         'constraints' if null.
1784
1785 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1786
1787         A fix for #77615
1788
1789         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
1790         external interface does not have an attribute.
1791
1792 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
1793
1794         Another prerequisites for new partial classs implementation.
1795         
1796         * attribute.cs (Attribute.Equal): Implemented.
1797         (Attribute.Emit): Changed as attributes can be applied more than twice.
1798         (Attributes.Emit): Check for duplicate attributes here.
1799
1800         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
1801         as a parameter, clean-up.
1802
1803 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1804
1805         A fix for #77485
1806
1807         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
1808         contains obsolete attribute check which can in some cases look for base
1809         type of current class which is not initialized yet.
1810         (TypeContainer.BaseType): Replacement of ptype.
1811
1812         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
1813
1814 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
1815
1816         First of prerequisites for new partial classs implemention.
1817         
1818         * attribute.cs (Attributable): Extended by ResolveContext;
1819         Attributes finally have correct context for resolving in all cases.
1820         (AttachTo): Attribute owner is assigned here.
1821
1822         * codegen.cs (IResolveContext): Introduce new interface to hold
1823         all information needed in resolving phase.
1824         (EmitContext): Implements IResolveContext; more clean-up needed here.
1825         
1826         * decl.cs (MemberCore): Implemented IResolveContext.
1827
1828         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
1829         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
1830         parameter.cs, statement.cs, tree.cs, typemanager.cs:
1831         Refactored to use new IResolveContext instead of EmitContext; cleanup
1832
1833 2006-03-22  Raja R Harinath  <rharinath@novell.com>
1834
1835         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
1836         mcs to keep code differences small.
1837         * attribute.cs (Attribute.GetParameterDefaultValue): New.
1838         * typemanager.cs (parameter_default_value_attribute_type): New.
1839         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
1840         CS1908 check.
1841
1842 2006-03-22  Martin Baulig  <martin@ximian.com>
1843
1844         * generic.cs
1845         (Nullable.NullableLiteral): Derive from `NullLiteral'.
1846
1847         * convert.cs
1848         (Convert.TypeParameter_to_Null): Create a `Nullable.NullableLiteral'
1849         instead of the normal `NullLiteral'.
1850
1851 2006-03-21  Martin Baulig  <martin@ximian.com>
1852
1853         Fix #77583.
1854         * generic.cs (TypeManager.InferType): If `pt' is a generic
1855         parameter, don't check whether `pt == at'.
1856
1857 2006-03-20  Raja R Harinath  <rharinath@novell.com>
1858
1859         Fix #77852
1860         * generic.cs (Constraints.Resolve): Change argument to IResolveContext.
1861         (TypeParameter.Resolve): Update to change.
1862         (ConstraintChecker.CheckConstraints): Resolve type-argument
1863         constraints before use.
1864
1865 2006-03-16  Martin Baulig  <martin@ximian.com>
1866
1867         * generic.cs
1868         (ConstraintChecker.HasDefaultConstructor): If we're a TypeBuilder
1869         and don't have any instance constructors, also lookup in the base class.
1870         (TypeManager.IsNullableValueType): New public method.
1871
1872         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Clear the
1873         `BindingFlags.DeclaredOnly' flag and set `used_cache'.
1874         (TypeManager.TryGetBaseDefinition): Use DropGenericMethodArguments().
1875
1876         * expression.cs (Unary.DoResolve): Use TypeManager.IsNullableValueType()
1877         instead of just TypeManager.IsNullableType() to determine whether
1878         a lifted operator exists.
1879         (UnaryMutator.DoResolve): Likewise.
1880         (Conditional.DoResolve): Likewise.
1881         (Binary.DoResolve): A lifted operator only exists if both operands
1882         are valuetypes and at least one of them is a nullable type.
1883
1884 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
1885
1886         * iterator.cs : yield break is allowed in try statement which has
1887           catch clauses. Fixed bug #77767.
1888
1889 2006-03-12  Martin Baulig  <martin@ximian.com>
1890
1891         * typemanager.cs (TypeManager.ArrayContainsMethod): Use a new
1892         private IsSignatureEqual() to compare types; see the comment in
1893         that method; fixes #77674.
1894
1895 2006-03-10  Raja R Harinath  <rharinath@novell.com>
1896
1897         * ecore.cs (Expression.ResolveAsTypeStep): Remove 1-argument wrapper.
1898         (Expression.ResolveAsTypeTerminal): Likewise.
1899         * class.cs, decl.cs, delegate.cs, ecore.cs: Update to changes.
1900         * expression.cs, generic.cs, iterators.cs: Likewise.
1901         * parameter.cs, statement.cs, typemanager.cs: Likewise.
1902
1903 2006-03-09  Martin Baulig  <martin@ximian.com>
1904
1905         * generic.cs (ConstraintChecker.HasDefaultConstructor): Call
1906         TypeManager.DropGenericTypeArguments() on the `atype'; fixes #77548.
1907
1908 2006-03-09  Martin Baulig  <martin@ximian.com>
1909
1910         * ecore.cs (FieldExpr.AddressOf): Don't emit the instance if the
1911         `prepared' flag is set.
1912
1913         * generic.cs (LiftedBinaryOperator): Don't allow `||' or `&&' anymore.
1914         (LiftedBinaryOperator, LiftedUnaryMutator): Fix a few nullable
1915         issues; see gtest-254.cs.
1916
1917 2006-03-07  Martin Baulig  <martin@ximian.com>
1918
1919         * generic.cs (TypeManager.InferType): Allow infering
1920         `IEnumerable<T>' with an array of T; see gtest-251.cs.
1921
1922 2006-03-06  Martin Baulig  <martin@ximian.com>
1923
1924         * generic.cs
1925         (TypeManager.InferType): Fix gtest-250.cs.
1926
1927         * typemanager.cs
1928         (TypeManager.IsSubclassOf): Also check the base class.
1929
1930         * expression.cs
1931         (Invocation.IsAncestralType): Use TypeManager.IsSubclassOf();
1932         fixes gtest-249.cs.
1933
1934 2006-03-01  Raja R Harinath  <rharinath@novell.com>
1935
1936         Fix #77679.
1937         * expression.cs (ParameterReference.DoResolveBase): Change return
1938         type to bool.
1939         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
1940         Update.
1941
1942         Fix #77628.
1943         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
1944
1945         Fix #77642.
1946         * typemanager.cs (GetFullNameSignature): Don't nullref on
1947         protected accessors.
1948
1949 2006-02-16  Martin Baulig  <martin@ximian.com>
1950
1951         * generic.cs
1952         (TypeManager.GetGenericFieldDefinition): New public method; use it
1953         instead of the `FieldInfo.Mono_GetGenericFieldDefinition()' icall.
1954
1955 2006-02-14  Martin Baulig  <martin@ximian.com>
1956
1957         * *.cs: Use `Type.IsGenericType' instead of `Type.IsGenericInstance'.
1958
1959 2006-02-14  Martin Baulig  <martin@ximian.com>
1960
1961         * generic.cs
1962         (TypeManager.DropGenericMethodArguments): New public method; don't
1963         use GetGenericMethodDefinition() on something which is not a
1964         generic method.
1965
1966 2006-02-14  Martin Baulig  <martin@ximian.com>
1967
1968         * generic.cs
1969         (ConstraintChecker.CheckConstraints): If a type parameter has the
1970         `struct' constraint, the type must be a non-nullable valuetype.
1971
1972 2006-02-10  Martin Baulig  <martin@ximian.com>
1973
1974         * typemanager.cs
1975         (TypeManager.IsOverride): Make this work for instantiated methods
1976         in a generic class; fixes #77509.
1977         (TypeManager.ExpandInterfaces): Use TypeManager.GetInterfaces()
1978         rather than calling it directly; fixes #77488.  
1979
1980 2006-02-08  Martin Baulig  <martin@ximian.com>
1981
1982         * generic.cs (ConstraintChecker.CheckConstraints): Move the error
1983         reporting into CheckConstraint() so we can use the correctly
1984         instantiated type.
1985
1986 2006-02-08  Martin Baulig  <martin@ximian.com>
1987
1988         * expression.cs (BaseAccess): Add support for generic methods.
1989
1990         * ecore.cs (MethodGroupExpr.ResolveGeneric): Propagate `IsBase' to
1991         the new MethodGroupExpr.
1992
1993 2006-02-07  Martin Baulig  <martin@ximian.com>
1994
1995         * generic.cs (ConstraintChecker.CheckConstraints): Interfaces are
1996         also reference types; fixes #77483.
1997
1998 2006-02-07  Martin Baulig  <martin@ximian.com>
1999
2000         * generic.cs
2001         (TypeManager.IsGenericMethod): We now return whether something is
2002         an instantiated generic method (and not a generic method def).
2003         (TypeManager.IsGenericMethodDefinition): New public method.
2004
2005         * typemanager.cs
2006         (TypeManager.CSharpSignature): Only include type arguments for
2007         "real" generic methods, not for any instantiated method.
2008         (TypeManager.GetMethodName): Likewise, but also allow generic
2009         method definitions here.
2010
2011 2006-02-06  Miguel de Icaza  <miguel@novell.com>
2012
2013         * codegen.cs (EmitScopeInitFromBlock): check here the
2014         capture_context, there is no need to make two calls to the
2015         EmitContext. 
2016
2017         * anonymous.cs: Add some debugging messages that might help me
2018         track other instances of this problem in the future (the
2019         regression of test 467).
2020
2021         * cs-parser.jay: track the variable block, as we need to initalize
2022         any captured variables declared in this block for the "catch"
2023         portion of the "Try" statement.
2024
2025         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
2026         scope initialization for captured variables. 
2027
2028         Also, move the emit for the variables after the block location has
2029         been marked.
2030
2031 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
2032
2033        * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
2034         
2035 2006-02-06  Martin Baulig  <martin@ximian.com>
2036
2037         * class.cs (TypeContainer.DefineType): If we're a struct, pass
2038         `TypeManager.value_type' as parent type to
2039         ModuleBuilder.DefineType().  Fixes #77358.      
2040
2041 2006-02-02  Miguel de Icaza  <miguel@novell.com>
2042
2043         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
2044         commit yesterday, the initialization for the roots is necessary.
2045         What is not necessary is the scope activation.
2046
2047 2006-02-02  Raja R Harinath  <rharinath@novell.com>
2048
2049         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
2050         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
2051         CS0206 checks.
2052         (Argument.Resolve): Remove CS0206 checks.
2053
2054 2006-02-01  Miguel de Icaza  <miguel@novell.com>
2055
2056         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
2057         scopes for all the roots, the scopes will now be emitted when the
2058         Blocks are entered. [This change was wrong, fixed on 2006-02-02]
2059
2060         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
2061         code.  This reduces a lot of existing cruft.
2062         
2063         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
2064         that the ScopeInfo is generated as we enter the scope, not at the
2065         time of use, which is what we used to do before.
2066
2067         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
2068         every time a Block is about to be emitted if we have a
2069         CaptureContext. 
2070
2071 2006-02-01  Raja R Harinath  <rharinath@novell.com>
2072
2073         * codegen.cs (AssemblyClass.Emit): Emit RuntimeCompatibility
2074         attribute for mscorlib too.
2075
2076         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
2077         (Reset): Update.
2078         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
2079
2080         * typemanager.cs (cons_param_array_attribute): Make private.
2081         (Reset): Set it to null.
2082         (InitCoreHelpers): Don't initialize it.
2083         (ConsParamArrayAttribute): New.  Initialize it as needed.
2084         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
2085
2086 2006-01-31  Miguel de Icaza  <miguel@novell.com>
2087
2088         * expression.cs: There might be errors reported during the
2089         selection of applicable methods.  If there are errors, do not
2090         continue execution as it will lead the compiler to crash.
2091
2092 2006-01-30  Miguel de Icaza  <miguel@novell.com>
2093
2094         * expression.cs: Member access is not allowed on anonymous
2095         methods.  Fixes #77402.
2096
2097 2006-01-30  Raja R Harinath  <rharinath@novell.com>
2098
2099         Fix #77401
2100         * cs-parser.jay (VariableDeclaration): Don't set
2101         current_array_type to null.
2102         (field_declaration, event_declaration, declaration_statement):
2103         Set it to null here.
2104
2105 2006-01-29  Raja R Harinath  <harinath@gmail.com>
2106
2107         Fix part of #77397
2108         * generic.cs (TypeManager.IsEqual): Handle pass-by-ref types.
2109
2110 2006-01-28  Raja R Harinath  <harinath@gmail.com>
2111
2112         * typemanager.cs (GenericParameterPosition): New.
2113         * doc.cs: Use it.
2114
2115 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
2116
2117         * doc.cs : To process "include" elements, first we should create
2118           another list than XmlNodeList, because it could result in node
2119           removal, which could result in that the XmlNodeList gives up
2120           yielding next node.
2121
2122 2006-01-25  Miguel de Icaza  <miguel@novell.com>
2123
2124         * expression.cs: Introduce an error report that we were not
2125         catching before.   Gonzalo ran into it.
2126
2127 2006-01-23  Miguel de Icaza  <miguel@novell.com>
2128
2129         A fix for bug: #76957
2130         
2131         * iterators.cs (MoveNextMethod.CreateMethodHost): call
2132         ComputeMethodHost before creating the method, this is a new
2133         requirement. 
2134
2135         * anonymous.cs (AnonymousContainer): Now we track all the scopes
2136         that this method references (RegisterScope).  The actual scope
2137         where the method is hosted is computed with the ComputeMethodHost
2138         before we create the method.
2139
2140         Moved the Deepest routine here.
2141
2142         (AnonymousContainer.ComputeMethodHost): New routine used to
2143         compute the proper ScopeInfo that will host the anonymous method.
2144
2145         (ScopeInfo): Deal with multiple roots.  The problem was that we
2146         did not have a unique root where all ScopeInfos could be hanged
2147         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
2148         of roots.  
2149
2150         Remove AdjustMethodScope which is now computed at the end.  Remove
2151         LinkScope which did a partial link, instead link all ScopeInfos
2152         before code generation from the new "LinkScopes" routine. 
2153
2154         Simplify all the Add* routines as they no longer need to maintain
2155         the tree, they just need to record that they are using variables
2156         from a ScopeInfo.
2157
2158         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
2159         routines to produce the forest of ScopeInfo trees.
2160
2161         * class.cs (TypeContainer.AppendMethod): This is just like
2162         AddMethod, but ensures that an interface implementation method
2163         (IEnumerable.XXX) is not inserted at the beginning of the queue of
2164         methods, but at the end.
2165
2166         We use this functionality to ensure that the generated MoveNext
2167         method in the iterator class is resolved/emitted before the
2168         enumerator methods created.   
2169
2170         This is required because the MoveNext method computes the right
2171         ScopeInfo for the method.  And the other methods will eventually
2172         need to resolve and fetch information computed from the anonymous
2173         method. 
2174
2175         
2176 2006-01-23  Raja R Harinath  <rharinath@novell.com>
2177
2178         Improve implementation of section 14.4.2.2 (Better function member).
2179         * expression.cs (Invocation.MoreSpecific): Compare all type
2180         arguments before deciding if one type is more specific than
2181         another.  Handle array types too.  Return the more specific type.
2182         (Invocation.BetterFunction): Add more tie-breaking rules from
2183         section 14.4.2.2.  Perform "more specific" check after
2184         other tie-breaking rules.  Compare all parameter types before
2185         choosing the "more specific" method.
2186
2187 2006-01-21  Raja R Harinath  <harinath@gmail.com>
2188             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
2189
2190         Fix rest of #76995.
2191         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
2192         the 'aliases' hash.
2193         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
2194         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
2195
2196 2006-01-18  Martin Baulig  <martin@ximian.com>
2197
2198         * class.cs (TypeContainer.AddToMemberContainer): Use
2199         `symbol.MemberName.MethodName' instead of just `symbol.Name';
2200         fixes #77124.
2201
2202 2006-01-18  Martin Baulig  <martin@ximian.com>
2203
2204         Fix #76417: a generic class may now have methods which may unify
2205         for some type parameter substitutions.
2206
2207         * class.cs (Method.IsDuplicateImplementation): Don't report CS0408
2208         for methods which may unify anymore.
2209
2210         * expression.cs (Invocation.MoreSpecific): New private static
2211         method; checks whether one method is more specific than another
2212         according to 14.4.2.2 of the spec.
2213         (Invocation.BetterFunction): Implement the tie-breaking rules from
2214         14.4.2.2 of the spec: if two methods unify for some type parameter
2215         substitution, we need to pick the more specific one.
2216
2217 2006-01-18  Raja R Harinath  <rharinath@novell.com>
2218
2219         Fix #76656, cs0231-2.cs.
2220         * cs-parser.jay (formal_parameter_list): Make error case catch
2221         more issues.
2222         (parenthesized_expression_0): Add CS1026 check.
2223         (invocation_expression): Remove unused { $$ = lexer.Location }.
2224
2225 2006-01-17  Raja R Harinath  <rharinath@novell.com>
2226
2227         Fix #76824.
2228         * cs-parser.jay (statement_expression): Don't list out the
2229         individual statement-expressions.  Convert syntax error into
2230         CS0201 check.
2231
2232 2006-01-16  Raja R Harinath  <rharinath@novell.com>
2233
2234         Fix #76874.
2235         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
2236         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
2237         CheckIntermediateModification.
2238         (FieldExpr.DoResolve): Add new two-argument version that
2239         allows us to resolve the InstanceExpression as an lvalue.
2240         The one-argument variant is now just a wrapper.
2241         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
2242         Resolve the lhs as an lvalue if the it has a value type.
2243         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
2244         from Assign.DoResolve.
2245         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
2246         resolved as an lvalue.
2247         (PropertyExpr.DoResolve): Update.
2248         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
2249         has a value type.  Move CS1612 check here from
2250         CheckIntermediateModification.
2251         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
2252         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
2253         'right_side' of a ResolveLValue on an 'out' argument.
2254         (EmptyExpression.LValueMemberAccess): New.  Used as the
2255         'right_side' of a propagated ResolveLValue on a value type.
2256         (LocalVariableReference.DoResolveBase): Recognize
2257         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
2258         Add CS1654 check.
2259         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
2260         EmptyExpression.Null.
2261
2262 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
2263
2264         * typemanager.cs : added IsGenericParameter(). In gmcs it returns
2265           Type.IsGenericParameter(). Fixed bug #77183.
2266         * doc.cs : it is now identical to doc.cs in mcs.
2267
2268 2006-01-16  Martin Baulig  <martin@ximian.com>
2269
2270         * generic.cs (ConstraintChecker.CheckConstraint): Fix #77167.
2271
2272 2006-01-16  Martin Baulig  <martin@ximian.com>
2273
2274         * typemanager.cs (TypeManager.CSharpSignature): Make this work for
2275         ctors; fixes #77250.
2276
2277 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2278
2279         This fixes the problem where we used ldfld instead of ldflda to
2280         load the "THIS" pointer on captured parameters, when THIS is a
2281         value type.  See bug #77205.
2282         
2283         * iterators.cs (CapturedThisReference.Emit): Pass false to
2284         EmitThis (we do not need the address).
2285
2286         * codegen.cs (EmitThis): it needs to know whether we need the
2287         address of `this' or not.  This is used by value types.  
2288
2289         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
2290         every other call passes false.
2291
2292 2006-01-12  Raja R Harinath  <rharinath@novell.com>
2293
2294         Fix #77221.
2295         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
2296         GetOverride.
2297         * expression.cs (Invocation.OverloadResolve): Update.
2298         (Invocation.DoResolve): Avoid double resolution of invocation.
2299
2300 2006-01-11  Raja R Harinath  <rharinath@novell.com>
2301
2302         Fix #77180.
2303         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
2304         unary negation of floating point types as 0-expr; negation cannot
2305         overflow in floating point types.
2306
2307         Fix #77204.
2308         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
2309         on operands of 'void' type.
2310
2311         Fix #77200.
2312         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
2313         and ExclusiveOr for boolean constants too.
2314
2315 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
2316
2317         * expression.cs: Fix Console.WriteLine ((this = x).foo);
2318
2319 2006-01-12  Miguel de Icaza  <miguel@novell.com>
2320
2321         * cs-tokenizer.cs (Position): New class used to save and restore
2322         the position state in the tokenizer.  Before this patch the save
2323         and restore was not complete enough so the line and columns would
2324         start to drift and the debugger and stack traces will get the
2325         wrong data.
2326
2327 2006-01-10  Martin Baulig  <martin@ximian.com>
2328
2329         * generic.cs
2330         (TypeParameter.InflateConstraints): New public method.
2331
2332         * iterators.cs (Iterator.DefineNestedTypes): Also inflate the
2333         constraints; fixes #77042.
2334
2335 2006-01-10  Martin Baulig  <martin@ximian.com>
2336
2337         * anonymous.cs (ScopeInfo.EmitScopeType): Use the `CurrentType'
2338         instead of the `TypeBuilder' for this "<>THIS" variable; fixes
2339         #77061. 
2340
2341 2006-01-09  Raja R Harinath  <rharinath@novell.com>
2342
2343         Fix #75636.
2344         * expression.cs (Invocation.OverloadResolve): Replace reflected
2345         override methods with their base virtual methods, rather than
2346         skipping over them.
2347         * typemanager.cs (TypeManager.GetOverride): New.
2348
2349 2005-12-21  Miguel de Icaza  <miguel@novell.com>
2350
2351         * driver.cs: Report the case of no source files and no -out:
2352         argument provided.
2353
2354 2005-12-20  Raja R Harinath  <rharinath@novell.com>
2355
2356         Fix #77035.
2357         * expression.cs (ComposedCast.GetSignatureForError): Define.
2358
2359 2006-01-05  Jb Evain  <jbevain@gmail.com>
2360
2361         * class.cs (Property.Define, Indexer.Define): do not tag the
2362         properties as SpecialName | RTSpecialName.
2363
2364 2006-01-04  Miguel de Icaza  <miguel@novell.com>
2365
2366         * class.cs (MethodCore.IsDuplicateImplementation): This method was
2367         doing a low-level comparission of parameter types.  It was lacking
2368         a check for __argslist. 
2369
2370 2005-12-30  Miguel de Icaza  <miguel@novell.com>
2371
2372         * expression.cs (ParameterReference.DoResolveBase): Allow
2373         reference parameters if they are local to this block. 
2374
2375         This allows the ref and out parameters of a delegate to be used in
2376         an anonymous method, for example:
2377
2378         delegate void set (out int x);
2379
2380         set s = delegate (out int x){
2381                 x = 0;
2382         };
2383
2384         This is used by functionality introduced late in the C# language.
2385         
2386         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
2387         method that take ref and out parameters. 
2388
2389         Fixes #77119 which was a late change in the spec.
2390
2391 2005-12-23  Miguel de Icaza  <miguel@novell.com>
2392
2393         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
2394         parent if its the same scope.  Fixes #77060.
2395
2396 2005-12-22  Marek Safar  <marek.safar@seznam.cz>
2397
2398         * expression.cs (ComposedCast.DoResolveAsTypeStep): Fixed wrong merge.
2399
2400 2005-12-21  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2401
2402         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): Generate
2403         errors 1726 for strong named assemblies with InternalsVisibleToAttribute 
2404         that doesn't contain the full public key. This is a update of the
2405         friend assemblies in .Net 2.0 release.
2406         
2407 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
2408
2409         Fix #76995
2410
2411         * namespace.cs (NamespaceEntry): Add extern_aliases as a
2412         ListDictionary, to contain the ExternAliasEntry entries (in
2413         addition to the NamespaceEntry.aliases hashtable). This field is
2414         shared between the original entry and its doppelganger (bodyless 
2415         copy of it).
2416         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
2417         extern_aliases field.
2418         (NamespaceEntry.Lookup): Move the IsImplicit check after the
2419         lookup in extern_aliases.
2420
2421 2005-12-16  Raja R Harinath  <rharinath@novell.com>
2422
2423         Fix #77006.
2424         * class.cs (TypeContainer.Mark_HasEquals): New.
2425         (TypeContainer.Mark_HasGetHashCode): New.
2426         (ClassPart): Override them.
2427         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
2428
2429         * generic.cs (GenericMethod.DefineMembers): Update to changes.
2430         (TypeParameter.TypeParameter): Change type of 'parent' argument to
2431         DeclSpace.
2432
2433         Fix #77008.
2434         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
2435         'parent' argument to the base constructor.
2436
2437         Remove all mention of TypeContainer from decl.cs.
2438         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
2439         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
2440         (DeclSpace.DeclSpace): Likewise.
2441         (DeclSpace.DefineMembers): Remove unused argument.
2442         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
2443         debugging check -- we don't care if the debug code throws an
2444         InvalidCastException instead of an InternalErrorException.
2445         * class.cs (TypeContainer.DefineMembers): Update to changes.
2446         (TypeContainer.DoDefineMembers): Likewise.
2447         (TypeContainer.GetMethods): Likewise.
2448         (PropertyMember.Define): Likewise.
2449         (MemberBase.Parent): New property that forwards to
2450         MemberCore.Parent, but ensures that we get a TypeContainer.
2451         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
2452         (RootContext.PopulateTypes): Likewise.  Remove special case code
2453         for !RootContext.StdLib: DefineMembers is idempotent.
2454
2455 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
2456
2457         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
2458
2459 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
2460
2461         * doc.cs : The search for referenced namespace was insufficient to
2462           get global one as it used to do. Fixed bug #76965.
2463
2464 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
2465
2466         * doc.cs : check name in cref in the last phase that whether it is
2467           namespace or not.
2468
2469 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2470
2471         * cs-tokenizer.cs : reverted the latest change: it somehow broke
2472           Mono.C5.
2473
2474 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2475
2476         * doc.cs : so it turned out that we cannot skip override check for 
2477           interface members. Fixed bug #76954.
2478
2479 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
2480
2481         * cs-tokenizer.cs : fixed bug #75984:
2482           - #warning and #error should not be handled when the source line
2483             is disabled.
2484           - #line is not checked strictly when the source line is disabled.
2485           - #define and #undef is on the other hand checked strictly at any
2486             state.
2487
2488 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
2489
2490         * cs-tokenizer.cs : missing Location (actually, filename) in one of
2491           CS1027 report.
2492
2493 2005-12-15  Raja R Harinath  <rharinath@novell.com>
2494
2495         * generic.cs (TypeManager.IsGeneric): Remove unused method.
2496
2497         * typemanager.cs (TypeManager.GetFullName): Rewrite to handle
2498         nested types.
2499
2500 2005-12-14  Martin Baulig  <martin@ximian.com>
2501
2502         * typemanager.cs (TypeManager.GetFullName): Make this public;
2503         `Type.Fullname' now never returns null.
2504
2505         * class.cs (Method.Define): Use TypeManager.GetFullName() for
2506         explicit interface implementations; we're now using the same
2507         naming convention than csc does.
2508
2509 2005-12-14  Miguel de Icaza  <miguel@novell.com>
2510
2511         * convert.cs (ExplicitConversionCore): Check the return value from
2512         ExplicitConversionCore which can return null on failure.  Fixes #76914
2513
2514 2005-12-09  Raja R Harinath  <rharinath@novell.com>
2515
2516         * anonymous.cs (AnonymousMethod.Compatible): Use IsGenericType
2517         instead of IsGenericInstance.
2518         * generic.cs (TypeManager.IsEqual): Likewise.  Delete redundant
2519         code that's now covered by the more general test.
2520         * typemanager.cs (TypeManager.IsPrivateAccessible): Likewise.
2521
2522         * generic.cs (DropGenericTypeArguments): New.  Captures the common
2523         pattern: if (t.IsGenericInstance) t = t.GetGenericTypeDefinition ();
2524         * attribute.cs, class.cs, decl.cs, ecore.cs: Use it.
2525         * generic.cs, report.cs, typemanager.cs: Likewise.
2526
2527 2005-12-08  Martin Baulig  <martin@ximian.com>
2528
2529         * generic.cs (TypeArguments.Resolve): Added CS1547 check.
2530
2531         * typemanager.cs (TypeManager.CSharpSignature): Include type
2532         arguments in the signature of a generic method.
2533
2534 2005-12-07  Martin Baulig  <martin@ximian.com>
2535
2536         Add support for custom attributes on type parameters.
2537
2538         * cs-parser.jay (type_arguments): Added `opt_attributes'.
2539
2540         * generic.cs (TypeParameterName): New public class; we use this
2541         instead of a `string' to store the name of a type parameter, so we
2542         can also have `Attributes'.
2543         (TypeArguments.GetDeclarations): Return a `TypeParameterName[]'
2544         array instead of a `string[]' array.
2545         (TypeParameter.ctor): We now also take an `Attributes' argument.
2546         (TypeParameter.EmitAttributes): New public method; emit our
2547         `OptAttributes' here.
2548         (GenericMethod.EmitAttributes): New public method; emit the custom
2549         attributes on all our type parameters.
2550
2551         * class.cs (TypeContainer.EmitType): Call EmitAttributes() on all
2552         our type parameters.
2553         (MethodData.Define): If we're a generic method, call
2554         EmitAttributes() on it.
2555
2556 2005-12-07  Martin Baulig  <martin@ximian.com>
2557
2558         * generic.cs
2559         (ConstraintChecker): New public abstract class; move the
2560         constraint checking here from `ConstructedType' and also do
2561         constraint checking for generic methods here.
2562
2563         * expression.cs (Invocation.OverloadResolve): Use
2564         ConstraintChecker.CheckConstraints() if we resolved to a generic
2565         method.  Fix #76806.
2566
2567 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2568
2569         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
2570
2571         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
2572         event initializers.
2573         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
2574         (FieldBase.Initializer): Initializer is now optional.
2575         (EventField.Define): Only event field can have initializer.
2576
2577         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
2578
2579         * const.cs (Const): Reuse initializer.
2580
2581         * cs-parser.jay: Updated after FieldBase changes.
2582         Added current_array_type to simplify array initializers.
2583
2584         * ecore.cs (NullCast.IsDefaultValue): Implemented.
2585
2586         * expression.cs, iterators.cs: Updated.
2587
2588         * namespace.cs (NamespaceEntry): Made UsingFound private.
2589
2590 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2591
2592         * parameterCollection.cs: Obsolete, removed.
2593         * parser.cs: Obsolete, removed.
2594
2595 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
2596
2597         Fix #76849.
2598         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
2599
2600         * enum.cs (Enum.Define): Set obsolete context here.
2601
2602 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2603
2604         * doc.cs :
2605           - FindDocumentedMember() now expects 1) paramList as null
2606             when "we don't have to check the number of parameters" and
2607             2) Type.EmptyTypes when "there is no arguments".
2608           - Introduced FoundMember struct to hold the exact type which was
2609             used to find the documented member (the above change broke
2610             test-xml-044; it might be better just to use DeclaringType than
2611             what MS does, like this change does, but it depends on usage.)
2612
2613 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
2614
2615         * doc.cs : documented member might be from DeclaringType for nested
2616           types. Fixed bug #76782.
2617
2618 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
2619
2620         * anonymous.cs: Have the param code handle leaving copies on the
2621         stack etc. Allows anonymous params to take part in the assignment
2622         code (++, +=, etc). Fixes bug #76550
2623
2624         * expression.cs: Handle the prepare_for_load/leave_copy by passing
2625         it down to the anon code.
2626
2627         * iterators.cs: Use dummy var here
2628
2629         * codegen.cs: Handle new vars
2630
2631 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2632
2633         Fix #76849.
2634         * class.cs (MethodData.Define): Set proper Obsolete context.
2635
2636         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
2637         obsolete context.
2638         (FieldExpr.DoResolve): Ditto.
2639
2640 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
2641
2642         Fix #76849.
2643         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
2644         parent is not obsolete.
2645
2646 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
2647
2648         * doc.cs : (FindDocumentedMember) find parameterless members first
2649           and get CS0419 in the early stage. Fixed first case of bug #76727.
2650
2651 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
2652
2653         Fix #76859.
2654         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
2655         no error was reported.
2656
2657         *expression.cs (Binary.DoResolve): left can be null.
2658
2659 2005-12-06  Raja R Harinath  <rharinath@novell.com>
2660
2661         * class.cs (MethodCore.CheckGenericOverride): Delete unused
2662         abstract method and all overrides.
2663         * support.cs (ParameterData.GenericConstraints): Delete.
2664         (ReflectionParameters.type_params): Delete.
2665         (ReflectionParameters.ReflectionParameters): Make private.
2666         (ReflectionParameters.GetConstaints): New factory method.
2667         * generic.cs (TypeParameterDefineType): Use it.
2668         (TypeManager.GetTypeParameterConstraints): Likewise.
2669
2670 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
2671
2672         Fix #76783.
2673         * class.cs (MethodData.Emit): Parameters should be labeled first.
2674
2675 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
2676
2677         Fix #76761.
2678         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
2679
2680 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
2681
2682         * attribute.cs (AreParametersCompliant): Moved to Parameter.
2683
2684         * class.cs (MethodCore): Parameter clean up.
2685         (IMethodData): Added ParameterInfo.
2686         (MethodData): Parameter clean up.
2687         (Indexer.Define): Parameter clean up.
2688
2689         * anonymous.cs,
2690         * codegen.cs,
2691         * cs-parser.jay,
2692         * decl.cs,
2693         * doc.cs,
2694         * ecore.cs,
2695         * flowanalysis.cs,
2696         * iterators.cs,
2697         * pending.cs,
2698         * statement.cs,
2699         * typemanager.cs: Parameter clean up.
2700
2701         * delegate.cs (Define): Get rid of duplicated code.
2702
2703         * expression.cs (ParameterReference): Removed useless parameters
2704         and simplified.
2705         (Invocation): Ditto.
2706
2707         * parameter.cs (ParamsParameter): New class, params specialization.
2708         (ArglistParameter): Attemp to separate arglist.
2709         (Parameter): Refactored to be reusable and faster.
2710         (Parameter.Modifier): Made understandable.
2711         (Parameters): Changed to be used as a class for `this' assembly
2712         parameters. Refactored to use new specialized classes.
2713
2714         * support.cs (ParameterData): Added Types property.
2715         (InternalParameters): Deleted.
2716
2717 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2718
2719         * doc.cs : the previous patch does not actually fix the bug.
2720           PropertyInfo override check is now implemented and really fixed it.
2721         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
2722
2723 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2724
2725         * doc.cs : apply "override filter" also to properties.
2726           Fixed bug #76730.
2727
2728 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
2729
2730         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
2731           no need to check overrides. For classes, omit those results from 
2732           interfaces since they must exist in the class. Fixed bug #76726.
2733
2734 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2735
2736         * typemanager.cs : (GetFullNameSignature) differentiate indexers
2737           with different parameters. Fixed the second problem in #76685.
2738
2739 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2740
2741         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
2742           get expected 'protected' access in CheckValidFamilyAccess()).
2743           Fixed bug #76692.
2744
2745 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
2746
2747         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
2748           Fixed bug #76705.  CS1569 was incorrectly commented out.
2749
2750 2005-11-23  Martin Baulig  <martin@ximian.com>
2751
2752         * generic.cs (Constraints.Define): Removed.
2753         (TypeParameter.DefineConstraints): Removed.
2754         (TypeParameter.DefineType): Call SetGenericParameterAttributes()
2755         on the GenericTypeParameterBuilder here.
2756
2757 2005-11-23  Martin Baulig  <martin@ximian.com>
2758
2759         * typemanager.cs (TypeManager.GetProperty): Make this public.
2760
2761         * generic.cs (Nullable.NullableInfo.ctor): Use
2762         TypeManager.GetProperty() rather than using reflection directly.
2763
2764 2005-11-17  Martin Baulig  <martin@ximian.com>
2765
2766         * expression.cs (Indexers.GetIndexersForType): Added support for
2767         generic parameters; fixes #76587.
2768
2769 2005-11-17  Martin Baulig  <martin@ximian.com>
2770
2771         * anonymous.cs
2772         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
2773         inherit the scope from our parent.  Fixes #76653.
2774
2775 2005-11-15  Martin Baulig  <martin@ximian.com>
2776
2777         * anonymous.cs (ScopeInfo.ScopeType): New public field; use this
2778         instead of `ScopeTypeBuilder' to refer to the "current" type.
2779         (AnonymousMethod.CreateScopeType): Correctly create the helper
2780         class if we're inside a generic type definition.
2781
2782 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2783
2784         * doc.cs : use Invocation.IsOverride() to do real override check.
2785         * expression.cs : made Invocation.IsOverride() internal.
2786
2787 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
2788
2789         * doc.cs : use TypeManager.FindMembers() instead of (possible)
2790           TypeBuilder.FindMembers() and filter overriden base members out.
2791           Fixed bug #76990.
2792
2793 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2794
2795         * doc.cs : ref/out parameters are represented as '@' (instead of
2796           '&' in type FullName). Fixed bug #76630 (additionally crefs).
2797
2798 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2799
2800         * doc.cs : when there was no '.' in cref to methods in doc comment,
2801           then parameters were missing in the output. Fixed bug #76691.
2802
2803 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2804
2805         * driver.cs : don't output docs when there is an error.
2806           Fixed bug #76693.
2807
2808 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2809
2810         * doc.cs :
2811           Now it should detect indexers. Fixed primary concern in bug #76685.
2812           Fixed CS0419 message to not show the identical member signature in
2813           the message.
2814
2815 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
2816
2817         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
2818           instead of Type.FindMembers() since it does not handle events.
2819           Fixed bug #71604.
2820
2821 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
2822
2823         * codegen.cs: Fixed typo (speficied -> specified).
2824
2825 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2826
2827         Fix #76369.
2828         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
2829
2830 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2831
2832         * attribute.cs: Changed error message.
2833
2834         * cs-tokenizer.cs: One more check.
2835
2836 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2837
2838         * statement.cs (Block.Resolve): Ignore empty statement.
2839
2840 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2841
2842         * report.cs: Made error/warning methods more strict to avoid
2843         their misuse.
2844
2845         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
2846         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
2847         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
2848         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
2849
2850 2005-11-11  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2851
2852         * codegen.cs (AssemblyClass.CheckInternalsVisibleAttribute): 
2853         Use the more explicit AssemblyName.FullName instead of 
2854         AssemblyName.Name to report errors.
2855         
2856 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
2857
2858         * attribute.cs, class.cs, cs-tokenizer.cs, parameter.cs: Sync
2859         with mcs.
2860
2861 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
2862
2863         * class.cs,
2864         * convert.cs,
2865         * cs-parser.jay,
2866         * decl.cs,
2867         * enum.cs,
2868         * expression.cs,
2869         * generic.cs,
2870         * pending.cs,
2871         * report.cs: Fixed error reporting and typos.
2872
2873         * generic.cs (TypeParameter.GetSignatureForError): New method.
2874         (ConstructedType.GetSignatureForError): Instead of DeclarationName.
2875
2876         * typemanager.cs (GetFullName): Refactored.
2877
2878 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
2879
2880         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
2881         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
2882
2883         * class.cs (TypeContainer.IsComImport): New property.
2884         (Constructor.Define): Create proper ctor for ComImport types.
2885
2886         * expression.cs (New.CheckComImport): Fixed.
2887
2888 2005-11-07  Miguel de Icaza  <miguel@novell.com>
2889
2890         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
2891         that a parameter has been captured does not mean that we do not
2892         have to do the rest of the processing.  This fixes the second part
2893         of #76592.  If there was another anonymous method capturing
2894         values in the past, the Scope would never be set for the second
2895         method that captured the same parameter.
2896
2897         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
2898         properly manipulate the stack.   Second part of fix for #76592.
2899
2900         * expression.cs (New): Add support for invoking "new" on
2901         interfaces that have been flagged with the ComImport attribute and
2902         the CoClass.  Fixes #76637 
2903
2904         * statement.cs (Try.DoEmit): When a variable is captured, do not
2905         try to emit the vi.LocalBuilder variable as it has been captured.
2906         Create a temporary variable and store the results on the
2907         FieldBuilder.  Fixes #76642
2908
2909 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2910
2911         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
2912
2913         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
2914
2915         * expression.cs (Binary.DoResolve): Added && optimalization.
2916     
2917         * typemanager.cs (AddUserType): Removed useless argument.
2918
2919 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
2920
2921         * statement.cs (Block.variables): Uses ListDictionary.
2922
2923 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2924
2925         Fix #75969.
2926         * class.cs (PartialContainer.EmitType): Customized to emit
2927         security attributes.
2928         (ClassPart.ApplyAttributeBuilder): Transform security attribute
2929         for partial classes.
2930
2931 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
2932
2933         Fix #76599.
2934         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
2935         access has to be fixed.
2936         
2937         * typemanager.cs (IsUnmanagedType): Wrong common field type.
2938
2939 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
2940
2941         Fix #76590.
2942         * ecore.cs (NullCast.Reduce): Implemented.
2943
2944         * expression.cs (ArrayCreation.CheckIndices): Correcly check
2945         constant type.
2946         
2947         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
2948         properly.
2949         (Foreach.Resolve): Catch null properly.
2950
2951 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
2952  
2953         * cs-tokenizer.cs: Warning text fix.
2954
2955         * driver.cs: AllWarningNumbers exposed on public interface.
2956
2957         * report.cs (): Reviewed warning numbers.
2958         (IsValidWarning): Use binary search.
2959
2960 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
2961  
2962         * driver.cs: Implemeted resource visibility.
2963         (Resources): New class for code sharing between /res: and
2964         /linkres:
2965  
2966 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2967
2968         decl.cs (CurrentTypeParameters): Fixed to be public.
2969
2970 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2971
2972         generic.cs, rootcontext.cs: Removed NewConstraintAttribute.
2973
2974 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
2975
2976         gmcs.exe.sources: Use CryptoConvert.cs from corlib.
2977
2978 2005-11-05  Kornél Pál  <kornelpal@hotmail.com>
2979
2980         * gmcs.exe.config: Updated runtime version to v2.0.50727 (2.0 RTM).
2981
2982 2005-11-04  Carlos Alberto Cortez <calberto.cortez@gmail.com>
2983
2984         Add friend assembly access support.
2985         * typemanager.cs: assembly_internals_vis_attrs
2986         cache for friend assembly access. 
2987         (TypeManager.IsFriendAssembly): New method for
2988         checking friend assembly access.
2989         (TypeManager.Error_FriendAccessNameNotMatching): New
2990         helper method.
2991         (TypeManager.CompareKeyTokens): Likewise.
2992         (TypeManager.Filter): Handle friend accessible
2993         members.
2994
2995         * namespace.cs (RootNamespace.GetTypeInAssembly): Return
2996         friend accessible types.
2997
2998         * ecore.cs (Expression.IsAccessorAccessible): Handle
2999         friend accessible properties.
3000
3001         * decl.cs (DeclSpace.CheckAccessLevel): Handle friend
3002         accessible types.
3003         
3004 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
3005
3006         Fix #76568.
3007         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
3008         folding.
3009         
3010         * convert (Convert.ImplicitReferenceConversion): NullCast holds
3011         contants only.
3012         
3013         * ecore.cs (NullCast): Child is contant only.
3014         
3015         * literal.cs (NullLiteral.Reduce): null can be converted to any
3016         reference type.
3017
3018 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
3019
3020         * driver.cs: Use Encoding.Default as default code page instead
3021           of ISO-28591.
3022
3023 2005-10-27  Raja R Harinath  <rharinath@novell.com>
3024
3025         Fix #76085.
3026         * expression.cs (Invocation.Error_InvalidArguments): Handle
3027         __arglist parameters.
3028         (Invocation.VerifyArgumentsCompat): Likewise.
3029         * support.cs (ReflectionParameters.GetSignatureForError): Print
3030         __arglist parameters.
3031         (InternalParamters.GetSignatureForError): Likewise.
3032         * parameter.cs (Parameters.GetSignatureForError): Likewise.
3033
3034 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
3035
3036         * attribute.cs (GetPropertyValue): Made public.
3037
3038         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
3039         Resolve.
3040         Add new property WrapNonExceptionThrows to handle 2.0 assembly
3041         attribute.
3042         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
3043         is not defined.
3044         
3045         * driver.cs: Reflect method name change.
3046         
3047         * statement.cs (Try.Resolve): Warn when try has both general
3048         exception handlers.
3049         
3050         * typemanager.cs: runtime_compatibility_attr_type new predefined
3051         type.
3052
3053 2005-10-26  Raja R Harinath  <harinath@gmail.com>
3054
3055         Fix #76419.
3056         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
3057         treat it as an empty parameter list.
3058
3059 2005-10-26  Raja R Harinath  <rharinath@novell.com>
3060
3061         Fix #76271.     
3062         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
3063         ResolveAsTypeStep silent.
3064         * statement.cs (Block.AddConstant): Mark block as used.
3065         (Block.ResolveMeta): Avoid piling on error messages
3066         if a constant initializer resolution fails.
3067
3068 2005-10-25  Raja R Harinath  <rharinath@novell.com>
3069
3070         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
3071         Remove.
3072         (NamespaceEntry.VerifyAllUsing): New.
3073         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
3074         behaviour.  Delegates actual resolution of alias to ...
3075         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
3076         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
3077         Update.
3078         * driver.cs (Driver.MainDriver): Update.
3079         
3080         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
3081         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
3082         property.
3083         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
3084         Remove.
3085         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
3086         RootNamespace.DefineNamespacesForAll.
3087
3088 2005-10-24  Raja R Harinath  <harinath@gmail.com>
3089
3090         * typemanager.cs (assemblies, external_aliases, modules)
3091         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
3092         (ComputeNamespaces, GetRootNamespace): Remove extra staging
3093         overhead.  Move resposibility ...
3094         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
3095         * driver.cs, attribute.cs, codegen.cs: Update to changes.
3096
3097 2005-10-23  Raja R Harinath  <harinath@gmail.com>
3098
3099         * namespace.cs (RootNamespace.all_namespaces): Renamed from
3100         cached_namespaces.  Improve usage.
3101         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
3102         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
3103         Move from GlobalRootNamespace and simplify.
3104         (RootNamespace.Global): Make instance variable.
3105         (RootNamespace.RootNamespace): Add "alias name" parameter.
3106         (GlobalRootNamespace): Simplify drastically.
3107         (Namespace.Lookup): Don't use GetNamespace.
3108         * typemanager.cs (GetRootNamespace): Rename from
3109         ComputeNamespaceForAlias.
3110         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
3111
3112 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3113
3114         * anonymous.cs (AnonymousContainer): Don't crash when container
3115         doesn't exist.
3116
3117 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3118
3119         * expression.cs (Binary.DoResolve): Warn when comparing same
3120         values.
3121
3122 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
3123
3124         Fix #76486.
3125         * expression.cs (Binary.DoResolve): It looks like there are no
3126         convetsion rules in enum context.
3127
3128 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3129
3130         Add support for extern alias qualifiers.
3131         * typemanager.cs: Move some LookupTypeReflection code
3132         to namespace.cs, to have cleaner code. Added some methods
3133         to help us keep track of the extern aliased references.
3134         * driver.cs: Add suport for extern alias assemblies on command
3135         line and check for their warnings/errors. Also keep track of the
3136         extern aliased assemblies.
3137         * namespace.cs: Move the global functionality of Namespace
3138         to GlobalRootNamespace/RootNamespace. Now the global namespace
3139         is GlobalRootNamespace.Globa. Also the code moved from 
3140         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
3141         Finally added LocalAliasEntry (AliasEntry before) and
3142         ExternAliasEntry, to handle alias statements.
3143         * cs-parser.jay: Add support in the grammar for extern alias
3144         statement.
3145         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
3146         Update callings to Namespace (now in GlobalRootNamespace).
3147
3148 2005-10-25  Martin Baulig  <martin@ximian.com>
3149
3150         * convert.cs (ImplicitTypeParameterConversion): Make base
3151         interfaces actually work; fixes #76557.
3152
3153 2005-10-25  Martin Baulig  <martin@ximian.com>
3154
3155         * generic.cs
3156         (GenericMethod.Define): Call TypeParameter.DefineConstraints() on
3157         all the type parameters; fixes #76551.
3158
3159 2005-10-25  Martin Baulig  <martin@ximian.com>
3160
3161         Fix #76472.
3162
3163         * generic.cs
3164         (GenericMethod.ctor): Added `Expression return_type' and
3165         `Parameters parameters' arguments.
3166         (GenericMethod.DefineType): Call ResolveAsTypeTerminal() on the
3167         parameter and return types to check their constraints if they're
3168         generic types.
3169
3170         * codegen.cs (EmitContext.ResolvingGenericMethod): New public
3171         boolean field.
3172
3173         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
3174         constraints of a generic type if `ec.ResolvingGenericMethod'.
3175
3176         * class.cs (MethodCore.DoDefineParameters): Set
3177         `ec.ResolvingGenericMethod' if we're a generic method.
3178         (MemberBase.MemberType): Likewise.
3179
3180 2005-10-25  Carlos Alberto Cortez <calberto.cortez@gmail.com>
3181
3182         * typemanager.cs (TypeManager): Added 
3183         TypeManager.internals_visible_attr_type to cache
3184         S.R.CompilerServices.InternalsVisibleToAttribute.
3185
3186         * codegen.cs (AssemblyClass): Added checks for 
3187         InternalsVisibleToAttribute in new method 
3188         CheckInternalsVisibleAttribute () and also cache the
3189         AssemblyName in AssemblyClass.Name.
3190         
3191 2005-10-24  Martin Baulig  <martin@ximian.com>
3192
3193         * typemanager.cs
3194         (TypeManager.ExpandInterfaces): Added overloaded version which
3195         just takes a `Type[]' array.
3196
3197         * generic.cs
3198         (Constraints.Resolve): Don't expand the interfaces here; ie. we
3199         just use the interfaces which were explicitly specified and not
3200         the interfaces they inherit.  Fixes #76482.
3201         (TypeParameter.FindMembers): Expand the interfaces here.
3202
3203 2005-10-21  Martin Baulig  <martin@ximian.com>
3204
3205         * generic.cs
3206         (Constraints.Resolve): Also resolve the actual types here.
3207         (Constraints.ResolveTypes): Just check the constraints here.
3208         Fixes #76363; see gtest-218.cs.
3209
3210 2005-10-21  Martin Baulig  <martin@ximian.com>
3211
3212         * convert.cs
3213         (Convert.ImplicitTypeParameterConversion): Use a `ClassCast'
3214         instead of a `BoxedCast'; fixes gtest-217.cs.
3215
3216 2005-10-20  Atsushi Enomoto  <atsushi@ximian.com>
3217
3218         * generic.cs : (ConstructedType.CheckConstraints) warn CS0310 when
3219           1) "new()" is specified as generic parameter constraint and 2) the
3220           type is TypeBuilder and 3) the type is abstract even if it has a
3221           default .ctor(). Now errors/gcs0310-3.cs is correctly rejected.
3222
3223 2005-10-20  Martin Baulig  <martin@ximian.com>
3224
3225         * generic.cs
3226         (GenericConstraints.TypeParameter): New public property.
3227         (TypeParameter.ctor): Also take a `DeclSpace' argument.
3228         (TypeParameter.DeclSpace): New public property.
3229         (TypeParameter.DefineType): Inflate the constraints if our
3230         `DeclSpace' is an `Iterator'.   
3231
3232 2005-10-19  Atsushi Enomoto  <atsushi@ximian.com>
3233
3234         * class.cs, decl.cs : (MemberCache.FindMemberToOverride) added 
3235           GenericMethod argument to compare methods' generic type arguments.
3236           Fixed bug #76382.
3237
3238 2005-10-19  Martin Baulig  <martin@ximian.com>
3239
3240         * class.cs (TypeContainer.DefineType): Only use ResolveAsTypeStep(),
3241         not ResolveType() when resolving the base type, so we're not
3242         checking the constraints here.
3243         (TypeContainer.ResolveType): Call ResolveType() on our base_type
3244         if we have any.
3245
3246 2005-10-19  Martin Baulig  <martin@ximian.com>
3247
3248         * generic.cs (ConstructedType.CheckConstraints): Committing
3249         untested fix for #76441.
3250
3251 2005-10-18  Raja R Harinath  <rharinath@novell.com>
3252
3253         Fix #76371.
3254         * class.cs (TypeContainer.DefineType): Move updating of
3255         topological sort earlier in the code.
3256         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
3257
3258 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
3259
3260         Fix #76273.
3261         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
3262         
3263         * constant.cs (Constant.TryReduce): Moved from Cast class.
3264         (Reduce): Made little bit more OO and fixed missing conversions.
3265         
3266         * ecore.cs (Reduce): Implemented.
3267         (Binary.EnumLiftUp): New method to upgrade values to enum values.
3268         
3269         * literal.cs (Reduce): Implemented.
3270         
3271         * class.cs: Reverted Miguel's wrong commit.
3272
3273 2005-10-14  Miguel de Icaza  <miguel@novell.com>
3274
3275         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
3276
3277 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
3278
3279         * cs-parser.jay, expression.cs : CS0214 was missing error location
3280           for constants. Fixed bug #76404.
3281
3282 2005-10-10  Raja R Harinath  <rharinath@novell.com>
3283
3284         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
3285         InstanceExpression.
3286         (PropertyExpr.EmitCall): Likewise.
3287         * expression.cs (Invocation.EmitArguments): Handle case where
3288         arguments == null.
3289         (Invocation.EmitCall): Avoid allocating temporary variable if
3290         there are no arguments.
3291
3292 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
3293
3294         Fix #76370.
3295         * convert.cs (ExplicitConversionCore): Fixed object->enum
3296         conversion.
3297
3298 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3299
3300         Fix #76323.
3301         * convert.cs (ImplicitConversionStandard): Move conversion of
3302         void* to arbitrary pointer types ...
3303         (ExplicitConversionStandard): .. here.
3304         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
3305         error to always print typenames.
3306
3307 2005-10-07  Raja R Harinath  <rharinath@novell.com>
3308
3309         * convert.cs (GetConversionOperator): Rename from
3310         GetConversionOperators.  Move operator selection code from ...
3311         (UserDefinedConversion): ... here.
3312
3313 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
3314
3315         * convert.cs (ExplicitConversionCore): Removed duplicate enum
3316         conversion.
3317
3318 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
3319
3320         * assign.cs (Assign.DoResolve): Error method changed.
3321
3322         * cfold.cs (DoConstantNumericPromotions): Error method changed.
3323         
3324         * const.cs (ResolveValue): Reset in_transit immediately.
3325         
3326         * constant.cs: Error method changed.
3327         
3328         * convert.cs: Removed useless location parameter.
3329         (ExplicitNumericConversion): Don't do double enum check.
3330         (ExplicitConversionCore): Renamed from ExplicitConversion.
3331         (ExplicitUnsafe): Extracted from ExplicitConversion.
3332         (ExplicitConversion): Uses for error reporting.
3333         
3334         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
3335         error messages.
3336         (ResolveBoolean): Uses common error method.
3337         (CastToDecimal): Get rid of ec.
3338         (CastFromDecimal): Optimized.
3339         (ConvCast): Get rid of ec.
3340         
3341         * enum.cs (ResolveValue): Reset in_transit immediately.
3342         (Emit): Return after first error.
3343         
3344         * expression.cs: Convert changes.
3345         
3346         * literal.cs: Error method changed.
3347         
3348         * statement.cs: Error method changed.
3349
3350 2005-10-06  Raja R Harinath  <rharinath@novell.com>
3351
3352         Fix gtest-131.cs and gtest-211.cs.
3353         * generic.cs (Nullable.LiftedBinaryOperator.EmitEquality):
3354         Only emit code for a label if it is used.  Unreachable code can
3355         violate ECMA evaluation stack invariants.
3356
3357 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3358
3359         * anonymous.cs: Implemented ExprClassName.
3360         
3361         * assign.cs (Assign.DoResolve): Don't chrash when type is not
3362         delegate.
3363         
3364         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
3365         check.
3366         
3367         * class.cs (StaticClass.DefineContainerMembers): Report protected
3368         members as error.
3369         
3370         * codegen.cs: if(ed) PRODUCTION.
3371         
3372         * convert.cs (Error_CannotImplicitConversion): Better error
3373         distinction.
3374         
3375         * cs-parser.jay: More error checks.
3376         
3377         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
3378         
3379         * driver.cs (CSCParseOption): Enabled wrong option check.
3380         
3381         * ecore.cs (Expression.ExprClassName): Turned to property.
3382         (MemberExpr.CheckIntermediateModification): For checking boxed
3383         value types     modification.
3384         
3385         * statement.cs (Fixed.Resolve): Expression type must be
3386         convertible to fixed type.
3387         (CollectionForeach.GetEnumeratorFilter,TryType):
3388         Small refactoring for easier error checking.
3389
3390 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
3391
3392         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
3393         attributes.
3394         
3395         * class.cs (GeneratedBaseInitializer): New class for customization
3396         compiler generated initializers.
3397         (MemberBase.DoDefine): Check Obsolete attribute here.
3398         (FieldMember.DoDefine): Ditto.
3399         
3400         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
3401         constants.
3402         
3403         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
3404         (MemberCore.GetObsoleteAttribute): Removed argument.
3405         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
3406         (MemberCore.CheckObsoleteType): New helper.
3407         
3408         * delegate.cs,
3409         * enum.cs,
3410         * statement.cs: Updates after MemberCore changes.
3411         
3412         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
3413         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
3414         
3415         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
3416         obsolete attribute for compiler construct.
3417         (As.DoResolve): Cache result.
3418         
3419         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
3420
3421 2005-10-01  Miguel de Icaza  <miguel@novell.com>
3422
3423         * expression.cs (Probe): instead of having a "Type probe_type"
3424         keep the extra information as a TypeExpr probe_type_expr since the
3425         "As" operator needs to perform some type checks.
3426
3427         * (As.DoResolve): If the type is a type parameter, ensure that it
3428         is constrained by a class.
3429
3430 2005-09-22  Miguel de Icaza  <miguel@novell.com>
3431
3432         * statement.cs (Lock): Use the TemporaryVariable class instead of
3433         manually using local variables as those do not work when variables
3434         are captured.
3435
3436         * ecore.cs: Moved the TemporaryVariable class from being a nested
3437         class inside Foreach to be a public class that can be employed in
3438         other places. 
3439
3440 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
3441
3442         * cs-parser.jay: interface_accessors replaced by
3443         accessor_declarations.
3444
3445         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
3446         location.
3447         
3448         * statement.cs (GotoCase.Resolve): Convert null constant to
3449         null case.
3450         (SwitchLabel.ResolveAndReduce): Ditto.
3451         (SwitchLabel.NullStringCase): Custom null stamp.
3452         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
3453         
3454         typemanager.cs (CSharpSignature): Don't skip first argument
3455         for full names.
3456
3457 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
3458
3459         * cfold.cs, constant.cs, convert.cs, ecore.cs,
3460         expression.cs, iterators.cs, literal.cs: Store constants and
3461         literals location.
3462         
3463         * class.cs (MemberBase.ShortName): Pass location.
3464         
3465         * cs-parser.jay: Some location fixes.
3466         
3467         * ecore.cs (Expression.Location): Made virtual.
3468
3469 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
3470
3471         Fix #72930.
3472         * const.cs (Const.ResolveValue): Check for assigning non-null
3473         value to reference type.
3474
3475 2005-09-26  Raja R Harinath  <rharinath@novell.com>
3476
3477         Fix #76133.
3478         * expression.cs (This.VerifyFixed): In a value type T, the type of
3479         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
3480         value type R, 'this' is treated as a value parameter.
3481
3482 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3483
3484         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3485         if the underlying types are the same, otherwise we need to produce
3486         code that will do the proper cast.
3487
3488         This was exposed by Marek's constant rewrite which produced
3489         invalid code for the call site:
3490
3491         enum X : long { a }
3492         void Method (X v) {}
3493
3494         Method ((X) 5)
3495
3496         This fixes test-49.cs
3497
3498 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3499
3500         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
3501           Type/Object should be allowed as well. Fixed bug #75968.
3502
3503 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3504
3505         * expression.cs : (Binary.DoResolve): when one is enum constant and
3506           another is constant 0, then return enum one *as enum type*.
3507           Fixed bug 74846.
3508
3509 2005-10-04  Martin Baulig  <martin@ximian.com>
3510
3511         * ecore.cs (PropertyExpr.ResolveAccessors): Cosmetic fix; make the
3512         `SetMemberIsUsed()' work for generics, too.
3513
3514 2005-10-04  Martin Baulig  <martin@ximian.com>
3515
3516         * expression.cs (DelegateInvocation.EmitStatement): Make this work
3517         for corlib.  Fixes #75691.
3518
3519 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
3520
3521         Fix #76255.
3522         * driver.cs: Fix compilation files with full root path.
3523
3524 2005-09-25  Miguel de Icaza  <miguel@novell.com>
3525
3526         * report.cs (SymbolRelatedToPreviousError): Format the output so
3527         it does not use an open parenthesis that is never closed. 
3528
3529         * driver.cs: Follow coding guidelines
3530
3531 2005-09-18  Miguel de Icaza  <miguel@novell.com>
3532
3533         * driver.cs: Set InEmacs based on the environment variable EMACS. 
3534
3535         * location.cs (InEmacs): in this mode, do not report column
3536         location as it confuses Emacs.
3537
3538 2005-10-03  Raja R Harinath  <rharinath@novell.com>
3539
3540         * support.cs (SeekableStreamReader.Position): Don't error out when
3541         the requested position is just beyond the end of the current
3542         buffered data.
3543
3544 2005-09-28  Raja R Harinath  <rharinath@novell.com>
3545
3546         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
3547         try to keep in sync with the byte count of the underlying Stream.
3548         However, this limits us to a window size of 2048 characters: i.e.,
3549         the maximum lookahead of our lexer/parser can be 2048 characters.
3550
3551 2005-09-22  Martin Baulig  <martin@ximian.com>
3552
3553         * driver.cs: Removed a debugging FIXME.
3554
3555 2005-09-21  Raja R Harinath  <rharinath@novell.com>
3556
3557         * cs-parser.jay (type_arguments): Add CS1644 check.
3558         * decl.cs (DeclSpace.AddToContainer): Restore CS0694 check.
3559
3560 2005-09-15  Raja R Harinath  <rharinath@novell.com>
3561
3562         * Makefile (PROGRAM): Make profile specific.
3563         (gmcs.exe) [PROFILE=net_2_0]: Add utility rule to copy gmcs.exe to
3564         the current directory.
3565
3566         Fix test-455.cs.
3567         * expression.cs (Invocation.EmitCall): Remove optimization on
3568         this_call since it doesn't handle 'this' being a value type.
3569
3570 2005-09-05  Geoff Norton  <gnorton@customerdna.com>
3571
3572         * driver.cs: Ensure file handles are closed after parsing
3573
3574 2005-09-05  Miguel de Icaza  <miguel@novell.com>
3575
3576         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
3577         if the underlying types are the same, otherwise we need to produce
3578         code that will do the proper cast.
3579
3580         This was exposed by Marek's constant rewrite which produced
3581         invalid code for the call site:
3582
3583         enum X : long { a }
3584         void Method (X v) {}
3585
3586         Method ((X) 5)
3587
3588         This fixes test-49.cs
3589
3590 2005-09-05  Martin Baulig  <martin@ximian.com>
3591
3592         * expression.cs (As.DoResolve): Use `probe_type.IsValueType'
3593         instead of `TypeManager.IsValueType (probe_type)'; fixes #75668.
3594
3595         * cs-parser.jay (delegate_declaration): Small fix for #75852.
3596
3597 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3598
3599         * typemanager.cs: (IsUnmanagedType) : generic parameter is not allowed
3600           to be a pointer type due to the spec 25.2, so check if declaring
3601           type is generic type definition. Fixed bug #75772.
3602
3603 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
3604
3605         Fixed bug #75957.
3606         * generic.cs : (TypeManager.IsEqual(Type,Type)): it should work when
3607           both types are not defined by methods.
3608         * expression.cs : (Invocation.IsApplicable): it should work when
3609           the argument type is equal to the parameter type, not only when
3610           ImplicitConversionExists() returns true.
3611
3612 2005-09-02  Raja R Harinath  <rharinath@novell.com>
3613
3614         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
3615         internal.
3616
3617         Fix #75941.
3618         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
3619         flow-branching for LocalVariableReferences in case we were invoked
3620         from a MemberAccess.
3621         * expression.cs (LocalVariableReference.VerifyAssigned): New.
3622         Carved out of ...
3623         (LocalVariableReference.DoResolveBase): ... this.
3624         (MemberAccess.Resolve): Do the check that was disabled during
3625         SimpleNameResolve.
3626
3627 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3628
3629         * class.cs :
3630           (PartialContainer.Create): check abstract/sealed/static strictly
3631           but abstract/sealed can exist only at one side. Fixed bug #75883.
3632
3633 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
3634
3635         Fix #75945.
3636         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
3637         specified, don't default to UnmanagedType.I4.
3638
3639 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
3640
3641         * expression.cs : conditional operator should check possibly
3642           incorrect assign expression. Fixed bug #75946.
3643
3644 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3645
3646         Fix #75934.
3647         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
3648         (ScopeInfo.EmitScopeType): Use it to construct field names from
3649         names of captured locals.
3650
3651         Fix #75929.
3652         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
3653         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
3654         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
3655         (ExplicitConversion): Remove enum cases already handled by
3656         implicit conversion.  Move implicit conversion check to the beginning.
3657         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
3658         * expression.cs (ArrayCreation.EmitDynamicInitializers):
3659         Don't treat System.Enum as a struct.
3660
3661 2005-08-30  Jb Evain  <jbevain@gmail.com>
3662
3663         * attribute.cs: handles as expression in parameters.
3664
3665 2005-08-30  Raja R Harinath  <rharinath@novell.com>
3666
3667         Fix #75802.
3668         * class.cs (TypeContainer.VerifyClsName): Don't use a
3669         PartialContainer when verifying CLS compliance.
3670         (AbstractPropertyEventMethod): Set Parent here, ...
3671         (PropertyMethod): ... not here.
3672
3673 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
3674
3675         * attribute.cs : escaped attribute name should not be allowed to be
3676           resolved (e.g. @class as classAttribute). Fixed bug #75930.
3677
3678 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3679
3680         Fix #75927.
3681         * convert.cs (ImplicitStandardConversionExists): Allow zero also
3682         when converting a long constant to unsigned long.
3683         * expression.cs (Invocation.OverloadResolve): Add sanity check to
3684         detect where IsApplicable and VerifyArgumentsCompat disagree.
3685
3686 2005-08-29  Raja R Harinath  <rharinath@novell.com>
3687         and Carlos Alberto Cortez  <carlos@unixmexico.org>
3688
3689         Fix #75848.
3690         * class.cs (TypeContainer.CanElideInitializer): New helper.
3691         (TypeContainer.EmitFieldInitializers): Use it to determine if we
3692         can safely emitting the initializer of a field.
3693
3694 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3695
3696         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
3697           allowed inside a switch (without loop). Fixed bug #75433.
3698
3699 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
3700
3701         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
3702         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
3703
3704 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3705
3706         * driver.cs : kinda reverting the default encoding changes (not exact 
3707           revert since I noticed that "codepage:reset" might not work fine).
3708
3709 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3710
3711         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
3712           Location. Now getter and setter store location correctly.
3713           (errors/cs0111-12.cs now reports the expected location.)
3714
3715 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
3716
3717         * driver.cs : Use default encoding on the environment.
3718           Removed (now that) extra parameter for SeekableStreamReader.
3719         * support.cs : (SeekableStreamReader) third .ctor() argument for
3720           StreamReader is not required (always true). preamble size could
3721           be acquired in simpler and safe way.
3722
3723 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
3724
3725         * cs-parser.jay: report CS0642 at warning level 3
3726           and report CS0642 for an if else statement also
3727           fixes bug #74745. Patch by John Luke (and a bit
3728           modified by me).
3729           Removed extra CS0642 warning check for "while",
3730           "for" and "fixed".
3731         * statement.cs: In Block.Resolve(), CS0642 check
3732           is reimplemented to check a sequence of an empty
3733           statement and a block.
3734
3735           Both fix bug #66777.
3736
3737 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
3738
3739         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
3740         detection until I fix it.
3741         
3742         * cs-tokenizer.cs: Changed error message.
3743         
3744         * cs-parser.jay: Fixed 2 error locations.
3745         
3746         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
3747         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
3748         properties.
3749         
3750         * enum.cs (GetSignatureForError): Fixed.
3751         
3752         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
3753         method detection.
3754         
3755         * class.cs,
3756         * typemanager.cs (RegisterProperty): Removed.
3757         
3758         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
3759
3760 2005-08-24  Raja R Harinath  <rharinath@novell.com>
3761
3762         Fix #75874.
3763         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
3764         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
3765
3766 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3767
3768         * expression.cs : tiny fix is required for not warning positive ulong.
3769           See test-441.cs.
3770
3771 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3772
3773         * expression.cs : add CS0652 check for constant and integral
3774           expression. Fixed bug #53974.
3775
3776 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3777
3778         * expression.cs : in DoNumericPromotions(), check if there is implicit
3779           conversion overload for string (to check CS0034). Fixed bug #52492.
3780
3781 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3782
3783         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
3784
3785 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3786
3787         * ecore.cs : report location when it is *not* Null.
3788
3789 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
3790
3791         * codegen.cs,
3792           ecore.cs,
3793           flowanalysis.cs,
3794           expression.cs:
3795           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
3796           correctly. Fixed bug #75721.
3797
3798 2005-08-23  Raja R Harinath  <rharinath@novell.com>
3799
3800         * support.cs (SeekableStreamReader.Position): Avoid an expensive
3801         loop that performs 'min (pos, char_count)'.
3802
3803         Fix #75862.
3804         * expression.cs (Unary.ResolveOperator): Don't discard implicit
3805         converted value in Operator.OnesComplement.
3806
3807 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
3808
3809         * anonymous.cs: If the anon method is pulled into a helper class,
3810         it needs to be `internal' not `private'. Fixes runtime behavior on
3811         msft. bug #75704
3812
3813 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
3814
3815         Fix #75803
3816         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
3817         is a partial class.
3818
3819 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
3820
3821         The big constants rewrite
3822         Fix #75746, #75685 and more
3823         As a side effect saved 1MB for MWF ;-)
3824         
3825         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
3826         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
3827         enum based for corlib compilation.
3828         
3829         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
3830         subtractions.
3831         
3832         * class.cs (FixedField.Define): Use ResolveAsConstant.
3833         
3834         * const.cs (IConstant): Interface constants and enums.
3835         (Const.ResolveValue): New method for constant resolvning.
3836         (ExternalConstant): Constants from imported assemblies.
3837         
3838         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
3839         conversion; like enums.
3840         (Constant.ToType): Converts this constant to different type.
3841         (Constant.Increment): Adds 1.
3842         
3843         * convert.cs (ImplicitConversionRequired): Simplified.
3844         
3845         * cs-parser.jay: Create EnumMember directly.
3846         
3847         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
3848         
3849         * doc.cs (GenerateEnumDocComment): Removed.
3850         
3851         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
3852         (ConvertIntLiteral): Removed.
3853         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
3854         
3855         * enum.cs (EnumMember): Implement IConstant.
3856         (Enum.IsValidEnumConstant): Removed.
3857         (Enum.GetNextDefaultValue): Removed.
3858         (Enum.FindMembers): Updated.
3859         (Enum.GenerateDocComment): Iterate enum members.
3860         
3861         * expression.cs (Cast.TryReduce): Handle enums correctly.
3862         (New.Constantify): Made public.
3863         (MemberAccess.DoResolve): Removed contant specific if(s).
3864         
3865         * literal.cs (NullLiteral): Implement new abstract methods.
3866         
3867         * statement.cs (GotoCase.Resolve): Use new constant methods.
3868         (SwitchLabel.ResolveAndReduce): Use new constant methods.
3869         
3870         * typemanager.cs (LookupEnum): Removed.
3871         (IsEnumType): Fixed to work with corlib.
3872         (RegisterConstant): Removed.
3873         (LookupConstant): Removed.
3874         (GetConstant): Changed to work with IConstant.
3875
3876 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
3877
3878         * location.cs : Fixed overflown (>255) column number.
3879
3880 2005-08-03  Raja R Harinath  <rharinath@novell.com>
3881
3882         First cut of the qualified-alias-member feature.
3883         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
3884         token.
3885         * cs-parser.jay (DOUBLE_COLON): New token.
3886         (namespace_or_type_name): Add rule for recognizing
3887         qualified-alias-members.
3888         (primary_expression): Likewise.
3889         (element_access): Allow QualifiedAliasMember as a possible
3890         type-bearing expression.
3891         (local_variable_type, local_variable_pointer_type): Likewise.
3892         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
3893         aliases in the current and enclosing namespace declarations.
3894         (NamespaceEntry.UsingAlias): Add CS0440 warning.
3895         * decl.cs (MemberName.is_double_colon): New.
3896         (MemberName.MemberName): Add new constructor for alias-member.
3897         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
3898         * expression.cs (QualifiedAliasMember): New expression type.
3899
3900 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3901
3902         * location.cs : it borked when no argument was specified.
3903
3904 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3905
3906         * location.cs : tiny ToString() format fix.
3907
3908 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3909
3910         * statement.cs : oops, it was missing.
3911
3912 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
3913
3914         A set of fixes for precise line/column location.
3915
3916         * location.cs :
3917           "token" field now holds a file/line "delta", a line number offset 
3918           from the segment, and a column number. See also:
3919           http://lists.ximian.com/pipermail/mono-devel-list/2004-
3920           December/009508.html
3921           Removed static IsNull. Use instance IsNull property instead.
3922         * cs-tokenizer.cs :
3923           For some tokens it stores Location. For Identifier it stores
3924           LocatedToken which is a pair of string name and location.
3925           Column numbers are adjusted only at getChar().
3926         * report.cs :
3927           Use Location.ToString() for reporting (it now contains column).
3928         * cs-parser.jay :
3929           Largely modified to use LocatedToken instead of
3930           string (IDENTIFIER), and to acquire Location from some tokens.
3931         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
3932           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
3933           codegen.cs :
3934           Now MemberName holds Location. DeclSpace.ctor() receives Location
3935           as a parameter. Removed extra parameters to all derived classes.
3936           Replaced Location.IsNull() with instance property.
3937         * assign.cs, expression.cs :
3938           Added .ctor() overload that omits Location.
3939         * attribute.cs :
3940           Added "nameEscaped" flag that indicates the identifier was escaped
3941           in the source file. This fixes bug #57047.
3942
3943 2005-09-02  Martin Baulig  <martin@ximian.com>
3944
3945         * class.cs: Make CS3005 a warning, not an error.
3946
3947 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
3948
3949         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
3950         New method, looking for lo-case imported cls type.
3951
3952         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
3953         here.
3954
3955         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
3956
3957         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
3958
3959         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
3960         all_imported_types.
3961         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
3962
3963         Optimized to save 3.5 MB for SWF compilation.
3964
3965 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
3966
3967         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
3968         (PartialContainer.Create): Moved logic AddToContainer.
3969         (PartialContainer.MarkForDuplicationCheck): Shares name.
3970         
3971         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
3972         place.
3973         
3974         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
3975         initialization.
3976         (Namespace.GetSignatureForError): New method.
3977         
3978         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
3979         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
3980
3981 2005-08-01  Raja R Harinath  <rharinath@novell.com>
3982
3983         Fix #75669.
3984         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
3985         member lookup rather than qualifier_type, since qualifier_type can
3986         be null.
3987
3988 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
3989
3990         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
3991         enum member.
3992
3993 2005-07-31  Miguel de Icaza  <miguel@novell.com>
3994
3995         * statement.cs: Copy the local exception into the exception
3996         captured local.  Fixes 75674
3997
3998 2005-07-31  Raja R Harinath  <harinath@gmail.com>
3999
4000         Fix #75658.
4001         * expression.cs (Invocation.OverloadResolve): Don't report error
4002         CS1501 if error CS1502 has been reported.
4003         (New.DoResolve): Delegate CS1501 reporting to
4004         Invocation.OverloadResolve.
4005
4006         Fix #75656.
4007         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
4008         invariant-meaning-in-block property in an enclosing block if
4009         necessary.
4010
4011 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
4012
4013         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
4014         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
4015         (Switch.CheckSwitch): Just save 50kb for SWF.
4016
4017 2005-07-27  Martin Baulig  <martin@ximian.com>
4018
4019         * anonymous.cs (CaptureContext.AddField): Added
4020         `AnonymousContainer am' argument; compute its toplevel scope if
4021         it's not already computed.  Fixes #75649.
4022
4023 2005-07-26  Raja R Harinath  <rharinath@novell.com>
4024
4025         Fix #75628.
4026         * class.cs (Constructor.Emit): Reset block to null if the block
4027         resolve fails.
4028
4029 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4030
4031         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
4032
4033 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
4034
4035         * class.cs (MethodData.Define): Check whether accessor implementing
4036         interface is public.
4037
4038         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
4039
4040 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
4041
4042         Fix #57245
4043         * namespace.cs (LookupType): Moved same type check to...
4044         
4045         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
4046         with the same name.
4047
4048 2005-07-21  Raja R Harinath  <rharinath@novell.com>
4049
4050         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
4051         already found a typebuilder.
4052         * class.cs (MethodCore.IsDuplicateImplementation): Compare
4053         MemberNames, not strings.
4054
4055         * const.cs (Error_ExpressionMustBeConst): 
4056         Rename from Error_EpressionMustBeConst.
4057         * const.cs, class.cs, statement.cd: Update.
4058
4059 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
4060
4061         Fix #65573
4062
4063         * const.cs (Const.LookupConstantValue): Report missing contant expression
4064         everytime.
4065         (Error_EpressionMustBeConstant): Only one error method.
4066
4067         * class.cs, statement.c: Updated.
4068
4069 2005-07-20  Raja R Harinath  <rharinath@novell.com>
4070
4071         * statement.cs (Block.Flags): Add back HasVarargs.
4072         (Block.flags): Make protected.
4073         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
4074
4075         * typemanager.cs (types, typecontainers, user_types): Remove.
4076         (UserTypes, TypeContainers): Likewise.
4077         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
4078         (CleanUp, Reset): Update.
4079         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
4080         (GetNestedType): Use Type.GetNestedType.
4081         (CoreLookupType): Take two arguments, the namespace and the
4082         basename of the type.  Update to use the Namespace.Lookup
4083         mechanism.
4084         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
4085         (RealMemberLookup): Use IsNestedChildOf instead of playing with
4086         string concatenation and substring matches.
4087         * class.cs, enum.cs, delegate.cs: Update to changes.
4088
4089 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
4090
4091         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
4092         Expression and made virtual.
4093
4094         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
4095         (ImplicitStandardConversionExists): Fixed `byte' typo ?
4096
4097         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
4098
4099         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
4100         error message.
4101
4102         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
4103         change.
4104
4105 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
4106
4107         Fix #57707
4108         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
4109         AssemblyCultureAttribute is not used on executable.
4110
4111         * rootcontext.cs,
4112         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
4113
4114 2005-07-16  Raja R Harinath  <rharinath@novell.com>
4115
4116         Fix #60638.
4117         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
4118         New.  Reports CS0252/CS0253.
4119         Mostly taken from preliminary patch by Duncak Mak.
4120         (Binary.DoResolveOperator): Store results of operator lookup.
4121         Use them to detect if we need to warn about unintended reference
4122         comparisons.
4123
4124 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4125
4126         Fix #72969.
4127         * namespace.cs (Namespace.Lookup): Add back location parameter.
4128         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
4129         * delegate.cs, ecore.cs, expression.cs: Update to changes.
4130
4131         * codegen.cs (EmitContext.DeclSpace): Make readonly.
4132         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
4133         (Namespace.LookupType): ... this.
4134         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
4135         of namespaces.
4136         * typemanager.cs (LookupTypeReflection): Remove buggy code that
4137         purported to handle pointers.
4138         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
4139         CoreLookupType.
4140
4141 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4142
4143         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4144         type as namespace.
4145
4146 2005-07-15  Raja R Harinath  <rharinath@novell.com>
4147
4148         * namespace.cs (Namespace.Lookup): Drop location parameter.
4149         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
4150         (NamespaceEntry.Lookup): ... this.
4151         (NamespaceEntry.Error_AmbiguousTypeReference):
4152         Move here from DeclSpace.
4153         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
4154         names ...
4155         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
4156         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
4157         Move to NamespaceEntry.
4158         * delegate.cs, expression.cs: Update to changes.
4159
4160 2005-08-31  Martin Baulig  <martin@ximian.com>
4161
4162         Committing a patch from Atsushi Enomoto for #75850.
4163
4164         * statement.cs (Foreach.CollectionForeach.GetEnumeratorFilter):
4165         Prefer a generic enumerator over a non-generic one.
4166
4167 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
4168
4169         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
4170         * gmcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
4171
4172 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4173
4174         * driver.cs : reverting default encoding change as well as mcs.
4175
4176 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
4177
4178         * driver.cs, support.cs : merged r48826.
4179           Marek Safer wrote:
4180           > could you integrate your mcs changes to gmcs otherwise
4181           > gmcs cannot compile some files.
4182
4183 2005-08-20  Martin Baulig  <martin@ximian.com>
4184
4185         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
4186         scope if we don't already have it.
4187
4188         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
4189         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
4190         fixes #75867.
4191
4192 2005-07-31  Miguel de Icaza  <miguel@novell.com>
4193
4194         * statement.cs: Copy the local exception into the exception
4195         captured local.  Fixes 75674
4196
4197 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
4198
4199         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
4200         type as namespace.
4201
4202 2005-08-12  Martin Baulig  <martin@ximian.com>
4203
4204         * expression.cs (MemberAccess.ResolveNamespaceOrType): Only search
4205         for nested types here to avoid hitting the cache too early.
4206
4207 2005-08-09  Miguel de Icaza  <miguel@novell.com>
4208
4209         * enum.cs: On the new compiler CLS error 3005 is now a warning not
4210         an error. 
4211
4212 2005-08-03  Martin Baulig  <martin@ximian.com>
4213
4214         Make iterators in generic methods work; see gtest-191.cs.
4215
4216         * generic.cs
4217         (Constraints.Resolve): Protect against being called twice.
4218
4219         * class.cs
4220         (TypeContainer.GetClassBases): Make this `protected virtual'.
4221
4222         * iterator.cs (Iterator.ctor): Added `GenericMethod' argument.
4223         (Iterator.GetClassBases): Override this and compute the base
4224         classes here.
4225         (Iterator.DefineNestedTypes): If we're a generic method, all our
4226         method type parameters become class type parameters on the proxy
4227         class.
4228
4229         * statement.cs
4230         (ToplevelBlock.Parameters): Make this a property, not a field.
4231         (ToplevelBlock.ResolveMeta): Update the `parameters' from the `ip'.
4232
4233 2005-08-03  Martin Baulig  <martin@ximian.com>
4234
4235         * typemanager.cs (TypeManager.IsSubclassOf): Use
4236         `TypeManager.IsEqual' instead of `Type.Equals'; fixes gtest-190.cs.
4237         (TypeManager.GetFullName_recursed): Improved.
4238
4239 2005-07-27  Carlos Alberto Cortez <calberto.cortez@gmail.com>
4240
4241         Fix #75417
4242         * ecore.cs (Expression.IsAccessorAccessible): Change the check for
4243         Private accessor case, using TypeManager.IsPrivateAccessible instead of
4244         invocation_type == mi.DeclaringType, since the first one also checks
4245         other condition used by generic instances.
4246         
4247 2005-07-27  Martin Baulig  <martin@ximian.com>
4248
4249         * anonymous.cs (CaptureContext.AddField): Added
4250         `AnonymousContainer am' argument; compute its toplevel scope if
4251         it's not already computed.  Fixes #75649.
4252
4253 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
4254
4255         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
4256         CheckAttributeType and refactored.
4257         (Attribute.ResolvePossibleAttributeType): Changed to reuse
4258         ResolveAsTypeTerminal error handling.
4259         (ResolveAsTypeTerminal): Introduced because of global attributes extra
4260         handling.
4261         (GetSignatureForError): Print errors in same way.
4262
4263         * class.cs,
4264         * codegen.cs: Reflect attribute GetSignatureForError change.
4265
4266         * ecore.cs,
4267         * expression.cs: Add silent parameter to ResolveAsTypeStep.
4268
4269         * namespace.cs (UsingEntry): Refactored to make fields private.
4270
4271         * assign.cs,
4272         statement.cs: Error_UnexpectedKind has extra parameter.
4273
4274 2005-07-14  Raja R Harinath  <rharinath@novell.com>
4275
4276         * ecore.cs (IAlias): Remove.
4277         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
4278         that implement the interface.
4279         * namespace.cs (Namespace): Likewise.
4280         (Namespace.declspaces): Renamed from 'defined_names'.
4281         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
4282         DeclSpace instead of an IAlias.
4283         * tree.cs (Tree.AddDecl): Update.
4284
4285 2005-07-12  Raja R Harinath  <rharinath@novell.com>
4286
4287         * statement.cs (Block.Flags); Remove HasVarargs.
4288         (Block.HasVarargs): Move to ToplevelBlock.
4289         (Block.ThisVariable, Block.AddThisVariable): Likewise.
4290         (Block.Variables): Make protected.  Initialize variable hashtable
4291         if necessary.
4292         (Block.AddVariable): Update.
4293         (Block.Resolve): Update to changes.
4294         (ToplevelBlock.HasVarargs): New boolean.
4295         (ToplevelBlock.ThisVariable): Move here from Block.
4296         (ToplevelBlock.AddThisVariable): Likewise.
4297         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
4298         * expression.cs (This.ResolveBase): Update to changes.
4299         (ArglistAccess.DoResolve): Likewise.
4300
4301 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4302
4303         Fix #75321
4304         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
4305
4306         * class.cs (TypeContainer.VerifyMembers): Distinguish between
4307         not used and not used & assigned.
4308         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
4309
4310 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
4311
4312         Fix #75053
4313         * expression.cs (Is.DoResolve): null is never provided type.
4314
4315 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
4316
4317         Fix #52496
4318         * cs-parser.jay: Less strict event error rule to catch more errors.
4319
4320 2005-07-11  Martin Baulig  <martin@ximian.com>
4321
4322         * generic.cs (ConstructedType.CheckConstraints): Improve the check
4323         for the constructor constraint: we do not only have to check
4324         whether the class has a public constructor, but also ensure that
4325         it's parameterless.  Fixes #75492.
4326
4327 2005-07-11  Martin Baulig  <martin@ximian.com>
4328
4329         * expression.cs (Binary.ResolveOperator): Only allow `==' and `!='
4330         between type parameters if they either have the reference type
4331         constraint or the class constraint.
4332
4333 2005-07-10  Kamil Skalski <nazgul@nemerle.org>
4334
4335         * generic.cs: Use MakeGenericType instead of BindGenericParameters.
4336
4337 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
4338
4339         Fix #74975
4340         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
4341         (ExtractSecurityPermissionSet): Cope with self referencing security
4342         attributes properly.
4343
4344         * driver.cs (SetOutputFile): Made public property OutputFile.
4345
4346 2005-07-07  Raja R Harinath  <rharinath@novell.com>
4347
4348         Fix #75486.
4349         * class.cs (TypeContainer.first_nonstatic_field): Rename from
4350         has_nonstatic_fields.  Make into a FieldBase pointer.
4351         (TypeContainer.AddField): Add CS0282 check.
4352         (TypeContainer.EmitType): Update.
4353
4354 2005-07-06  Miguel de Icaza  <miguel@novell.com>
4355
4356         * cs-tokenizer.cs (consume_identifier): Do not create strings to
4357         compare if they start with __.
4358
4359 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4360
4361         * statement.cs (Switch.SwitchGoverningType): Only look at
4362         UserCasts that don't need implicit standard conversions to one of
4363         the allowed switch types (Fixes test-322.cs).
4364         (LocalInfo.Resolve): Re-enable sanity-test.
4365
4366 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
4367
4368         * cs-tokenizer.cs (consume_identifier): Detect double undescores
4369         
4370         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
4371         
4372         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
4373
4374 2005-07-06  Raja R Harinath  <rharinath@novell.com>
4375
4376         Fix #75472.
4377         * ecore.cs (SimpleName.GetSignatureForError): Add.
4378         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
4379         (MemberAccess.GetSignatureForError): Add.
4380
4381 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
4382  
4383         The big error and warning messages review.
4384         
4385         * anonymous.cs,
4386         * assign.cs,
4387         * attribute.cs,
4388         * class.cs,
4389         * codegen.cs,
4390         * convert.cs,
4391         * cs-parser.jay,
4392         * cs-tokenizer.cs,
4393         * decl.cs,
4394         * delegate.cs,
4395         * doc.cs,
4396         * driver.cs,
4397         * ecore.cs,
4398         * enum.cs,
4399         * expression.cs,
4400         * flowanalysis.cs,
4401         * iterators.cs,
4402         * literal.cs,
4403         * location.cs,
4404         * modifiers.cs,
4405         * namespace.cs,
4406         * parameter.cs,
4407         * pending.cs,
4408         * report.cs,
4409         * rootcontext.cs,
4410         * statement.cs,
4411         * support.cs,
4412         * tree.cs,
4413         * typemanager.cs: Updated.
4414         
4415         * class.cs: (MethodCore.SetYields): Moved here to share.
4416         (PropertyMethod.Define): Moved iterator setup here.
4417         
4418         * iterators.cs: Add orig_method to have full access to parent
4419         container.
4420
4421 2005-07-05  Raja R Harinath  <rharinath@novell.com>
4422
4423         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
4424         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
4425         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
4426         variable of struct type.
4427         * expression.cs (Unary.ResolveOperator): Update to change.
4428         (Indirection.VerifyFixed): Likewise.
4429         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
4430         (ParameterReference.VerifyFixed): Value parameters are fixed.
4431         (This.VerifyFixed): Treat 'this' as a value parameter.
4432         * statement.cs (LocalInfo.IsFixed): Remove.
4433
4434 2005-07-01  Martin Baulig  <martin@ximian.com>
4435
4436         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4437         `ec.EmitThis ()' to get the correct scope.
4438
4439 2005-07-01  Martin Baulig  <martin@ximian.com>
4440
4441         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
4442         instance is a ParameterReference; fixes #75299.
4443
4444 2005-06-30  Raja R Harinath  <rharinath@novell.com>
4445
4446         Fix #75412.
4447         * expression.cs (Indexers.map): Remove.
4448         (Indexers.Append): Filter out inaccessible setters and getters.
4449         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
4450
4451         Fix #75283.
4452         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
4453         Refactored from ...
4454         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
4455         (FieldExpr.Emit, PropertyExpr.Emit): Update.
4456         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
4457         * expression.cs (Invocation.EmitCall): Add CS0120 check.
4458
4459 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
4460
4461         Fix #75322
4462         * class.cs (FieldBase.GetInitializerExpression): One more field
4463         for backup.
4464
4465 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4466
4467         * pending.cs: Do not define a proxy if the base method is virtual,
4468         it will be picked up by the runtime (bug 75270).
4469
4470 2005-07-08  Martin Baulig  <martin@ximian.com>
4471
4472         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
4473         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
4474
4475 2005-07-07  Martin Baulig  <martin@ximian.com>
4476
4477         * generic.cs (ConstructedType.CheckConstraint): Use
4478         ResolveAsTypeStep(), not ResolveAsTypeTerminal() so we're not
4479         called recursively; fixes #75329.
4480
4481 2005-07-06  Martin Baulig  <martin@ximian.com>
4482
4483         * generic.cs (TypeManager.InferTypeArguments): Added support for
4484         anonymous methods; fixes #75461.
4485
4486 2005-07-01  Martin Baulig  <martin@ximian.com>
4487
4488         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
4489         `ec.EmitThis ()' to get the correct scope.
4490
4491 2005-07-01  Martin Baulig  <martin@ximian.com>
4492
4493         * ecore.cs (FieldExpr.DoResolve): Only capture the field if it's
4494         instance is `This'; fixes #75299.
4495
4496 2005-06-30  Martin Baulig  <martin@ximian.com>
4497
4498         * class.cs (Indexer): Implement IIteratorContainer; added support
4499         for iterators in indexers.
4500
4501         * codegen.cs
4502         (EmitContext.CurrentIterator): Make this a property, not a field.
4503
4504         * anonymous.cs (AnonymousContainer.Iterator): New public property.
4505
4506 2005-06-28  Miguel de Icaza  <miguel@novell.com>
4507
4508         * pending.cs: Do not define a proxy if the base method is virtual,
4509         it will be picked up by the runtime (bug 75270).
4510
4511 2005-06-28  Martin Baulig  <martin@ximian.com>
4512
4513         * cs-parser.jay (interface_method_declaration): Avoid a
4514         reduce/reduce conflict by moving some of the code into a separate
4515         `interface_method_declaration_body' rule; fixes #75368.
4516
4517 2005-06-28  Martin Baulig  <martin@ximian.com>
4518
4519         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Move the
4520         array check after the check for TypeBuilder's.
4521
4522 2005-06-21  Raja R Harinath  <rharinath@novell.com>
4523
4524         * convert.cs (FindMostEncompassedType): Add two trivial special
4525         cases (number_of_types == 0 || number_of_types == 1).
4526         (FindMostEncompasingType): Likewise.
4527
4528 2005-06-17  Raja R Harinath  <rharinath@novell.com>
4529
4530         Some cleanups preparing for the fix of #75283.
4531         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
4532         error testing.
4533         (EventExpr.InstanceResolve): Likewise.
4534         (EventExpr.DoResolve): Remove redundant checks.
4535
4536 2005-06-08  Miguel de Icaza  <miguel@novell.com>
4537
4538         * class.cs: Small fix.
4539
4540 2005-06-08  Raja R Harinath  <rharinath@novell.com>
4541
4542         Fix #75160.
4543         * class.cs (GetPartialBases): Fix return value check of
4544         part.GetClassBases.
4545
4546 2005-06-07  Raja R Harinath  <rharinath@novell.com>
4547
4548         Ensure that partial classes are registered in their enclosing
4549         namespace.  Initial part of fix of #75160.
4550         * tree.cs (Tree.RecordDecl): Add new namespace argument.
4551         Register declspace with namespace here, not in
4552         DeclSpace.RecordDecl.
4553         * cs-parser.jay: Pass namespace to RecordDecl.
4554         * class.cs (PartialContainer.Create): Likewise.
4555         (ClassPart.DefineType): New sanity-check.  Throws an exception if
4556         called.
4557         * decl.cs (Declspace.RecordDecl): Remove.
4558         * namespace.cs (NamespaceEntry.DefineName): Remove.
4559
4560 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4561
4562         * rootcontext.cs: Reset TargetExt as well.
4563
4564 2005-06-03  Raja R Harinath  <rharinath@novell.com>
4565
4566         * ecore.cs (Expression.Resolve): Emit CS0654 error when
4567         -langversion:ISO-1.
4568
4569 2005-06-02  Raja R Harinath  <rharinath@novell.com>
4570
4571         Fix #75080, cs0119.cs.
4572         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
4573         of ...
4574         (Expression.Resolve): ... this.  Use it.  Remove bogus code
4575         allowing ExprClass.Type and ExprClass.Namespace for
4576         ResolveFlags.VariableOrValue.
4577         (Expression.Resolve) [1-argument variant]: Change default resolve
4578         flags based on language version.
4579         (Expression.Error_UnexpectedKind): Use a simple string array
4580         rather than an ArrayList.
4581         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
4582         not ExprClass.Type.
4583         (TypeOfVoid.DoResolve): Likewise.
4584         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
4585         flags argument -- it always has the same value.
4586
4587 2005-05-31  Raja R Harinath  <rharinath@novell.com>
4588
4589         Fix #75081.
4590         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
4591         Use it in the error message.
4592         * assign.cs, expression.cs, statement.cs: Update.
4593
4594 2005-05-30  Raja R Harinath  <rharinath@novell.com>
4595
4596         Fix #75088.
4597         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
4598         the "almostMatchedMember" case too.
4599         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
4600         that failed the accessibility checks to 'almost_match'.
4601
4602 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
4603
4604         * attribute.cs: Use internal MethodBuilder methods to set
4605         ExactSpelling and SetLastError on PInvoke methods, instead
4606         of passing them via charset.  Fixes #75060.
4607
4608 2005-05-27  Raja R Harinath  <rharinath@novell.com>
4609
4610         * parameter.cs (Parameter): Remove TODO comment.
4611         (Parameter.DefineParameter): Remove Location parameter.
4612         (Parameters.LabelParameters): Likewise.
4613         * class.cs (Constructor.Emit): Update to change.
4614         (MethodData.Emit): Likewise.
4615         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
4616         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
4617
4618 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
4619
4620         * parameter.cs,
4621           Removed Parameters.Location and added Parameter.Location instead.
4622           Removed Location parameter from Emit() and GetSignature().
4623         * anonymous.cs,
4624           class.cs,
4625           cs-parser.jay,
4626           delegate.cs,
4627           iterators.cs,
4628           statement.cs :
4629           Modified all related calls.
4630
4631 2005-06-21  Martin Baulig  <martin@ximian.com>
4632
4633         * generic.cs (NullCoalescingOperator.Emit): Make this work if the
4634         left-hand side is not a nullable type; fixes #75328.
4635
4636 2005-06-21  Martin Baulig  <martin@ximian.com>
4637
4638         * typemanager.cs
4639         (TypeManager.CSharpName): Use GetFullName() instead of `t.FullName'.
4640         (TypeManager.GetFullNameSignature): Likewise.
4641
4642         * convert.cs (Convert.Error_CannotImplicitConversion): Compare
4643         `source.FullName' and `target.FullName' to check whether there are
4644         two conflicting definitions.
4645
4646 2005-06-21  Martin Baulig  <martin@ximian.com>
4647
4648         * convert.cs (Convert.ImplicitTypeParameterConversion): Always use
4649         a BoxedCast - also for reference types - to be compatible with csc.
4650
4651 2005-06-21  Martin Baulig  <martin@ximian.com>
4652
4653         * expression.cs (MemberAccess.DoResolve): Add support for nested
4654         types in a generic instance; fixes #75320.
4655
4656 2005-06-20  Martin Baulig  <martin@ximian.com>
4657
4658         * generic.cs (TypeManager.InferType): Also walk the class
4659         hierarchy for generic instances; fixes #75261.
4660
4661 2005-06-17  Martin Baulig  <martin@ximian.com>
4662
4663         * typemanager.cs (TypeManager.IsBuiltinType): Use TypeToCoreType()
4664         to make things work for corlib.
4665
4666 2005-06-15  Martin Baulig  <martin@ximian.com>
4667
4668         * attribute.cs (Attribute.CheckSecurityActionValidity): Remove the
4669         obsolete `SecurityAction' values.
4670
4671 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
4672
4673         * rootcontext.cs: Reset TargetExt as well.
4674         
4675 2005-06-09  Martin Baulig  <martin@ximian.com>
4676
4677         * delegate.cs (Delegate.VerifyMethod): Added
4678         `MethodGroupExpr old_mg' argument; inherit its
4679         `HasTypeParameters'; fix #75085.
4680
4681 2005-06-09  Martin Baulig  <martin@ximian.com>
4682
4683         * expression.cs (Invocation.OverloadResolve): Correctly handle
4684         generic methods for the SetMemberIsUsed(); fix #75064.
4685
4686 2005-06-09  Martin Baulig  <martin@ximian.com>
4687
4688         * statement.cs (Throw.Resolve): Use TypeManager.IsSubclassOf();
4689         fixes #75062.
4690
4691 2005-06-08  Martin Baulig  <martin@ximian.com>
4692
4693         * cs-parser.jay (nullable_type_or_conditional): If we put the
4694         nullable back and our `type' is a `ComposedCast', remove the
4695         nullable from it.  Fixes #75156.
4696
4697         * expression.cs (ComposedCast.RemoveNullable): New public method.
4698
4699 2005-06-08  Martin Baulig  <martin@ximian.com>
4700
4701         The big Iterators rewrite :-)
4702
4703         * iterators.cs: Rewrite this to use the anonymous methods framework.
4704
4705         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
4706         before the TypeContainers; see 2test-21.cs.
4707
4708         * class.cs
4709         (TypeContainer.DefineType): Don't create a new EmitContext if we
4710         already have one (this only happens if we're an Iterator).
4711         (TypeContainer.Define): Also call Define() on all our iterators.
4712         (Method.CreateEmitContext): Added support for iterators.
4713
4714         * anonymous.cs
4715         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
4716         (AnonymousContainer.CreateMethodHost): Moved here from
4717         AnonymousMethod and made abstract.
4718         (AnonymousContainer.CreateScopeType): New abstract method.
4719         (AnonymousContainer.IsIterator): New public property.
4720         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
4721         get the ScopeTypeBuilder rather than manually defining it here. 
4722         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
4723         iterators here.
4724
4725         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
4726         before RootContext.DefineTypes().
4727
4728         * codegen.cs (EmitContext.RemapToProxy): Removed.
4729         (EmitContext.CurrentAnonymousMethod): Changed type from
4730         AnonymousMethod -> AnonymousContainer.
4731         (EmitContext.ResolveTopBlock): Protect from being called twice.
4732         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
4733         (EmitContext.EmitThis): Removed the iterators hacks; use the
4734         anonymous methods framework for that.
4735
4736         * statement.cs
4737         (ToplevelBlock.Container): Make this a property, not a field.
4738         (ToplevelBlock.ReParent): New public method; move the
4739         ToplevelBlock into a new container.
4740         (Foreach.TemporaryVariable): Simplify.
4741
4742 2005-06-05  Martin Baulig  <martin@ximian.com>
4743
4744         * statement.cs (LocalInfo.CompilerGenerated): New flag.
4745         (Block.AddTemporaryVariable): New public method; creates a new
4746         `LocalInfo' for a temporary variable.
4747         (Block.EmitMeta): Create the LocalBuilders for all the temporary
4748         variables here.
4749         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
4750         non-iterator variables.
4751
4752 2005-06-05  Martin Baulig  <martin@ximian.com>
4753
4754         * statement.cs (Foreach.TemporaryVariable): Create the
4755         LocalBuilder in the Emit phase and not in Resolve since in some
4756         situations, we don't have an ILGenerator during Resolve; see
4757         2test-19.cs for an example.
4758
4759 2005-06-04  Martin Baulig  <martin@ximian.com>
4760
4761         The big Foreach rewrite - Part II.
4762
4763         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
4764         with `PropertyInfo ienumerator_getcurrent'.
4765
4766         * codegen.cs (VariableStorage): Removed.
4767
4768         * statement.cs
4769         (Foreach): Derive from Statement, not ExceptionStatement.
4770         (Foreach.CollectionForeach): New nested class.  Moved all the code
4771         dealing with collection foreach here.
4772         (Foreach.ForeachHelperMethods): Removed.
4773         (Foreach.TemporaryVariable): Implement IMemoryLocation.
4774
4775 2005-05-23  Martin Baulig  <martin@ximian.com>
4776
4777         * statement.cs (Try.DoResolve): Don't create a `finally' if we
4778         don't need to.  Fix #75014.
4779
4780 2005-05-26  Raja R Harinath  <rharinath@novell.com>
4781
4782         Improve user-defined conversion handling.
4783         * convert.cs (GetConversionOperators): Rewrite.  Return only the
4784         applicable operators.
4785         (AddConversionOperators): New.  Helper for GetConversionOperators.
4786         (FindMostEncompassedType, FindMostEncompassingType): Verify that
4787         there is only one most encompassed/encompassing type.
4788         (FindMostSpecificSource, FindMostSpecificTarget): Remove
4789         "applicable operator" handling.
4790         (UserConversion): Move cache here from GetConversionOperators.
4791         Directly cache the chosen operator, rather than the whole
4792         MethodGroup.
4793         (ExplicitNumericConversion): Fix buggy implementation of Decimal
4794         case.  Allow conversion of decimal to sbyte and byte too.
4795         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
4796         New static methods.  Used to avoid allocating EmptyExpressions in
4797         convert.cs.
4798
4799 2005-05-24  Duncan Mak  <duncan@novell.com>
4800
4801         * ecore.cs (CastFromDecimal): New class for casting a decimal to
4802         another class, used in Convert.ExplicitNumericConversion.
4803         (CastToDecimal): New class, similar to above, but casts to
4804         System.Decimal, used in Convert.ImplicitNumericConversion and also
4805         in explicit convesion from double/float to decimal.
4806
4807         * convert.cs (ImplicitNumericConversion): Handle implicit
4808         conversions to System.Decimal.
4809         (ExplicitNumericConversion): handle explicit conversions to
4810         System.Decimal.
4811
4812         This fixes #68711.
4813         
4814 2005-05-20  Miguel de Icaza  <miguel@novell.com>
4815
4816         * typemanager.cs: Do not throw an exception in the TypeBuilder
4817         case, we take care of it on the TypeCode.
4818
4819 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
4820         
4821         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
4822         is back.
4823         
4824         * cs-parser.jay: Catch more lexical errors.
4825         
4826         * report.cs: Add one more Error method.
4827         
4828         * rootcontext.cs,
4829         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
4830
4831 2005-05-20  Martin Baulig  <martin@ximian.com>
4832
4833         * class.cs (TypeContainer.CircularDepException): Removed.
4834         (TypeContainer.DefineType): Removed the `InTransit' stuff.
4835         (TypeContainer.CheckRecursiveDefinition): Check for circular class
4836         (CS0146) and interface (CS0529) dependencies here.
4837
4838 2005-05-20  Martin Baulig  <martin@ximian.com>
4839
4840         * expression.cs (New.DoResolve): Move the CS0712 check above the
4841         CS0144 check; otherwise it can never be reached.
4842
4843 2005-05-20  Martin Baulig  <martin@ximian.com>
4844
4845         * cs-parser.jay: Fix CS0080 check; add CS0231 and CS0257 from MCS.
4846
4847 2005-05-20  Martin Baulig  <martin@ximian.com>
4848
4849         * class.cs (TypeContainer.DefineType): Fix CS0698 check.
4850
4851         * typemanager.cs (TypeManager.IsAttributeType): New public method.
4852
4853 2005-05-19  Martin Baulig  <martin@ximian.com>
4854
4855         * delegate.cs
4856         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
4857         to disable error reporting.
4858
4859         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
4860         here since we don't want to report an error; see the new test-336.cs.
4861
4862 2005-05-19  Raja R Harinath  <rharinath@novell.com>
4863
4864         * statement.cs (ToplevelBlock.GetParameterReference)
4865         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
4866         Move here from class Block.
4867         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
4868         * expression.cs (ParameterReference.DoResolveBase): Likewise.
4869
4870 2005-05-18  Martin Baulig  <martin@ximian.com>
4871
4872         Fix #74978.
4873
4874         * flowanalysis.cs
4875         (FlowBranching.Reachability): Add non-static public And() and Or()
4876         methods.
4877         (FlowBranchingSwitch): New class; do the `break_origins' thing
4878         like in FlowBranchingLoop.
4879         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
4880         reachability, not just locals and parameters.
4881         (FlowBranching.MergeChild): Remove some of the hacks for loop and
4882         switch; MergeBreakOrigins() now takes care of that.
4883
4884 2005-05-18  Martin Baulig  <martin@ximian.com>
4885
4886         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4887         a loop and may leave it, reset the barrier; fixes #74974.
4888
4889 2005-05-16  Raja R Harinath  <rharinath@novell.com>
4890
4891         Fix test-382.cs.  Emit values of decimal constants.
4892         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
4893         Carved out of ...
4894         (TypeContainer.AddField): ... this.
4895         (TypeContainer.EmitFieldInitializers): Allow the list of fields
4896         with initializers to include 'Const's.
4897         (ClassPart.RegisterFieldForInitialization): Forward to
4898         PartialContainer.
4899         * const.cs (Const.Const): Pass initializer to base class.
4900         (Const.Define): In case of decimal constants, register them for
4901         initialization in a static constructor.
4902
4903 2005-05-14  Martin Baulig  <martin@ximian.com>
4904
4905         * statement.cs (Block.Resolve): Correctly handle unreachable code;
4906         do not call ResolveUnreachable() on unreachable statements in
4907         here, see the comment in the source code.
4908
4909 2005-05-13  Raja R Harinath  <rharinath@novell.com>
4910
4911         Fix #74934.
4912         * expression.cs (BinaryResolveOperator): If one of the operands of
4913         an equality comparison is 'null' and the other is a pointer type,
4914         convert the null to a NullPointer.
4915         * convert.cs (ImplicitReferenceConversion): If the expression is a
4916         NullLiteral and the target type is a pointer type, return a
4917         NullPointer instead.
4918         (ImplicitConversionStandard): Likewise.
4919
4920 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
4921         
4922         * cs-parser.jay: Set readonly context based on special constructs.
4923         
4924         * expression.cs (LocalVariableReference.DoResolveBase): Improved
4925         readonly variable error handling.
4926         
4927         * rootcontext.cs (EmitCode): Don't verify members when error
4928         occurred.
4929         
4930         * statement.cs (LocalInfo): Add reaodnly context information.
4931         (SetReadOnlyContext, GetReadOnlyContext): New methods.
4932
4933 2005-05-17  Martin Baulig  <martin@ximian.com>
4934
4935         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
4936         #70970. 
4937
4938 2005-05-13  Martin Baulig  <martin@ximian.com>
4939
4940         * statement.cs (Block.Resolve, ResolveUnreachable): Correctly
4941         handle unreachable blocks.
4942
4943 2005-05-13  Martin Baulig  <martin@ximian.com>
4944
4945         * class.cs
4946         (ConstructorInitializer.GetOverloadedConstructor): Don't crash.
4947         (MethodCore.CheckCore): Use TypeManager.IsEqual(); fix #74904 and
4948         #74905. 
4949
4950 2005-05-13  Martin Baulig  <martin@ximian.com>
4951
4952         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
4953         instance variable, not a local.  Fix #74873.
4954         (Block.ResolveUnreachable): Set it to true here.
4955
4956 2005-05-12  Martin Baulig  <martin@ximian.com>
4957
4958         * cs-parser.jay (property_declaration): Pass the `current_class',
4959         not the `current_container' to Property's .ctor.  Fixes #74912.
4960
4961 2005-05-11  Martin Baulig  <martin@ximian.com>
4962
4963         * typemanager.cs (Closure): Copy this from MCS and merge all the
4964         GMCS-specific changes into it.
4965
4966 2005-05-12  Raja R Harinath  <harinath@gmail.com>
4967
4968         Fix #74920.
4969         * typemanager.cs (unmanaged_enclosing_types): New.
4970         (IsUnmanagedType): Avoid infloops by using
4971         'unmanaged_enclosing_types' to talk with recursive invocations.
4972
4973 2005-05-11  Duncan Mak  <duncan@novell.com>
4974
4975         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
4976         continuing to process for 'arg'.
4977         (handle_preprocessing_directive): Check the argument of the #endif
4978         directive and report error CS1025 if there are any trailing
4979         characters.
4980
4981         According to the C# spec, having even whitespace after the #endif
4982         directive is illegal; however, because we call arg.TrimEnd ()
4983         beforehand, we have the same behavior as csc, allowing whitespace
4984         after the directive.
4985
4986         Fixes #74892.
4987
4988 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
4989
4990         Fix #74863.
4991         
4992         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
4993         (Constructor.GetObsoleteAttribute): Implemented correctly.
4994
4995 2005-05-10  Martin Baulig  <martin@ximian.com>
4996
4997         * generic.cs (Constraints.Resolve): Report CS0246 if we cannot
4998         resolve the type; fixes #74864.
4999         (DefaultValueExpression): Create the LocalTemporary in Emit(), not
5000         in DoResolve(); fixes #74862.
5001
5002 2005-05-10  Martin Baulig  <martin@ximian.com>
5003
5004         * support.cs (ReflectionParameters.ParameterModifier): Use
5005         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
5006         and `ParameterAttributes.In'.  Fixes #74884.
5007
5008 2005-05-10  Martin Baulig  <martin@ximian.com>
5009
5010         * typemanager.cs (TypeManager.MemberLookup_FindMembers): Don't use
5011         the cache if we're just looking for `MemberTypes.NestedType' in a
5012         generic instance.
5013
5014         * ecore.cs (Expression.ResolveAsTypeTerminal): Don't check the
5015         constraints if we're still resolving the type tree.
5016         (Expression.MemberLookup): If we're resolving the type tree, only
5017         look for `MemberTypes.NestedType' since we're only interested in
5018         getting types.
5019
5020         * class.cs (TypeContainer.DefineType): Don't resolve the type
5021         parameters here; do this later in ResolveType() after the type
5022         tree has been resolved.
5023         (TypeContainer.ResolveType): New public method; this is called
5024         after the type tree is resolved and before the types are being
5025         populated.  We resolve the generic constraints here.
5026         (TypeContainer.DoDefineMember): Check the constraints on our base
5027         class and interfaces.
5028
5029         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Make this protected;
5030         set the `ResolvingTypeTree' flag on the EmitContext.
5031
5032         * codegen.cs (EmitContext.ResolvingTypeTree): New public field.
5033
5034 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
5035
5036         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
5037         
5038         * expression.cs (Argument.GetParameterModifier): Turned to property.
5039         (Invocation.Error_InvalidArguments): Add more descriptive errors.
5040         
5041         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
5042         its C# equivalent.
5043         
5044 2005-05-09  Raja R Harinath  <rharinath@novell.com>
5045
5046         Fix #74852.
5047         * decl.cs (MemberCache.AddMethods): Register override methods,
5048         rather than non-override methods.
5049         * typemanager.cs (RegisterOverride): New.
5050         (IsOverride): Update.
5051
5052 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5053
5054         * typemanager.cs (TypeManager): Moved InitGenerics to Reset method.
5055
5056 2005-05-06  Martin Baulig  <martin@ximian.com>
5057
5058         * attribute.cs
5059         (Attributable.IsClsComplianceRequired): Fix typo in the method name.
5060         (AttributeTester.AnalyzeTypeCompliance): Add generics support.
5061
5062 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
5063
5064         Fix #73105.
5065         
5066         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
5067         recursive declaration.
5068         
5069         * statement.cs (Block.ResolveMeta): Report any error in resolving.
5070         
5071 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
5072
5073         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
5074         
5075         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
5076
5077 2005-05-05  Raja R Harinath  <rharinath@novell.com>
5078
5079         Fix #74797.
5080         * decl.cs (DeclSpace.FamilyAccessible): 
5081         Use TypeManager.IsNestedFamilyAccessible.
5082
5083         Fix reopened #64812.
5084         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
5085         internal'.
5086
5087 2005-05-04  Raja R Harinath  <rharinath@novell.com>
5088             Abin Thomas  <projectmonokochi@rediffmail.com>
5089             Anoob V E  <projectmonokochi@rediffmail.com>
5090             Harilal P R  <projectmonokochi@rediffmail.com>
5091
5092         Fix #64812.
5093         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
5094         allow access to all static members.
5095
5096 2005-05-04  Martin Baulig  <martin@ximian.com>
5097
5098         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
5099
5100 2005-05-04  Martin Baulig  <martin@ximian.com>
5101
5102         Fix #74655.
5103
5104         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
5105         section at the end; make things work if `default' is not the last
5106         section.        
5107
5108 2005-05-04  Martin Baulig  <martin@ximian.com>
5109
5110         Fix #70400.
5111
5112         * statement.cs (Switch): Replaced the `got_default' field with a
5113         `default_section' one.
5114         (Switch.CheckSwitch): Set `default_section' here.
5115         (Switch.Resolve): If we're a constant switch and the constant is
5116         not found, use the default section.
5117
5118 2005-05-03  Martin Baulig  <martin@ximian.com>
5119
5120         * expression.cs (ArrayAccess.EmitGetLength): New public method.
5121
5122         * statement.cs (Foreach.ArrayForeach): New nested class.
5123         (Foreach.TemporaryVariable): New nested class.
5124         (Foreach.EmitArrayForeach): Removed; this is now in the new
5125         ArrayForeach class.
5126
5127 2005-05-03  Raja R Harinath  <rharinath@novell.com>
5128
5129         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
5130         more conservative.
5131         (VerifyPendingMethods): Revert change below.
5132
5133         * typemanager.cs (IsOverride, RegisterNonOverride): New.
5134         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
5135         that used to trigger warning -28.  Remove warning -28.
5136         * expression.cs (Invocation.OverloadResolve): Use
5137         TypeManager.IsOverride to distinguish override methods.
5138
5139         Fix #74773.
5140         * pending.cs (VerifyPendingMethods): If a base type implements the
5141         requested interface, don't bother checking individual methods of
5142         the base type.  As a side-effect, this prevents the creation of
5143         unnecessary proxies.
5144
5145 2005-05-02  Martin Baulig  <martin@ximian.com>
5146
5147         Fix #70182.
5148
5149         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
5150         Also `And' the locals if the old vector is null.
5151         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
5152         null; in this case we basically reset all the variables.        
5153
5154 2005-05-02  Martin Baulig  <martin@ximian.com>
5155
5156         Fix #74529.
5157
5158         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
5159         Added `FlowBranching branching' argument; always `and' the
5160         variables instead of `or'ing them unless we're an infinite loop.
5161
5162         * statement.cs (While.Resolve): Create a new sibling unless we're
5163         infinite.       
5164
5165 2005-05-02  Martin Baulig  <martin@ximian.com>
5166
5167         Fix #70140.
5168
5169         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
5170         arguments; use it instead of creating a new TopLevelBlock.
5171         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
5172         our ConstructorInitializer.
5173
5174         * statement.cs
5175         (TopLevelBlock.TopLevelBranching): New public property.
5176         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
5177         and create our `TopLevelBranching'.
5178
5179         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
5180         anonymous method host, use `block.TopLevelBranching' rather than
5181         creating a new branching.
5182
5183 2005-04-20  Miguel de Icaza  <miguel@novell.com>
5184
5185         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
5186         a ScopeInfo, if any of the current children is a child of the new
5187         entry, move those children there.
5188
5189 2005-04-30  Martin Baulig  <martin@ximian.com>
5190
5191         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
5192         at the beginning of a SwitchSection.  Fix #73335.
5193
5194 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
5195
5196         Fix #74378
5197         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
5198         
5199         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
5200         (FieldExpr.DoResolve): Obsolete members are ignored for field
5201         initializers.
5202         
5203 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
5204
5205         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
5206         of arrays detection.
5207
5208         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
5209         verification.
5210         (Field.VerifyClsCompliance): Volatile fields are not compliant.
5211
5212         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
5213         arrays report.
5214
5215 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
5216
5217         * cs-parser.jay: Use the prefered version of -unsafe in error
5218         message.
5219
5220 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
5221
5222         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
5223         circumstances.
5224
5225 2005-04-20  John Luke  <john.luke@gmail.com>
5226
5227         * driver.cs: fix typo in error message, --outout to --output
5228
5229 2005-04-30  Martin Baulig  <martin@ximian.com>
5230
5231         * attribute.cs (Attribute.CheckSecurityActionValidity): Correctly
5232         handle the .NET 2.x security attributes.
5233
5234 2005-04-30  Martin Baulig  <martin@ximian.com>
5235
5236         * typemanager.cs
5237         (TypeManager.ExpandInterfaces): Don't add things twice.
5238
5239         * class.cs
5240         (TypeContainer.VerifyClsCompliance): Allow generic instances.
5241
5242 2005-04-29  Martin Baulig  <martin@ximian.com>
5243
5244         * generic.cs (Constraints.ResolveTypes): Expand interfaces.
5245
5246         * anonymous.cs: Added support for anonymous generic methods.
5247
5248 2005-04-29  Martin Baulig  <martin@ximian.com>
5249
5250         * typemanager.cs (TypeManager.GetInterfaces): Correctly handle
5251         generic instances.
5252
5253 2005-04-29  Martin Baulig  <martin@ximian.com>
5254
5255         * generic.cs (TypeManager.HasConstructorConstraint): Removed.
5256
5257         * expression.cs (New.DoResolve): Fix the CS0304 check.
5258
5259 2005-04-29  Martin Baulig  <martin@ximian.com>
5260
5261         * typemanager.cs (TypeManager.GetFullName): Updated to the new
5262         naming schema.
5263
5264         * class.cs (MethodCore.IsDuplicateImplementation): If we're an
5265         explicit interface implementation, compare the interface types.
5266         (MethodData.Define): Use the new naming scheme from the latest
5267         .NET 2.x beta2.
5268         (MemberBase.DoDefineBase): Resolve `InterfaceType' here.
5269
5270         * decl.cs (MemberName.GetMemberName): Removed.
5271         (MemberName.MethodName, FullName): New properties.
5272
5273 2005-04-25  Raja R Harinath  <rharinath@novell.com>
5274
5275         * gmcs.exe.config: Update v2.0.40607 -> v2.0.50215.
5276
5277 2005-04-22  Martin Baulig  <martin@ximian.com>
5278
5279         * generic.cs (GenericMethod): Create the EmitContext in the
5280         `Define()'; in `Define(MethodBuilder)', create the type parameters
5281         before calling `Define()'.  Fixes #73933.
5282
5283 2005-04-22  Martin Baulig  <martin@ximian.com>
5284
5285         * generic.cs
5286         (Constraints.Resolve): Make things work wrt. the new type lookup system.
5287         (ConstructedType.ResolveAsTypeTerminal): Don't override this.
5288
5289         * ecore.cs (Expression.ResolveAsTypeTerminal): If `te' is a
5290         ConstructedType, check its constraints.
5291
5292 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
5293
5294         * codegen.cs (InRefOutArgumentResolving): New field.
5295         
5296         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
5297         fields outside contructor.
5298         
5299         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
5300         
5301 2005-04-19  Miguel de Icaza  <miguel@novell.com>
5302
5303         * anonymous.cs (CaptureContext.EmitParameterInstance): The
5304         parameter code was not completed ever, so it was not as up-to-date
5305         as local variables.  Must finish it.
5306
5307         The bug fix was to compare the Toplevel of the block, not the
5308         current block.  Thanks for Ben for pointing this out. 
5309
5310 2005-04-19  Raja R Harinath  <rharinath@novell.com>
5311
5312         * decl.cs (AddMethods): Use the declaring type of the problem
5313         method to determine if we want to squash a warning.
5314
5315 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
5316
5317         * attribute.cs: Removed debug output.
5318
5319         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
5320         
5321         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
5322         Report.Stderr.
5323         
5324 2005-04-18  Raja R Harinath  <rharinath@novell.com>
5325
5326         Fix #74481.
5327         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
5328         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
5329         all null comparisons against reference types.
5330
5331 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
5332
5333         Fix# 74565
5334         * class.cs (TypeContainer.CircularDepException) New nested
5335         exception class.
5336         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
5337         (TypeContainer.DefineType): Removed error, reset InTransit before
5338         exit.
5339         (Class.DefineType): Throw exception when is in Transit.
5340         Catch exception and report error.
5341         (Struct.DefineType): Throw exception when is in Transit.
5342         Catch exception and report error.
5343         (Interface.DefineType): Throw exception when is in Transit.
5344         Catch exception and report error.
5345
5346         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
5347         handle nested exception handlers.
5348
5349         * flowanalysis.cs (InTryWithCatch): New method, search for try with
5350         a catch.
5351
5352         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
5353         InFinally and InCatch storage.
5354
5355         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
5356         (Catch.Resolve): Set and Restore ec.InCatch.
5357         (Try.Resolve): Set and Restore ec.InFinally.
5358         (Try.HasCatch): True when try has catch.
5359
5360 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
5361
5362         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
5363           for the same event member, so exclude such cases from warning 419.
5364           Fixed bug #74633.
5365
5366 2005-04-16  Miguel de Icaza  <miguel@novell.com>
5367
5368         * expression.cs (Binary.ResolveOperator): Apply patch from John
5369         Luke to fix bug 59864: operators &, | and ^ on enumerations
5370         require that the same enum type on both sides.
5371
5372         * driver.cs: Add warnings to old flag usage, this is to assist
5373         people who produce Makefiles and hope that the Makefiles will be
5374         used on Windows.
5375
5376         * class.cs (TypeContainer.EmitType): Moved the definition of the
5377         special $PRIVATE$ field from the resolve phase to the Emit phase.
5378         During resolve we do not know if we are a struct with
5379         HasExplicitLayout, we know this only after the attributes for the
5380         type are emitted.
5381
5382         Set the FieldOffset to zero on the dummy field that we create for
5383         the class.   Fixes 74590.
5384
5385 2005-04-16  Raja R Harinath  <rharinath@novell.com>
5386
5387         Fix #73834.
5388         * ecore.cs (PropertyExpr.resolved): New.
5389         (DoResolve): Use it to handle a case of double resolution here.
5390         Handle a case of identical-name-and-type-name.
5391         * expression.cs (ArrayCreation.CheckIndices): Avoid double
5392         resolution by storing the results of expression resolution back
5393         into the "probes" array.
5394
5395 2005-04-15  Raja R Harinath  <rharinath@novell.com>
5396
5397         Fix cs0208-7.cs and cs0208-8.cs.
5398         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
5399         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
5400         error reporting to point out the reason a struct is not unmanaged.
5401
5402 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5403
5404         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
5405           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
5406
5407 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5408
5409         Fix #74528.
5410         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
5411         IdenticalNameAndTypeName here.
5412         (EventExpr.InstanceResolve): Likewise.
5413
5414 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
5415
5416         C# 2.0 DefaultCharSetAttribute implementation
5417         
5418         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
5419         which allows us to set GlobalNamespace for every resolve.
5420         (Attribute.ResolveArguments): Cut from Resolve.
5421         (Attribute.GetCharSetValue): Returns CharSet named argument.
5422         (Attribute.DefinePInvokeMethod): Gets default charset from
5423         module settings.
5424         (GlobalAttribute.ResolveAsTypeStep): Override.
5425         (GlobalAttribute.ResolveArguments): Override.
5426         
5427         * class.cs (TypeAttr): Is protected.
5428         
5429         * codegen.cs (ModuleClass.DefaultCharSet): New member.
5430         (ModuleClass.DefaultCharSetType): New memeber.
5431         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
5432         
5433         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
5434         charset from module.
5435         
5436         * delegate.cs (TypeAttr): Override.
5437         (Delegate.DefineType): Use this TypeAttr.
5438         
5439         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
5440         at very early stage (before types are defined) to resolve model
5441         module attributes. It will probably not work with corlib but it
5442         should be ok.
5443         
5444         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
5445         charset from module.
5446         
5447         * typemanager.cs (default_charset_type): New type.
5448
5449 2005-04-13  Raja R Harinath  <rharinath@novell.com>
5450
5451         * decl.cs (MemberCache.AddMethods): Don't warn if
5452         System.Object.Finalize has buggy MethodAttributes.
5453
5454         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
5455         removed below.
5456
5457 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5458
5459         * doc.cs : detect ambiguous reference to overloaded members.
5460           Fixed bug #71603. MS 1.1 csc does not detect it.
5461
5462 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
5463
5464         * doc.cs : delegates must not be referenced with parameters.
5465           Fixed bug #71605.
5466
5467 2005-04-12  Miguel de Icaza  <miguel@novell.com>
5468
5469         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
5470
5471 2005-04-10  Miguel de Icaza  <miguel@novell.com>
5472
5473         * driver.cs (MainDriver): Stop processing if the CLS stage found
5474         errors. 
5475
5476         (CompilerCallableEntryPoint.InvokeCompiler): Always
5477         reset after execution;   Take a TextWriter argument for the
5478         output.
5479
5480         * report.cs: Use the error stream instead of hardcoding stderr. 
5481
5482 2005-04-09  Miguel de Icaza  <miguel@novell.com>
5483
5484         * class.cs: Reduce code paths to test, too small of an
5485         optimization to make it worth the extra testing.  Always perform
5486         it. 
5487
5488 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5489
5490         Fix #74510.
5491         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
5492         operators that had errors reported on them.
5493
5494 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
5495
5496         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
5497         argument types.
5498         (Attribute.Resolve): Add named argument type checking.
5499         
5500         * class.cs (FixedField.Define): Use IsPrimitiveType
5501         
5502         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
5503         
5504         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
5505         unsafe parameter types.
5506         
5507         * statement.cs (Using.ResolveExpression): Add better error description.
5508         
5509         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
5510         
5511 2005-04-08  Raja R Harinath  <rharinath@novell.com>
5512
5513         Fix #74484.
5514         * attribute.cs (Attribute.GetAttributeUsage): Resolve
5515         AttributeUsageAttribute in the emitcontext of the attribute class,
5516         not in the emitcontext of the attributable entity it was attached to.
5517         * cs-parser.jay: Use 'current_class', not 'current_container',
5518         when creating a GlobalAttribute.
5519
5520 2005-04-08  Alp Toker  <alp@atoker.com>
5521
5522         * pending.cs: The fix to #58413 failed to compile methods implementing
5523         interfaces with/without params modifiers and vice versa, even though
5524         params modifiers aren't part of the signature. Make the modifier check
5525         less strict as in csc.
5526
5527 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
5528             Anoob V E  <projectmonokochi@rediffmail.com>
5529             Harilal P R  <projectmonokochi@rediffmail.com>
5530
5531         Fix #58413.
5532         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
5533         modifiers of pending methods.
5534         (PendingImplementation.PendingImplementation): Initialize it.
5535         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
5536         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
5537         with ParameterData.  Add check for modifiers.
5538         * class.cs (MethodData.Define): Update to changes.
5539
5540 2005-04-07  Raja R Harinath  <rharinath@novell.com>
5541
5542         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
5543
5544 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
5545
5546         * class.cs (PropertyMethod.Define): Check private accessor in abstract
5547         property.
5548         
5549         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
5550         
5551         * rootcontext.cs,
5552         * typemanager.cs: Registered RequiredAttributeAttribute.
5553         
5554 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
5555
5556         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
5557         Warning CS0169 is back at level 3.
5558         (IMethodData.SetMemberIsUsed): New method.
5559         
5560         * decl.cs (IsUsed): New value; moved from FieldBase.Status
5561         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
5562         
5563         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
5564
5565         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
5566         contants.
5567         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
5568         is used.
5569         
5570         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
5571         is used.
5572         
5573         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
5574         to avoid the problems with nested types.
5575
5576 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
5577             Anoob V.E  <projectmonokochi@rediffmail.com>
5578             Harilal P.R  <projectmonokochi@rediffmail.com>
5579             Raja R Harinath  <rharinath@novell.com>
5580
5581         Fix #73820.
5582         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
5583         attribute.
5584         * typemanager (GetConstructor): Make public.
5585
5586 2005-04-05  John Luke  <john.luke@gmail.com>
5587             Raja R Harinath  <rharinath@novell.com>
5588
5589         Fix #62232.
5590         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
5591         struct too.  Return false quicker in a few cases.
5592         (VerifyUnManaged): Use it.
5593
5594 2005-04-05  Raja R Harinath  <rharinath@novell.com>
5595
5596         Fix #74041.
5597         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
5598         not 'unreachable_seen'.
5599
5600 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
5601
5602         * attribute.cs (Attribute.GetValue): Removed unused.
5603         
5604         * codegen.cs (CodeGen.TrimExt): Removed unused.
5605         
5606         * cs-parser.jay (output): Removed unused.
5607         
5608         * cs-tokenizer.cs (hex_digits): Removed unused.
5609         
5610         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
5611         
5612         * expression.cs (Indirection.LoadExprValue): Removed unused.
5613         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
5614         
5615         * iterators.cs (Iterator.param_types): Removed unused.
5616         
5617         * statement.cs (Goto.block): Removed unused.
5618         (ToplevelBlock.did): Removed unused.
5619         (Switch.ResolveConstantSwitch): Removed unused.
5620
5621 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
5622
5623         * rootcontext.cs: Allow mcs to bootstrap with the compilation
5624         resetting thingy.
5625
5626 2005-04-19  Martin Baulig  <martin@ximian.com>
5627
5628         Merged r42462 from MCS and made it work for GMCS.
5629
5630         * class.cs (MethodCore.ds): Moved this field to `MemberBase'.
5631
5632         * generic.cs (GenericMethod.Define): Removed `return_type' argument.
5633
5634 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5635
5636         Fix #74232 and cs0208-3.cs.
5637         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
5638         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
5639         unmanaged type.  Don't use FieldBuilders when 't' is a
5640         TypeBuilder.  Use ModFlags and MemberType fields.
5641         * class.cs (MemberBase.member_type): Rename from MemberType.
5642         (MemberBase.MemberType): New property.  Determines member_type on
5643         demand.
5644         (MemberBase.DoDefine): Don't initialize MemberType here.
5645         (FieldMember.Define): Likewise.
5646
5647 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
5648
5649         Fix #74241
5650         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
5651         Attributes are emitted there.
5652         
5653 2005-04-01  Raja R Harinath  <rharinath@novell.com>
5654
5655         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
5656         keyword in 'partial enum' too.
5657         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
5658         is not allowed).
5659         Report from Kamil Skalski <nazgul@omega.pl>.
5660
5661         Fix #74309.
5662         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
5663         have partial containers too.
5664
5665         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
5666         in block' checks to Block.CheckInvariantMeaningInBlock.
5667         * statement.cs (Block.GetKnownVariableInfo): Make private.
5668         (Block.IsVariableUsedInChildBlock): Remove.
5669         (Block.IsVariableUsedInBlock): Likewise.
5670         (Block.CheckInvariantMeaningInBlock): New.  Show location of
5671         conflicting declaration.
5672         (Block.AddVariable): Make error messages less long-winded and more
5673         specific.  Show location of conflicting declaration.
5674         * parameter.cs (Parameters.Location): New readonly property.
5675
5676 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5677
5678         Clean up semantics of invoking ResolveMemberAccess.
5679         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
5680         can have an instance, ensure that we pass in a non-TypeExpression
5681         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
5682         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
5683         argument.  Update to changes and simplify.
5684         (FieldExpr.Emitinstance): Remove CS0120 check.
5685         (PropertyExpr.EmitInstance): Likewise.
5686         * expression.cs (Argument.Resolve): Likewise.
5687         (Invocation.DoResolve): Update to changes in semantics of
5688         InstanceExpression.
5689
5690 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
5691
5692         Fix #74241
5693         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
5694         customization.
5695         
5696         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
5697
5698 2005-03-31  Raja R Harinath  <rharinath@novell.com>
5699
5700         Fix difference in behaviour with commandline invocation.
5701         * driver.cs (Driver.Reset): New.
5702         (CompilerCallableEntryPoint): Call it.
5703
5704         * statement.cs (If.Resolve): Avoid spurious "uninitialized
5705         variable" warnings if the boolean expression failed to resolve.
5706
5707 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
5708
5709         * attribute.cs: Fix the union of several permissions when some of them
5710         are unrestricted (so the result isn't an unrestricted permission set).
5711         Fix #74036.
5712
5713 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5714
5715         * ecore.cs (MemberExpr): New class.  Convert from interface
5716         IMemberExpr.
5717         (MemberExpr.ResolveMemberAccess): Refactor and move here from
5718         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
5719         error checks.
5720         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
5721         (MethodGroupExpr.IsExplicitImpl): Remove.
5722         (Expression.GetFieldFromEvent): Remove.
5723         (SimpleName.MemberStaticCheck): Remove.
5724         (SimpleName.DoSimpleNameResolve): Update to changes.
5725         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
5726         (MemberAccess.IdenticalNameAndTypeName): Remove.
5727         (MemberAccess.error176): Move to MemberExpr.
5728         (MemberAccess.DoResolve): Update to changes.
5729         (BaseAccess.DoResolve): Likewise.
5730
5731 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
5732
5733         C# 2.0 Conditional attribute class implementation
5734         
5735         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
5736         Analyzes class whether it has attribute which has ConditionalAttribute
5737         and its condition is not defined.
5738         
5739         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
5740         (Class.IsExcluded): New method. Search for at least one defined
5741         condition in ConditionalAttribute of attribute class.
5742
5743 2005-03-30  Raja R Harinath  <rharinath@novell.com>
5744
5745         * ecore.cs (PropertyExpr): Derive from Expression, not
5746         ExpressionStatement.
5747         (PropertyExpr.EmitStatement): Remove.
5748
5749 2005-03-29  Raja R Harinath  <rharinath@novell.com>
5750
5751         Fix #74060.
5752         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
5753         internal field "value__" of an enum be private.  The examples for
5754         "value__" that I found on MSDN all used FieldAttributes.Private.
5755
5756         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
5757         Don't mention IL method attribute names.
5758
5759         Fix #47991.  Remove a TODO.
5760         * statement.cs (Block.Toplevel): Make into a field.
5761         (Block.Parameters): Move into ToplevelBlock.
5762         (Block.known_variables): Rename from child_variable_names.
5763         (Block.Block): Remove variants that take Parameters.  Initialize
5764         'Toplevel' with the immediately surrounding toplevel block.
5765         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
5766         LocalInfo parameter.
5767         (Block.GetKnownVariableInfo): New.
5768         (Block.IsVariableNameUsedInChildBlock): Update.
5769         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
5770         the block, even though it may not be in scope.
5771         (Block.AddVariable): Remove Parameters parameter.  Use
5772         Toplevel.Parameters instead.
5773         (Block.AddConstant): Remove Parameters parameter.
5774         (Block.GetParameterReference): Update to use Toplevel.Parameters.
5775         (Block.IsParamaterReference): Likewise.
5776         (Block.IsLocalParameter): Likewise.  Simplify a lot.
5777         (ToplevelBlock.Parameters): New.  Moved from Block.
5778         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
5779         initialize Parameters to a non-null value.
5780         * cs-parser.jay: Update to changes.
5781         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
5782         simple names that mean different things in the same block.  Use
5783         Block.IsVariableNameUsedInBlock.
5784
5785 2005-03-28  Raja R Harinath  <rharinath@novell.com>
5786
5787         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
5788
5789 2005-03-26  Raja R Harinath  <harinath@acm.org>
5790
5791         Fix #73038.
5792         * assign.cs (Assign.DoResolve): When the RHS of an assignment
5793         fails to resolve, ensure that the LHS is still resolved as an
5794         lvalue.
5795
5796 2005-03-25  Raja R Harinath  <harinath@acm.org>
5797
5798         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
5799         ec.ContainerType.
5800         (Enum.current_ec): Remove.
5801         (Enum.LookupEnumValue): Remove EmitContext argument.
5802         Just uses the one created during DefineType.
5803         (Enum.FindMembers): Update.
5804         * expression.cs (MemberAccess.DoResolve): Update.
5805
5806 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
5807
5808         * assign.cs (Assign.DoResolve): Check for CS1717 when
5809         source and target are same (uses Equals).
5810
5811         * expression.cs (LocalVariableReference, ParameterReference,
5812         This): Implemented Equals, GetHashCode.
5813
5814         * statement.cs (Block.GetParameterReference): Removed useless
5815         local variable.
5816
5817 2005-03-22  Raja R Harinath  <rharinath@novell.com>
5818
5819         Fix cs0128.cs
5820         * statement.cs (Block.AddVariable): Ensure that we skip implicit
5821         blocks before deciding whether the error is cs0136 or cs0128.
5822
5823         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
5824         (using_alias_directive, using_namespace_directive): Pass
5825         MemberName, not an expression to Namespace.UsingAlias and
5826         Namespace.Using.
5827         (MakeName): Use the MemberName of the namespace.
5828         * namespace.cs (Namespace.MemberName): New.
5829         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
5830         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
5831         Likewise.
5832         * decl.cs (MemberName.Name): Make readonly.
5833         (MemberName.FromDotted): New "constructor".
5834         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
5835         (MemberCore.Name): Compute from MemberName on demand.
5836         (MemberCore.SetMemberName): Provide a way to change the
5837         MemberName.
5838         (MemberCore.AddToContainer): Don't take a fullname parameter.
5839         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
5840         fully qualified name of the container to the member name.
5841         (TypeContainer.AddToTypeContainer): Use a fully qualified name
5842         only if the type is a member of the root container.
5843         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
5844         MemberName.Left rather than searching for an embedded ".".
5845         (PartialContainer.CreatePart): Update to changes in RootContext.
5846         (MemberBase.ShortName): Turn into a property.  Use
5847         MemberCore.SetMemberName.
5848         (MemberBase.ExplicitInterfaceName): Remove.
5849         (MemberBase.UpdateMemberName): Remove.
5850         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
5851         (PropertyBase.SetMemberName): New override.
5852         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
5853         (Tree.GetDecl): New.
5854         (Tree.AllDecls): Rename from Decls.
5855         * attribute.cs, enum.cs, report.cs: Update to changes.
5856         * driver.cs (MainDriver): Use MemberName.FromDotted on
5857         RootContext.MainClass.
5858
5859 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
5860
5861         * class.cs (FixedField.Define): Check for CS1664 and more sanity
5862         checks.
5863
5864         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
5865
5866 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
5867
5868         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
5869         property accessor modifiers.
5870
5871         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
5872         fixed buffer attribute (CS1716).
5873         (PropertyMethod.HasCustomAccessModifier): When property accessor
5874         has custom modifier.
5875
5876         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
5877         modifiers.
5878         (PropertyExpr.DoResolveLValue): Add CS0272.
5879
5880 2005-03-17  Miguel de Icaza  <miguel@novell.com>
5881
5882         * convert.cs: When converting to a pointer, use the proper Conv.U
5883         or Conv.I depending on the source data type.
5884
5885         * cs-tokenizer.cs: Make the size for large decimal constants,
5886         fixes #72957.
5887
5888 2005-03-17  Martin Baulig  <martin@ximian.com>
5889
5890         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
5891         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
5892
5893 2005-03-17  Martin Baulig  <martin@ximian.com>
5894
5895         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
5896         to bool so we can return an error condition.
5897         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
5898         returned an error.
5899
5900 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
5901
5902         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
5903         attributes.
5904
5905 2005-03-16  Raja R Harinath  <rharinath@novell.com>
5906
5907         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
5908         Refactor to avoid traversing the list of assemblies, and to avoid
5909         string concatenation.
5910         * typemanager.cs (guid_attr_type): Remove.
5911         (negative_hits, pointers, references): Remove hashes.
5912         (type_hash): New.
5913         (GetConstructedType): New.  Uses type_hash to handle constructed
5914         types (arrays, references, pointers).
5915         (GetReferenceType, GetPointerType): Use it.
5916         (GetNestedType): New.  Uses type_hash to handle nested types of
5917         reflected types.
5918         (LookupType, LookupTypeDirect): Remove.
5919         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
5920         'types' hash and LookupTypeReflection directly.
5921         (params_string, params_object): Use GetConstructedType.
5922         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
5923         top-level types.
5924         (Namespace.Lookup): Use cached_types.
5925         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
5926         provided by old TypeManager.LookupType.
5927         * rootcontext.cs (MakeFQN): Remove.
5928         * decl.cs (DeclSpace.MakeFQN): Likewise.
5929         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
5930         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
5931         TypeManager.GetConstructedType.
5932         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
5933
5934 2005-04-16  Zoltan Varga  <vargaz@freemail.hu>
5935
5936         * cs-parser.jay: Fix build.
5937
5938 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
5939
5940         * class.cs (TypeContainer.CircularDepException) New nested
5941         (MethodCore.CheckBase): Report CS1715 for properties and indexers.
5942
5943         * cs-parser.jay: Reports CS1527 for any namespace element.
5944
5945         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
5946         Added CS0407.
5947
5948         * expression.cs (ParameterReference.IsAssigned): Changed error to
5949         CS0269.
5950         (Error_WrongNumArguments): Moved CS0245 detection here.
5951
5952         * statement.cs (Return.Resolve): Add CS1622 report.
5953
5954 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
5955
5956         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
5957
5958 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
5959
5960         * attribute.cs expression.cs: Get rid of some allocations.
5961
5962 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
5963
5964         * doc.cs : just eliminate the latest change.
5965
5966 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
5967
5968         * doc.cs : commented out the latest change. It breaks xml-030.cs
5969
5970 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
5971
5972         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
5973           fail. So invoke CreateType() in FindDocumentedType().
5974
5975 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
5976
5977         * cs-tokenizer.cs : added IsKeyword().
5978         * doc.cs : Detect keyword incorrectly used as identifier.
5979           Allow identifiers prefixed by @.
5980
5981 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
5982
5983         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
5984         It caused exception in namespace resolving (again!).
5985         
5986         * class.cs (Class.ctor): Removed exit.
5987         (PropertyMethod.ctor): ditto.
5988         
5989         * codegen.cs (Codegen.Reset): Reset static data.
5990         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
5991         
5992         * cs-tokenizer.cs (Cleanup): Removed.
5993         
5994         * driver.cs (GetSystemDir): Rewrote to one line command.
5995         It caused problem with unloaded dynamic modules.
5996         (UnixParseOption): Removed Exit.
5997         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
5998         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
5999         Now can be mcs used as library.
6000         
6001         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
6002         empty location.
6003         
6004         * location.cs (Reset): Reset static data.
6005         
6006         * namespace.cs (Reset): Reset static data.
6007         
6008         * report.cs (Report.Reset): Reset static data.
6009         
6010         * rootcontext.cs (RootContext.Reset): Reset static data.
6011         
6012         * tree.cs (RootTypes.ctor): Use Location.Null
6013         
6014         * typemanager.cs (TypeManager.Reset): Reset static data.
6015         (CoreLookupType): Removed Exit.
6016         (TypeHandle.Reset): Reset static data.
6017         
6018 2005-03-10  Raja R Harinath  <rharinath@novell.com>
6019
6020         Fix #73516.
6021         * typemanager.cs (ComputeNamespaces): Import namespaces from
6022         referenced modules too.
6023
6024 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6025
6026         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
6027         than '.'.
6028
6029 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6030
6031         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
6032         enclosing DeclSpace.  This ensures that a name-lookup populates
6033         more caches and there are fewer 'TypeExpression's.  Carve out
6034         nested type lookup into ...
6035         (LookupNestedTypeInHierarchy): ... this.
6036
6037 2005-04-15  Martin Baulig  <martin@ximian.com>
6038
6039         Merged r41590 from MCS and make it work in the generics land.
6040
6041         * generic.cs (TypeParameter.UpdateConstraints): Removed the
6042         `check' argument.
6043
6044         * class.cs (PartialContainer.UpdateConstraints): Removed.
6045         (PartialContainer.CheckConstraints): Removed.
6046         (PartialContainer.SetParameterInfo): Store the constraints here.
6047         (PartialContainer.DefineTypeParameters): New public method;
6048         resolve the type parameter's constraints here.  Note that the
6049         PartialContainer doesn't have an EmitContext anymore, so we must
6050         do this in the ClassPart.
6051
6052 2005-03-09  Raja R Harinath  <rharinath@novell.com>
6053
6054         Clean up a few partial-class semantics.  
6055         Fixes test-357.cs and cs1618-2.cs.
6056         * cs-parser.jay (struct_declaration): Use 'current_class' as
6057         parent of newly-created struct.  Remove call to Register ().
6058         Use 'pop_current_class' to complete handing the current struct.
6059         (interface_declaration): Likewise.
6060         (class_declaration): Likewise.
6061         (enum_declaration): Use 'current_class' as parent of newly created
6062         enum.
6063         (delegate_declaration): Likewise.
6064         (pop_current_class): New function.  This is used to handle closing
6065         up the 'current_class' and 'current_container', and pointing them
6066         to the enclosing class/container.
6067         (CSharpParser): Initialize 'current_class' too.
6068         * decl.cs (MemberCore): Add check for invariant: a partial
6069         container is not a parsed entity, and thus does not enclose any
6070         parsed members.
6071         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
6072         (DeclSpace.BaseTypeExpr): Use it.
6073         (DeclSpace.LookupType): Add check for invariant.
6074         * class.cs (TypeContainer): Add check for invariant: a nested
6075         class should have the same NamespaceEntry as its enclosing class.
6076         (TypeContainer.EmitFieldInitializers): Make virtual.
6077         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
6078         MemberCore.
6079         (TypeContainer.Register): Remove.
6080         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
6081         null.  Use TypeResolveEmitContext for resolving base types and
6082         interfaces.  Move initialization of Parts.TypeBuilder here from
6083         ...
6084         (TypeContainer.DefineNestedTypes): ... here.
6085         (PartialContainer): Take a Namespace not a NamespaceEntry.
6086         (PartialContainer.Create): Don't use Register.  Call the
6087         appropriate Add... function directly.
6088         (ClassPart): Take both the PartialContainer and the enclosing
6089         class as constructor arguments.
6090         (ClassPart.EmitFieldInitializers): Override.
6091         (ClassPart.PartFindNestedTypes): Remove.
6092         (FieldBase.GetInitializerExpression): Resolve the initializer
6093         expression in the emit context of the enclosing class.
6094         * tree.cs (RootTypes): Remove Register ().
6095         
6096 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
6097
6098         * cs-parser.jay: Removed CS0134.
6099         
6100         * driver.cs: Removed CS1901.
6101         
6102         * expression.cs (SizeOf.DoResolve): Don't report CS0233
6103         for predefined types.
6104
6105 2005-03-07  Duncan Mak  <duncan@novell.com>
6106
6107         * codegen.cs (Save):  Catch UnauthorizedAccessException as
6108         well. Fixes bug #73454.
6109
6110 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
6111
6112         * cs-tokenizer.cs (xtoken): Add CS1035.
6113         
6114         * class.cs (MethodData.Define): Add CS0683.
6115         (FieldMember.ctor): Add CS0681.
6116
6117 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6118
6119         * ecore.cs (SimpleName.DoResolve): Rename from
6120         SimpleName.DoResolveAllowStatic.
6121         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
6122         Pass 'intermediate' flag to MemberStaticCheck.
6123         (SimpleName.MemberStaticCheck): Skip "static check" only in case
6124         of "intermediate" lookups via MemberAccess.
6125         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
6126         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
6127
6128 2005-03-07  Raja R Harinath  <rharinath@novell.com>
6129
6130         Fix #73394.
6131         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
6132         slipped in because of variable names that are identical to a
6133         builtin type's BCL equivalent ('string String;', 'int Int32;').
6134         (PropertyExpr.EmitInstance): Likewise.
6135
6136 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
6137
6138         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
6139         
6140         * report.cs (warning_ignore_table): Made public.
6141
6142 2005-03-04  Raja R Harinath  <rharinath@novell.com>
6143
6144         Fix #73282.
6145         * class.cs (MethodData.Emit): Pass 'container' to
6146         container.GetObsoleteAttribute instead of 'container.Parent'.
6147
6148 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
6149
6150         * cs-parser.jay: Add 1534 error test.
6151
6152         * iterators.cs (Yield.CheckContext): Add error 1629.
6153         (Iterator.ctor): Save unsafe modifier.
6154         (MoveNextMethod.DoEmit): Restore unsafe context.
6155
6156         * namespace.cs (UsingAlias): Better error message.
6157
6158 2005-03-03  Dan Winship  <danw@novell.com>
6159
6160         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
6161         the warning message [#73219]
6162
6163 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6164
6165         Fix compile with MCS 1.0.0.0.
6166         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
6167         w_restore to not depend on string constant folding.
6168
6169 2005-03-03  Raja R Harinath  <rharinath@novell.com>
6170
6171         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
6172         CS0246 check to users who passed 'silent = false'.
6173         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
6174         check.
6175         (SimpleName.SimpleNameResolve): Update.
6176         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
6177         (MemberAccess.IdenticalNameAndTypeName): Update.
6178         * doc.cs (FindDocumentedTypeNonArray): Update.
6179
6180 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
6181
6182         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
6183         * parameters.cs (ComputeAndDefineParameters): Remove.
6184         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
6185         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
6186         Use GetParameterInfo.
6187
6188 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
6189
6190         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
6191
6192 2005-03-02  Raja R Harinath  <rharinath@novell.com>
6193
6194         Unify DeclSpace.LookupType and DeclSpace.FindType.
6195         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
6196         is in charge of defining nested types on demand.
6197         (DeclSpace.LookupType): Use it when the current_type is a
6198         TypeBuilder.  Use LookupTypeDirect for reflected types.
6199         (DeclSpace.FindType): Remove.
6200         (DeclSpace.LookupInterfaceOrClass): Likewise.
6201         (DeclSpace.DefineTypeAndParents): Likewise.
6202         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
6203         DeclSpace.LookupType.
6204         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
6205         * typemanager.cs (LookupType): Simplify.
6206         (AddUserType): Remove type from negative_hits.
6207         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
6208         * class.cs (TypeContainer.FindMembers): Move handling of nested
6209         types ...
6210         (TypeContainer.FindMembers_NestedTypes): ... here.
6211         (TypeContainer.FindNestedType): Implement override.
6212         (ClassPart.FindNestedType): Delegate to PartialContainer.
6213         (ClassPart.PartFindNestedType): Looks up the nested types of the
6214         part alone.
6215
6216 2005-04-14  Martin Baulig  <martin@ximian.com>
6217
6218         * generic.cs (ConstructedType): Moved all the type lookup and
6219         nested class logic into SimpleName.
6220         (ConstructedType.ResolveConstructedType): Our underlying type is
6221         already fully resolved; all the type lookup stuff is in
6222         SimpleName.
6223
6224         * ecore.cs (SimpleName.ResolveAsTypeStep): Resolve nested
6225         constructed types here instead of in ConstructedType.
6226
6227         * decl.cs (MemberName.GetTypeExpression): Always create a
6228         SimpleName, not a ConstructedType.
6229         (DeclSpace.ResolveNestedType): Removed; this is now in SimpleName.
6230
6231 2005-03-02  Martin Baulig  <martin@ximian.com>
6232
6233         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6234         static constructor in static classes.
6235
6236 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
6237
6238         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
6239         sizeParamIndex is not specified.
6240
6241 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
6242
6243         Fix #73117
6244         * report.cs (WarningMessage.IsEnabled): Missing null check.
6245
6246 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6247
6248         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
6249         in the fields and not in the properties.
6250
6251 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
6252
6253         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
6254         fields as well.
6255
6256 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6257
6258         * attribute.cs: Small refactoring (improved robustness).
6259         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
6260         (ValidateGuid): Removed.
6261         (Resolve): Removed referenced to above mentioned.
6262         (GetAttributeUsage): Made private and changed to work without
6263         class assistance.
6264         (GetIndexerAttributeValue): Don't crash.
6265         (GetConditionalAttributeValue): Ditto.
6266         (GetClsCompliantAttributeValue): Ditto.
6267         (ExtractSecurityPermissionSet): All attributes exceptions are
6268         error 648.
6269         (GetPropertyValue): New helper.
6270         (GetMethodImplOptions): New method.
6271         (DefinePInvokeMethod): Reuse common code. Implemented handling of
6272         some missing properties.
6273         
6274         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
6275         (Method.ApplyAttributeBuilder): Updated.
6276         
6277         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
6278         exception.
6279
6280 2005-02-28  Raja R Harinath  <rharinath@novell.com>
6281
6282         Fix #73052.
6283         * report.cs (Report.SymbolRelatedToPreviousError): Handle
6284         non-simple types (array, pointer, reference).
6285
6286 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
6287
6288         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
6289
6290         * class.cs (MethodCore.IsDuplicateImplementation): Special error
6291         for operators.
6292         (Method.CheckBase): Catch wrong destructor here.
6293         (MethodData.Define): Add errors 550, 668.
6294
6295         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
6296
6297         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
6298
6299         * pending.cs (VerifyPendingMethods): Add error 551.
6300
6301         * typemanager.cs (CSharpName): Next error report helper.
6302
6303 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
6304
6305         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
6306         attributes. Removed useless attribute double check.
6307         It saves almost 2MBs for corlib.
6308
6309 2005-02-25  Raja R Harinath  <rharinath@novell.com>
6310
6311         Fix #72924.
6312         * statement.cs (ExpressionStatement.Resolve): Make robust to being
6313         called twice in case of error.
6314
6315 2005-02-23  Chris Toshok  <toshok@ximian.com>
6316
6317         Fix compiler portions of #72827.
6318         * statement.cs (Block.Emit): call Begin/EndScope on the
6319         EmitContext instead of the ILGenerator.
6320
6321         * codegen.cs (EmitContext.BeginScope): new method, call
6322         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
6323         we have one.)
6324         (EmitContext.BeginScope): same, but EndScope and CloseScope
6325
6326         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
6327         offset and call the superclass's OpenScope(int) with it.
6328         (SymbolWriter.CloseScope): get the current il
6329         offset and call superclass's CloseScope(int) with it.
6330
6331 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
6332
6333         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
6334         CS1677 for out and ref as well.
6335
6336         * class.cs (Method.Define): Add error CS1599 detection.
6337         
6338         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
6339         
6340         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
6341         
6342         * delegate.cs (Delegate.Define): Add error CS1599 detection.
6343         
6344         * support.cs.cs (ModifierDesc): New helper method.
6345
6346 2005-02-23  Raja R Harinath  <rharinath@novell.com>
6347             Abin Thomas  <projectmonokochi@rediffmail.com>
6348             Anoob V E  <projectmonokochi@rediffmail.com>
6349             Harilal P R  <projectmonokochi@rediffmail.com>
6350
6351         Fix #57851, #72718.
6352         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
6353         MemberLookup (used for error reporting) actually returns a result.
6354         Fix error report number (122, not 112).
6355
6356 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
6357             Anoob V E  <projectmonokochi@rediffmail.com>
6358             Harilal P R  <projectmonokochi@rediffmail.com>
6359
6360         Fix #71134.
6361         * pending.cs (PendingImplementation.GetAbstractMethods):
6362         Find NonPublic members too.
6363
6364 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
6365
6366         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
6367         Fixed error 217.
6368         
6369         * class.cs (MethodCore.CheckMethodAgainstBase):
6370         Add error 239 report.
6371
6372 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6373
6374         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6375         
6376         * class.cs (Operator.Define): Add error 217 report.
6377         
6378 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6379
6380         Fix #68955.
6381         * expression.cs (Invocation.IsApplicable): Make public.
6382         (Invocation.IsParamsMethodApplicable): Likewise.
6383         * delegate.cs (Delegate.VerifyApplicability): Don't use
6384         Invocation.VerifyArgumentCompat for parameter applicability
6385         testing.  Use Invocation.IsApplicable and
6386         Invocation.IsParamsMethodApplicable.
6387
6388 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6389
6390         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
6391         
6392         * class.cs (Operator.Define): Add error 217 report.
6393         
6394 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6395
6396         * namespace.cs (UsingEntry.Resolve): Undo change below.
6397
6398 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6399
6400         Fix #72756.
6401         * ecore.cs (Expression.MemberLookupFailed): Add argument to
6402         disable the error message when the extended MemberLookup also
6403         fails.
6404         (Expression.MemberLookupFinal): Update.
6405         (SimpleName.DoSimpleNameResolve): Update.
6406         * expression.cs (MemberAccess.ResolveNamespaceOrType):
6407         Don't use MemberLookupFinal.
6408         (New.DoResolve): Update.
6409         (BaseAccess.CommonResolve): Update.
6410
6411 2005-02-21  Raja R Harinath  <rharinath@novell.com>
6412
6413         Fix #72732.
6414         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
6415         occured previously, don't resolve again.
6416
6417 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
6418
6419         Fix #69949
6420         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
6421         argument. Call ResolveAttributeUsage for unresolved.
6422         when types doesn't match ctor arguments.
6423         
6424         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
6425         for nested attribute classes.
6426         (Class.attribute_usage): Removed.
6427         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
6428         for attribute class.
6429         
6430         * ecore.cs (IsAttribute): Removed.
6431         
6432         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
6433         
6434         * rootcontext.cs (RegisterAttribute): Removed, attributes are
6435         now normal types.
6436         (attribute_types): Removed.
6437         (EmitCode): Global attributes are emited as the latest.
6438
6439 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
6440
6441         * class.cs (EmitFieldInitializers): Don't emit field initializer
6442         for default values when optimilization is on.
6443         
6444         * constant.cs (Constant.IsDefaultValue): New property.
6445         
6446         * driver.cs: Add /optimize handling.
6447         
6448         * constant.cs,
6449         * ecore.cs,
6450         * literal.cs: Implement new IsDefaultValue property.
6451         
6452         * rootcontext.cs (Optimize): New field, holds /optimize option.
6453
6454 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6455
6456         Fix crasher in re-opened #72347.
6457         * namespace.cs (Namespace.Lookup): Return null if
6458         DeclSpace.DefineType returns null.
6459
6460         Fix #72678.
6461         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
6462
6463 2005-02-18  Raja R Harinath  <rharinath@novell.com>
6464
6465         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
6466         now returns null if it cannot resolve to an lvalue.
6467         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
6468         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
6469         returned null.  Remove check for SimpleName.
6470         (EventExpr.DoResolveLValue): New.
6471         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
6472         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
6473         error from ...
6474         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
6475         avoid CS0131 error.
6476         (Unary.ResolveOperator): Move CS0211 check ...
6477         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
6478         CS0131 error.
6479         (Unary.DoResolveLValue): Simplify.
6480         (AddressOf.DoResolveLValue): New.
6481         (ArrayAccess.DoResolveLValue): New.
6482
6483 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
6484
6485         * attribute.cs (Attribute.Resolve): Add arguments casting for
6486         when types doesn't match ctor arguments.
6487
6488 2005-02-16  Raja R Harinath  <rharinath@novell.com>
6489
6490         Fix parts of #63202.
6491         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
6492         lookup of operator in base type.  Ensure that all checks happen
6493         when the operator resolves to an "op_..." method.
6494
6495 2005-02-15  Raja R Harinath  <rharinath@novell.com>
6496
6497         Fix #71992.
6498         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
6499         'ignore_cs0104' parameter.  Pass it to ...
6500         (NamespaceEntry.Lookup): ... this.
6501         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
6502         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
6503         (TypeLookupExpression.DoResolveAsTypeStep): Update.
6504         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
6505         Update.  Request that cs0104 errors be ignored.
6506         (ComposedCast.ResolveAsTypeStep): Update.
6507
6508 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6509
6510         Fix #59209.
6511         * expression.cs (Invocation.BetterFunction): Remove support for
6512         comparing virtual functions and their overrides.
6513         (Invocation.IsOverride): New.
6514         (Invocation.OverloadResolve): Don't consider 'override' functions
6515         during candidate selection.  Store them in a lookaside list.
6516         If the selected method is a 'virtual' function, use the list to
6517         find any overrides that are closer to the LHS type.
6518
6519 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
6520
6521         * expression.cs (New.DoResolve): Add complex core type reduction.
6522         (New.Constantify): Converts complex core type syntax like 'new int ()'
6523         to simple constant.
6524         
6525 2005-02-14  Raja R Harinath  <rharinath@novell.com>
6526
6527         * decl.cs (EntryType.EntryType): New constructor to create an
6528         updated copy of a cache entry.
6529         (MemberCache.AddMethods): Use it.
6530         (MemberCache.ClearDeclaredOnly): Remove.
6531         (MemberCache.MemberCache): Update.
6532
6533 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6534
6535         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
6536         variable.  This one is represents the actual low-level declaration
6537         of the method, as opposed to the semantic level `IsStatic'.   
6538
6539         An anonymous method which is hosted into a static method might be
6540         actually an instance method.  IsStatic would reflect the
6541         container, while MethodIsStatic represents the actual code
6542         generated.
6543
6544         * expression.cs (ParameterReference): Use the new MethodIsStatic
6545         instead of IsStatic.
6546
6547         * anonymous.cs (AnonymousMethod.Compatible): Pass the
6548         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
6549         set on the current EmitContext. 
6550
6551         * expression.cs (Cast): Overload DoResolveLValue so we can pass
6552         resolve our casted expression as an LValue.  This triggers the
6553         proper LValue processing that is later required by Assign.
6554
6555         This fixes 72347.
6556
6557         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
6558
6559 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
6560
6561         C# 2.0 Fixed buffer implementation
6562
6563         * anonymous.cs: Update after RegisterHelperClass renaming.
6564
6565         * attribute.cs (AttributeTester.fixed_buffer_cache):
6566         Cache of external fixed buffers.
6567         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
6568         implementation if field is fixed buffer else null.
6569
6570         * class.cs
6571         (TypeContainer.AddField): Accept FieldMember instead of Field.
6572         (FieldBase.IsFieldClsCompliant): Extracted code from
6573         VerifyClsCompliance descendant customization.
6574         (FixedField): New class handles fixed buffer fields.
6575         (FixedFieldExternal): Keeps information about imported fixed
6576         buffer.
6577         (IFixedField): Make access to internal or external fixed buffer
6578         same.
6579
6580         * cs-parser.jay: Add fixed buffer parsing.
6581
6582         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
6583         buffer.
6584
6585         * expression.cs (Indirection): Extended implementation to accept
6586         fixed buffer field.
6587         (PointerArithmetic.Emit): Get element from fixed buffer as well.
6588         (ElementAccess.MakePointerAccess): Get type as parameter.
6589         (DoResolve): Add fixed buffer field expression conversion.
6590         (DoResolveLValue): Ditto.
6591         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
6592         (ArrayPtr): Derives from FixedBufferPtr.
6593         (ArrayPtr.Emit): Add extra emit for array elements.
6594
6595         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
6596
6597         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
6598         for compiler generated types.
6599         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
6600
6601         * statement.cs (Fixed): Refactored to be easier add fixed buffer
6602         and consume less memory.
6603         (Fixed.Resolve): Add fixed buffer case.
6604
6605         * typemanager.cs (compiler_generated_attr_ctor,
6606         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
6607         (HasElementType): Add our own implementation to work on every
6608         runtime.
6609
6610 2005-02-11  Miguel de Icaza  <miguel@novell.com>
6611
6612         * anonymous.cs (CaptureContext): Track whether `this' has been
6613         referenced.   
6614
6615         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
6616         only captured `this' if it was implicitly done (instance
6617         methods/variables were used). 
6618
6619         * codegen.cs (EmitContext.CaptureThis): New method to flag that
6620         `this' must be captured.
6621
6622 2005-01-30  Miguel de Icaza  <miguel@novell.com>
6623  
6624         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
6625         is null it means that there has been no need to capture anything,
6626         so we just create a sibling.
6627
6628         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
6629
6630         Just a partial fix.  The other half is fairly elusive.
6631         
6632 2005-02-10  Raja R Harinath  <rharinath@novell.com>
6633
6634         Fix #52586, cs0121-4.cs.
6635         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
6636         and return a hashtable.
6637         (MemberCache.ClearDeclaredOnly): New.
6638         (MemberCache.MemberCache): Update to change.  Make a deep copy of
6639         the method_hash of a base type too.
6640         (MemberCache.AddMethods): Adapt to having a deep copy of the base
6641         type methods.  Overwrite entries with the same MethodHandle so
6642         that the ReflectedType is correct.  The process leaves in base
6643         virtual functions and their overrides as distinct entries.
6644         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
6645         matters since it was boxed in a ArrayList before.
6646         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
6647         modifier.
6648         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
6649         case of a virtual function and its override (choose the overload
6650         as better).
6651         (Invocation.OverloadResolve): Avoid 'override' members during
6652         'applicable_type' calculation.
6653
6654 2005-03-28  Raja R Harinath  <rharinath@novell.com>
6655
6656         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
6657         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
6658         GetTypeHandle.  It is possible for a reflected type to derive from
6659         a TypeBuilder (e.g., int[] derives from the TypeBuilder
6660         System.Array during mscorlib compilation).
6661         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
6662         contain a method_hash, don't create one either.  Don't create a
6663         deep copy of the base cache's method_hash.
6664         (MemberCache.SetupCache): Rename back from DeepCopy.
6665         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
6666         already initialized.  If we see an override function, add its
6667         underlying base virtual function to the member_hash too.
6668
6669 2005-02-09  Raja R Harinath  <rharinath@novell.com>
6670
6671         Combine two near-redundant caches.
6672         * typemanager.cs (method_params): Rename from method_internal_params.
6673         (TypeManager.GetParameterData): New.  Replace
6674         Invocation.GetParameterData.
6675         (TypeManager.LookupParametersByBuilder): Remove.
6676         * expression.cs (Invocation.method_parameter_cache): Remove.
6677         (Invocation.GetParameterData): Remove.
6678         Update to changes.
6679         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
6680         Update to changes.
6681
6682 2005-02-08  Raja R Harinath  <rharinath@novell.com>
6683
6684         Fix #72015.
6685         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
6686         TypeManager.multicast_delegate_type is null, resolve it by looking
6687         up "System.MulticastDelegate".
6688         * rootcontext.cs (RootContext.ResolveCore): Simplify.
6689
6690 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
6691             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
6692             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
6693
6694         Fix cs0164.cs.
6695         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
6696         (LabeledStatement.AddReference): New.  Set 'referenced'.
6697         (Goto.Resolve): Use it.
6698
6699 2005-02-05  John Luke  <john.luke@gmail.com>
6700
6701         * driver.cs: remove duplicate -doc line in Usage ()
6702
6703 2005-02-04  Raja R Harinath  <rharinath@novell.com>
6704
6705         * location.cs (Location.AddFile): Fix CS2002 error report.
6706
6707 2005-02-02  Martin Baulig  <martin@ximian.com>
6708
6709         * delegate.cs (Delegate.DefineType): Report an internal error if
6710         TypeManager.multicast_delegate_type is null.  See bug #72015 for
6711         details.        
6712
6713 2005-02-02  Raja R Harinath  <rharinath@novell.com>
6714
6715         Fix a crasher in a variant of #31984.
6716         * const.cs (Constant.CheckBase): New override that defers the
6717         new-or-override check in case the base type hasn't been populated
6718         yet.
6719         (Constant.Define): Ensure the new-or-override check is performed.
6720
6721 2005-02-01  Duncan Mak  <duncan@ximian.com>
6722
6723         * const.cs (LookupConstantValue): Check that `ce' is not null
6724         before calling GetValue ().
6725
6726 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6727
6728         Fix test-334.cs (#69519).
6729         * cs-parser.jay (using_alias_directive): Pass in an expression to
6730         NamespaceEntry.UsingAlias.
6731         (using_namespace_directive): Pass in an expression to
6732         NamespaceEntry.Using.
6733         (namespace_name): Don't flatten to a string.
6734         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
6735         (NamespaceEntry.AliasEntry.Resolve): Lookup using
6736         ResolveAsTypeStep.
6737         (NamespaceEntry.UsingEntry): Likewise.
6738         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
6739         changes.
6740         (NamespaceEntry.LookupForUsing): Remove.
6741         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
6742         names.
6743         (NamespaceEntry.Lookup): Remove support for dotted names.
6744
6745 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6746
6747         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
6748         split into two.
6749         (NamespaceEntry.ImplicitParent): Compute on demand.
6750         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
6751         parallels the current.
6752         (NamespaceEntry.LookupForUsing): Use it.
6753         (NamespaceEntry.Lookup): If the current namespace-entry is
6754         implicit, don't search aliases and using tables.
6755
6756 2005-02-01  Raja R Harinath  <rharinath@novell.com>
6757
6758         Fix #31984.
6759         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
6760         BaseCache here.
6761         (TypeContainer.BaseCache): Compute on demand.
6762         (TypeContainer.FindMembers): Define constants and types if they're
6763         not already created.
6764         (FieldMember.Define): Move resetting of ec.InUnsafe before error
6765         check.
6766         * const.cs (Constant.Define): Make idempotent.
6767
6768 2005-01-29  Miguel de Icaza  <miguel@novell.com>
6769
6770         * pending.cs: Produce better code (no nops produced by using Ldarg
6771         + value).
6772         
6773         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
6774         i - 1' it should be arg + 1.
6775
6776         Fixes bug #71819.
6777
6778 2005-01-28  Raja R Harinath  <rharinath@novell.com>
6779
6780         * attribute.cs (Attribute.CheckAttributeType): Make private
6781         non-virtual.
6782         (Attribute.ResolveType): Make virtual.
6783         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
6784         handling of RootContext.Tree.Types.
6785
6786 2005-01-27  Raja R Harinath  <rharinath@novell.com>
6787
6788         Update attribute-handling to use the SimpleName/MemberAccess
6789         mechanisms.
6790         * cs-parser.jay (attribute): Pass in an expression to the
6791         constructors of Attribute and GlobalAttribute.
6792         * attribute.cs (Attribute): Take an expression for the name.
6793         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
6794         passed in attribute name expression.
6795         (Attribute.CheckAttributeType): Use it.
6796         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
6797         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
6798         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
6799         argument to prevent error messages if the lookup fails.
6800
6801 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
6802
6803         * expression.cs (Indirection): Implemented IVariable interface
6804         to support indirection in AddressOf operator.
6805         (PointerArithmetic.Emit): Add optimalization for case where
6806         result can be precomputed.
6807
6808 2005-01-26  Martin Baulig  <martin@ximian.com>
6809
6810         * class.cs (TypeContainer.AttributeTargets): Return the correct
6811         AttributeTargets depending on our `Kind' instead of throwing an
6812         exception; fixes #71632.
6813
6814 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
6815
6816         Fix #71257
6817         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
6818         constant members.
6819
6820 2005-03-17  Martin Baulig  <martin@ximian.com>
6821
6822         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
6823         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
6824
6825 2005-03-17  Martin Baulig  <martin@ximian.com>
6826
6827         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
6828         to bool so we can return an error condition.
6829         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
6830         returned an error.
6831
6832 2005-03-17  Martin Baulig  <martin@ximian.com>
6833
6834         * generic.cs (TypeMananager.IsIEnumerable): New public method.
6835
6836         * convert.cs (Convert.ImplicitReferenceConversion(Exists)): Allow
6837         converting from an array-type of T to `IEnumerable<T>'.
6838
6839 2005-03-16  Martin Baulig  <martin@ximian.com>
6840
6841         * generic.cs (Nullable.Unwrap): Implement IAssignMethod.
6842         (Nullable.LiftedUnaryMutator): New public class.
6843
6844         * expression.cs (UnaryMutator.DoResolve): Added support for
6845         Nullable Types.
6846
6847 2005-03-14  Martin Baulig  <martin@ximian.com>
6848
6849         * generic.cs (Nullable.NullCoalescingOperator): Implemented.
6850
6851 2005-03-14  Martin Baulig  <martin@ximian.com>
6852
6853         * generic.cs (Nullable.LiftedBinaryOperator): Added support for
6854         the comparision operators `<', `>', `<=' and `>='.
6855
6856 2005-03-13  Martin Baulig  <martin@ximian.com>
6857
6858         * generic.cs
6859         (Nullable.NullLiteral): Renamed to `Nullable.NullableLiteral' to
6860         avoid confusion with the `NullLiteral'.
6861         (Nullable.LiftedBinaryOperator): Correctly implement `==' and '!='.
6862
6863 2005-03-13  Martin Baulig  <martin@ximian.com>
6864
6865         * expression.cs (Binary.ResolveOperator): For `==' and `!=', allow
6866         comparing arbitrary types with the null literal.
6867
6868 2005-03-13  Martin Baulig  <martin@ximian.com>
6869
6870         * generic.cs (Nullable.LiftedBinaryOperator): Add support for the
6871         boolean operators '&&', '||', '&' and '|'.
6872         (Nullable.OperatorTrueOrFalse): New public class.
6873
6874         * ecore.cs (Expression.GetOperatorTrue/False): Return an `Expression'
6875         instead of a `StaticCallExpr'; added support for nullables.
6876
6877 2005-03-10  Martin Baulig  <martin@ximian.com>
6878
6879         * expression.cs
6880         (ArrayAccess.EmitDynamicInitializers): Use `etype.IsValueType'
6881         rather than `etype.IsSubclassOf (TypeManager.value_type)'.      
6882
6883 2005-03-07  Martin Baulig  <martin@ximian.com>
6884
6885         * generic.cs (Nullable.Unwrap): Implement IMemoryLocation and make
6886         it work if `expr' is not an IMemoryLocation.
6887         (Nullable.Lifted): Implement IMemoryLocation.
6888         (Nullable.LiftedConversion.ResolveUnderlying): Use the correct
6889         target type.
6890
6891 2005-03-05  Martin Baulig  <martin@ximian.com>
6892
6893         * generic.cs (Nullable.Unwrap, Wrap): New protected classes.
6894         (Nullable.Lifted): New abstract class; rewrote the lifted conversions.
6895         (Nullable): Added support for lifted unary and binary operators.
6896
6897         * expression.cs (Unary.DoResolve): Added support for nullable types.
6898         (Binary.DoResolve): Likewise.
6899         (Conditional.DoResolve): Likewise.
6900
6901 2005-03-02  Martin Baulig  <martin@ximian.com>
6902
6903         * decl.cs (DeclSpace.SetParameterInfo): Make this virtual.
6904
6905         * class.cs (ClassPart.SetParameterInfo): Override this.
6906         (PartialContainer.SetParameterInfo): Override this.
6907         (TypeContainer.CheckConstraints): New protected method.
6908         (PartialContainer.CheckConstraints): Override this and check
6909         whether the same contraints were specified in all parts of a
6910         partial generic type definition.
6911         (PartialContainer.UpdateConstraints): New public method.
6912
6913         * generic.cs (TypeParameter.UpdateConstraints): New public method.
6914
6915 2005-03-02  Martin Baulig  <martin@ximian.com>
6916
6917         Committing a patch from Carlos Alberto Cortez to fix #72887.
6918
6919         * convert.cs (Convert.ExplicitReferenceConversionExists): Allow
6920         casts from `T []' to `int []'.
6921
6922 2005-03-02  Martin Baulig  <martin@ximian.com>
6923
6924         * generic.cs (TypeManager.IsEqual): Make this symmetric.
6925
6926         * expression.cs (Binary.ResolveOperator): When resolving a
6927         BinaryDelegate, use `TypeManager.IsEqual (l, r)' rather than just
6928         `=='.  Fixes #71866.  See gen-127.cs.
6929
6930 2005-03-02  Martin Baulig  <martin@ximian.com>
6931
6932         * class.cs (TypeContainer.DoDefineMembers): We also need a default
6933         static constructor in static classes.
6934
6935 2005-03-02  Martin Baulig  <martin@ximian.com>
6936
6937         * generic.cs
6938         (NullableType.Name, NullableType.FullName): Add a "?" to the name.
6939         (Nullable.LiftedConversion): Added support for user-defined
6940         conversions.
6941
6942         * cs-tokenizer.cs (Tokenizer.PutbackCloseParens): New public method.
6943
6944         * cs-parser.jay: Use ComposedCast everywhere instead of
6945         NullableType, so we don't need to check for NullableType
6946         everywhere.
6947         (conditional_expression): Added `INTERR CLOSE_PARENS' rule for the
6948         case where we'll be resolved into a `parenthesized_expression_0'
6949         afterwards.
6950
6951         * convert.cs
6952         (Convert.UserDefinedConversion): Added nullable conversions.
6953
6954 2005-02-28  Martin Baulig  <martin@ximian.com>
6955
6956         * generic.cs (TypeManager.IsNullableType): New static method.
6957         (Nullable): New abstract class.
6958         (Nullable.NullLiteral): New public class.
6959         (Nullable.LiftedConversion): New public class.
6960
6961         * cs-parser.jay (non_expression_type): Changed `builtin_types' to
6962         `builtin_types opt_nullable'.
6963
6964         * convert.cs
6965         (Convert.ImplicitConversionStandard): Added nullable conversions.
6966         (Convert.ExplicitConversionStandard): Likewise.
6967         (Convert.ExplicitConversion): Likewise.
6968
6969 2005-02-26  Martin Baulig  <martin@ximian.com>
6970
6971         * expression.cs (ComposedCast.DoResolveAsTypeStep): Allow `dim' to
6972         begin with a "?", for instance "?[]".  Don't do a type lookup if
6973         `dim' is empty.
6974
6975 2005-02-25  Martin Baulig  <martin@ximian.com>
6976
6977         The first part of Nullable Types :-)
6978
6979         * generic.cs (NullableType): New public class.
6980         (NullCoalescingOperator): New public class.
6981         (TypeArguments.Resolve): Add a CS0306 check.
6982
6983         * cs-parser.jay (opt_error_modifier): Removed, this was unused.
6984         (opt_nullable): New rule.
6985         (type): Added `opt_nullable' to `namespace_or_type_name',
6986         `builtin_types' and `pointer_type'.
6987         (array_type): Added `opt_nullable'.
6988         (opt_rank_specifier_or_nullable): New rule; this is the
6989         combination of `opt_rank_specifier' and `opt_nullable'.
6990         (opt_error): New rule; catch errors here.
6991         (nullable_type_or_conditional): New rule; we use this to check for
6992         nullable and still detect the conditional operator.
6993         (local_variable_type): Use `opt_rank_specifier_or_nullable'
6994         instead `opt_rank_specifier'.
6995
6996         * expression.cs (ComposedCast.DoResolveAsTypeStep): Added support
6997         for nullables.
6998
6999 2005-02-24  Martin Baulig  <martin@ximian.com>
7000
7001         * README, README.Changes: Removed; they're old and obsolete.
7002
7003 2005-02-22  Martin Baulig  <martin@ximian.com>
7004
7005         * generic.cs (TypeParameter.Resolve): If resolving the constraints
7006         returned an error, set `constraints' to null to avoid a crash
7007         later on.
7008         (TypeParameter.ResolveType): Likewise.
7009
7010 2005-02-22  Martin Baulig  <martin@ximian.com>
7011
7012         * generic.cs
7013         (Constraints.ResolveTypes): Protect against being called twice.
7014         (Constraints.CheckInterfaceMethod): Don't call ResolveTypes().
7015         (TypeParameter.ResolveType): New public method; calls
7016         constraints.ResolveTypes().
7017         (TypeParameter.DefineType): Moved constraints.ResolveType() out
7018         into the new ResolveType().
7019         (GenericMethod.Define): Call ResolveType() on all our
7020         TypeParameter's.        
7021
7022 2005-02-21  Martin Baulig  <martin@ximian.com>
7023
7024         * generic.cs
7025         (TypeManager.generic_nullable_type): New static public field.
7026         (TypeManager.InitGenericCoreType): Lookup "System.Nullable`1".
7027
7028         * rootcontext.cs
7029         (RootContext.ResolveCore): Resolve "System.Nullable`1".
7030
7031 2005-02-15  Martin Baulig  <martin@ximian.com>
7032
7033         * generic.cs (ConstructedType.Constraints): Correctly check
7034         constraints if the argument type is a type parameter; fixes
7035         #72326. 
7036
7037 2005-02-02  Martin Baulig  <martin@ximian.com>
7038
7039         * delegate.cs (Delegate.DefineType): Report an internal error if
7040         TypeManager.multicast_delegate_type is null.  See bug #72015 for
7041         details.        
7042
7043 2005-01-29  Miguel de Icaza  <miguel@novell.com>
7044
7045         * pending.cs: Produce better code (no nops produced by using Ldarg
7046         + value).
7047         
7048         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
7049         i - 1' it should be arg + 1.
7050
7051         Fixes bug #71819.
7052         
7053 2005-01-26  Martin Baulig  <martin@ximian.com>
7054
7055         * cs-parser.jay (indexer_declarator): Don't report an error if we
7056         have type parameters since we can be an explicit interface
7057         implementation; fixes #71449.
7058
7059 2005-01-26  Martin Baulig  <martin@ximian.com>
7060
7061         * class.cs (TypeContainer.AttributeTargets): Return the correct
7062         AttributeTargets depending on our `Kind' instead of throwing an
7063         exception; fixes #71632.
7064
7065 2005-01-26  Martin Baulig  <martin@ximian.com>
7066
7067         * delegate.cs (Delegate.DefineType): Correctly define our type
7068         parameters.  Fixes #71483.
7069
7070 2005-01-25  Raja R Harinath  <rharinath@novell.com>
7071
7072         Fix #71602.
7073         * expression.cs (MemberAccess.DoResolve): Don't complain with
7074         cs0572 when the LHS of a member access has identical name and type
7075         name.
7076
7077 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
7078
7079         Fix #71651, #71675
7080         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
7081         CreatePermission.
7082         Create custom PermissionSet only for PermissionSetAttribute.
7083
7084 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
7085
7086         Fix #71649
7087         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
7088         delegates in static class.
7089
7090 2005-01-24  Martin Baulig  <martin@ximian.com>
7091
7092         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
7093         merging an implicit block, just use its reachability.
7094
7095         * statement.cs (Block.Resolve): Make the unreachable code check
7096         work wrt. implicit blocks; see test-337 from #63842.
7097
7098 2005-01-21  Alp Toker  <alp@atoker.com>
7099  
7100         * cs-parser.jay: destructor_declaration's container is PartialContainer
7101         not Class when partial types are used, so use Kind prop instead of
7102         'is'.
7103         
7104 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
7105
7106         * cs-parser.jay: Improve error reporting when an interface
7107         declares new types.
7108
7109 2005-01-20  Dick Porter  <dick@ximian.com>
7110
7111         * support.cs: SeekableStreamReader fix from Sandor Dobos
7112         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
7113         chars are read.  Fixes bug 70369.
7114
7115 2005-01-20  Raja R Harinath  <rharinath@novell.com>
7116
7117         * cs-parser.jay (catch_clause): Simplify current_block handling
7118         somewhat.
7119
7120 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
7121
7122         * convert.cs (ImplicitStandardConversionExists): Synchronize the
7123         code with ImplicitStandardConversion to handle the implicit
7124         conversion of method groups into valid delegate invocations. 
7125
7126         The problem is that in parameter handling we were using this code
7127         path.  Fixes bug #64698
7128
7129 2005-01-19  Raja R Harinath  <rharinath@novell.com>
7130
7131         * cs-parser.jay: Fix several infelicities.
7132         - Avoid assigning to the parser value stack.  Code like 
7133           '$3 = null' is unclean.  Synthesize a value for the code block
7134           instead. 
7135         - Avoid using oob_stack for storing location information.  Use ...
7136         (_mark_): ... this.  New (empty) rule.  Saves the current location
7137         in $$.
7138         (foreach_statement): Avoid using oob_stack for current_block
7139         handling.  Use technique used in for_statement and
7140         using_statement.  Synthesize a value for the code block to store
7141         additional intermediate information.
7142
7143 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
7144
7145         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
7146         of a different type is only allowed to private fields of a
7147         containing type, not on fields of a base class.
7148
7149         See test-174.cs and error cs0122-9.cs
7150
7151 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7152
7153         Fix test-335.cs (bug #58126).
7154         * cs-parser.jay (argument): Split out non-expression parts of the
7155         rule into 'non_simple_argument'.
7156         (invocation_expression): Support parenthesized invocations with
7157         multiple arguments, and with single non-simple arguments.
7158
7159 2005-01-13  Raja R Harinath  <rharinath@novell.com>
7160
7161         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
7162         places.
7163
7164 2005-01-12  Raja R Harinath  <rharinath@novell.com>
7165
7166         Fix cs0038-1.cs, cs1640-6.cs.
7167         * ecore.cs (Expression.Resolve): Remove special-case for
7168         SimpleName in error-handling.
7169         (Expression.almostMatchedMembers): Relax access permission to
7170         protected.
7171         (Expression.MemberLookupFailed): Handle duplicates in
7172         almostMatchedMembers list.
7173         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
7174         * expression.cs (New.DoResolve): Report CS1540 for more cases.
7175         * typemanager.cs (GetFullNameSignature): Use the MethodBase
7176         overload if the passed in MemberInfo is a MethodBase.
7177
7178 2005-01-25  Martin Baulig  <martin@ximian.com>
7179
7180         * doc.cs
7181         (DocUtil.emptyParamList): Removed; use `Type.EmptyTypes' instead.
7182
7183 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
7184
7185         Fix #70749
7186         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
7187         for non-CAS & merge permission sets properly.
7188
7189 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7190
7191         Improve standard-compliance of simple name and member access 
7192         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
7193         * ecore.cs (FullNamedExpression): New abstract base class 
7194         for Namespaces and TypeExpressions.
7195         (ResolveFlags.SimpleName): Remove.
7196         (SimpleName): Remove support for dotted names.
7197         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
7198         DeclSpace.FindType and DeclSpace.LookupType.
7199         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
7200         (Expression.ExprClassName): Make member function.
7201         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
7202         a namespace.  Remove creation of dotted "SimpleName"s.
7203         (MemberAccess.DoResolve): Likewise.
7204         * decl.cs (DeclSpace.Cache): Make private.
7205         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
7206         (DeclSpace.FindType): Update.
7207         (DeclSpace.LookupType): Move here from RootContext.  Return a 
7208         FullNamedExpression.
7209         * namespace.cs (Namespace): Derive from FullNamedExpression
7210         so that it can be part of expression resolution.
7211         (Namespace.Lookup): Return an FullNamedExpression.
7212         (NamespaceEntry.LookupAlias): Lookup aliases only in current
7213         namespace.
7214         * rootcontext.cs (NamespaceLookup): Remove.
7215         (LookupType): Move to DeclSpace.
7216         * attribute.cs (CheckAttributeType): Update.
7217         * doc.cs (FindDocumentedType): Remove allowAlias argument.
7218         (FindDocumentedTypeNonArray): Likewise.
7219
7220 2005-01-11  Raja R Harinath  <rharinath@novell.com>
7221
7222         Fix cs0509.cs, cs1632.cs.
7223         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
7224         is the same as IsInterface.
7225         (TypeContainer.GetClassBases): Likewise.
7226         * statement.cs (LabeledStatement.ig): New field.
7227         (LabeledStatement.LabelTarget): Save ILGenerator which created the
7228         label.
7229         (LabeledStatement.DoEmit): Check that the label was created with
7230         the same ILGenerator.
7231
7232 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7233
7234         Fix #71058
7235         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
7236         accessors to its properties.
7237
7238         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
7239         from accessors to property.
7240         
7241 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
7242
7243         Fix #70722
7244         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
7245         only for overrides.
7246         
7247 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
7248
7249         * attribute.cs: Check for null and empty strings.  
7250
7251         I have lost another battle to Paolo.
7252
7253 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
7254
7255         Fix #70942
7256         * class.cs (PropertyMethod): Set Parent field in ctors.
7257         (SetMethod.InternalParameters): Add unsafe switch hack.
7258         Override MarkForDuplicationCheck where it is appropriate.
7259
7260         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
7261         It says whether container allows members with the same name.
7262         Base default is no.
7263         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
7264         Removed is_method parameter.
7265
7266 2005-01-06  Duncan Mak  <duncan@ximian.com>
7267
7268         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
7269         because the previous change led to incorrect reporting of CS1032
7270         ("Cannot define/undefine preprocessor symbols after first token in
7271         file"). Instead of using `tokens_seen' as the only flag that
7272         triggers CS1040, introduce `comments_seen'. This new flag is used
7273         to signify having seen comments on the current line, so it is
7274         unset after a newline.
7275
7276 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7277
7278         * doc.cs : When searching for a type, find nested type too.
7279           This fixes bug #71040.
7280
7281 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
7282
7283         * doc.cs :
7284           - Warn missing member comment on those classes which also does not
7285             have doc comments. Fixed bug #71041.
7286           - Don't warn missing doc comment on default constructor.
7287             Fixed bug #71042.
7288
7289 2005-01-06  Duncan Mak  <duncan@ximian.com>
7290
7291         * cs-tokenizer.cs (xtoken): After handling traditional C-style
7292         comments, set `tokens_seen' to true. This allows us to detect
7293         misplaced preprocessor directives (i.e. not at the beginning of
7294         the a line, nor after whitespaces). In that case, report error
7295         CS1040. This fixes bug #56460.
7296
7297         * cs-parser.jay (interface_member_declaration): Add checks for
7298         IsExplicitImpl, and report CS0541 error if an interface member is
7299         defined as an explicit interface declaration.
7300
7301 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
7302
7303         Fix #70817
7304         * class.cs (PropertyMethod): Set Parent field in ctors.
7305         (SetMethod.InternalParameters): Add unsafe switch hack.
7306         
7307         * decl.cs (MemberCore.Parent): Cannot be readonly.
7308
7309 2005-01-06  Raja R Harinath  <rharinath@novell.com>
7310
7311         * decl.cs (DeclSpace.ResolveType): Remove.
7312         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
7313         Merge in code from ...
7314         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
7315         * class.cs, enum.cs: Update to changes.
7316
7317 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
7318
7319         * anonymous.cs: Ensure that we init the scope of our parent if it
7320         has not been initialized yet.
7321
7322 2004-12-30  Duncan Mak  <duncan@ximian.com>
7323
7324         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
7325         if field.FieldBuilder is null. Fixes #70758.
7326
7327         * convert.cs: Fixed some typos and updated some of the comments.
7328         (ImplicitStandardConversionExists):
7329         (TryImplicitIntConversion): If `target_type' is an interface and
7330         the type of `ic' implements this interface, return true or a new
7331         BoxedCast instead of null. This fixes #70468.
7332
7333 2004-12-29  Duncan Mak  <duncan@ximian.com>
7334
7335         * expression.cs (Argument.Emit): Check that Expr is
7336         IMemoryLocation before casting to it, and report CS1510 otherwise.
7337
7338         This fixes #70402.
7339
7340 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
7341
7342         * statement.cs (Block.ThisVariable): remove the recursion here, to
7343         make the --profile more sane.
7344
7345 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
7346
7347         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
7348         assembly, by JB Evain.
7349
7350 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7351
7352         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
7353           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
7354         "parent" refers to enclosing type/class.  "base" refers to superclass.
7355
7356 2004-12-17  Raja R Harinath  <rharinath@novell.com>
7357
7358         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7359         Ensure that we only have GlobalAttributes.
7360         * attribute.cs (Attribute.Emit): Make non-virtual.
7361         (GlobalAttribute.Emit): Remove.
7362         (Attribute.Resolve): Make virtual.
7363         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
7364         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
7365         the argument. Don't create one.
7366         (Attribute.GetObsoleteAttribute): Likewise.
7367         (Attribute.GetClsCompliantAttributeValue): Likewise.
7368         * class.cs, decl.cs: Update to changes.
7369
7370 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
7371
7372         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
7373         
7374         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
7375         
7376         * statement.cs (Foreach.Resolve): Add error 186 report.
7377
7378 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
7379
7380         * expression.cs (Conditional.DoResolve): Add warning 429.
7381         
7382         * statement.cs (If.Resolve): Add warning 665.
7383
7384 2004-12-16  Raja R Harinath  <rharinath@novell.com>
7385
7386         New invariant: RootContext.Tree.Types.NamespaceEntry == null
7387         except when in the parser, and in GlobalAttribute.
7388         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
7389         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
7390         RootContext.Tree.Types.NamespaceEntry once work is done.
7391         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
7392         and resets RootContext.Tree.Types.NamespaceEntry.
7393
7394 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
7395
7396         * cs-parser.jay: Don't create a block for every variable.
7397
7398 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
7399
7400         * location.cs: Provide extra information.
7401
7402         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
7403         variables from the captured environment, it is the ldarg_0.
7404
7405 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7406
7407         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
7408         find a conclusion.
7409         
7410         * class.cs: Changed warning level for 169 to avoid developer
7411         displeasure from warning flooding. It will be changed back when they
7412         fix most of current BCL warnings.
7413         
7414         * RootContext.cs: Pushed default WarningLevel to 3.
7415         
7416         * statement.cs: Removed unused variable.
7417
7418 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
7419
7420         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
7421         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
7422         Add error 502 report.
7423         (StaticClass.DefineType): Add error 441 report.
7424         (Class.AllowedModifiersProp): New virtual property as temporary
7425         extension to AllowedModifiers.
7426         (Class.DefineType): Add error 418 report. Moved ModFlags check here
7427         to share implementation with StaticClass and don't call virtual
7428         methods from ctor.
7429         
7430         * driver.cs (MainDriver): Add error 1558 test.
7431
7432         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
7433         report. Moved error 36 test here.
7434
7435         * statement.cs (Throw.Resolve): Add error 724 report.
7436
7437         * typemanager.cs: Add out_attribute_type core type.
7438         
7439 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
7440
7441         * class.cs (TypeContainer.VerifyClsCompliance): Add error
7442         3018 report.
7443         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
7444
7445         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
7446         3017 report.
7447         
7448         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
7449
7450         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
7451         Add error 3023 report.
7452         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
7453
7454         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
7455         implementation.
7456
7457 2004-12-12  John Luke  <john.luke@gmail.com>
7458
7459         * driver.cs (AddArgs): take -- into account when
7460         adding arguments, fixes bug 65710 
7461
7462 2004-12-12  Martin Baulig  <martin@ximian.com>
7463
7464         * expression.cs (Unary.TryReduceNegative): Added support for
7465         SByteConstant and ByteConstant.
7466         (Unary.Reduce): Check error values from TryReduceNegative().
7467
7468 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
7469
7470         * attributes.cs (Attribute.Resolve): Avoid multiple error report
7471         and report exception as error 182.
7472
7473 2004-12-10  Raja R Harinath  <rharinath@novell.com>
7474
7475         * driver.cs (Main): Fix message when there are warnings.
7476
7477 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
7478
7479         * delegate.cs: Fixed my fix from yesterday, sorry about that.
7480
7481 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
7482
7483         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
7484         Reduced number of warnings.
7485         
7486         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
7487
7488 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
7489
7490         * driver.cs: Removed message.
7491
7492         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
7493
7494 2004-12-08    <vargaz@freemail.hu>
7495
7496         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
7497
7498 2004-12-08  Martin Baulig  <martin@ximian.com>
7499
7500         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7501         instead of a CS3002 for properties and indexer.
7502
7503 2004-12-08  Martin Baulig  <martin@ximian.com>
7504
7505         * decl.cs (MemberName.ToString): Make this work again.
7506
7507 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
7508
7509         * attribute.cs (Resolve): Add error 591 detection.
7510
7511         * class.cs (FieldMember.Define): Add error 1547 detection.
7512         (Indexer.Define): Add error 620 detection.
7513         (Operator.Define): Add error 590 detection.
7514
7515         * ecore.cs: Missing argument for error 79.
7516
7517         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
7518         detection.
7519
7520 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
7521
7522         Fix #70106
7523         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
7524         only.
7525
7526 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7527
7528         * cs-parser.jay : handle doc comments on implicit/explicit operators.
7529           Some operator comments were suppressed.
7530         * doc.cs : Implicit/explicit operator name in doc comments are like
7531           "op_Explicit(type)~returnType", so added suffix handling.
7532
7533 2005-01-21  Alp Toker  <alp@atoker.com>
7534
7535         * cs-parser.jay: destructor_declaration's container is PartialContainer
7536         not Class when partial types are used, so use Kind prop instead of 'is'.
7537
7538 2004-12-12  Martin Baulig  <martin@ximian.com>
7539
7540         * expression.cs (Unary.TryReduceNegative): Added support for
7541         SByteConstant and ByteConstant.
7542         (Unary.Reduce): Check error values from TryReduceNegative().
7543
7544 2004-12-11  Martin Baulig  <martin@ximian.com>
7545
7546         * support.cs (ReflectionParameters.ParameterName): If we have a
7547         `gpd', call `ParameterName' on it.
7548
7549         * parameter.cs (Parameter.GetParameterAttributes): New static method.
7550
7551         * pending.cs (PendingImplementation.DefineProxy): Call
7552         DefineParameter() for all of the MethodBuilder's arguments.
7553
7554 2004-12-09  Martin Baulig  <martin@ximian.com>
7555
7556         * doc.cs (DocUtil): Make this a static class.
7557
7558 2004-12-09  Martin Baulig  <martin@ximian.com>
7559
7560         * expression.cs (Invocation.InferType): Moved the type inference
7561         implementation into TypeManager.
7562
7563         * generics.cs (TypeManager): Moved the type inference
7564         implementation here.
7565
7566 2004-12-09  Martin Baulig  <martin@ximian.com>
7567
7568         * typemanager.cs (TypeManager): Make this a partial class.
7569
7570         * generics.cs
7571         (TypeManager): Move the generics part of `TypeManager' here.
7572
7573 2004-12-08  Martin Baulig  <martin@ximian.com>
7574
7575         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
7576         instead of a CS3002 for properties and indexer.  Added CS3024
7577         check for generic interfaces.
7578
7579         * attributes.cs (AttributeTester.AnalyzeTypeCompliance): Generic
7580         instances are not CLS-compliant.
7581
7582 2004-12-08  Martin Baulig  <martin@ximian.com>
7583
7584         * cs-parser.jay
7585         (void_pointer_expression): New rule for `void*', `void**' etc.
7586         (typeof_expression): Add `void_pointer_expression'; fixes #66846.       
7587
7588 2004-12-08  Martin Baulig  <martin@ximian.com>
7589
7590         * expression.cs (Invocation.InferType): Removed the hack for
7591         MethodCore.MayUnify().  
7592
7593         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Make
7594         this actually work.
7595
7596         * class.cs (MethodCore.MayUnify): Use
7597         TypeManager.MayBecomeEqualGenericTypes().       
7598
7599 2004-12-08  Martin Baulig  <martin@ximian.com>
7600
7601         * expression.cs (Is.DoResolve, As.DoResolve): If we're a type
7602         parameter, box it.  Fixes #69233.
7603
7604 2004-12-08  Martin Baulig  <martin@ximian.com>
7605
7606         * generic.cs (ConstructedType.CheckConstraints): Valuetypes always
7607         have the ctor constraint.  Fixes #68326.
7608
7609 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
7610
7611         * cs-parser.jay : interface comment was not consumed because of
7612           extra opt_semicolon before doc handling.
7613
7614 2004-12-03  Raja R Harinath  <rharinath@novell.com>
7615
7616         Fix test-327.cs, test-328.cs, and put in early infrastructure
7617         for eventually fixing #52697.
7618         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
7619         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
7620         from other methods.
7621         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
7622         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
7623         (VerifyUsing, error246): Update.
7624         * rootcontext.cs (RootContext.NamespaceLookup): Just use
7625         'NamespaceEntry.LookupNamespaceOrType'.
7626
7627 2004-12-07  Martin Baulig  <martin@ximian.com>
7628
7629         * driver.cs: Call it "BETA SOFTWARE" :-)
7630
7631 2004-12-06  Raja R Harinath  <rharinath@novell.com>
7632
7633         Fix crash on cs0657-17.cs.
7634         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
7635         Use RootContext.Tree.Types, not 'new RootTypes ()'.
7636         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
7637         the case where the NamespaceEntry gets overwritten.
7638
7639 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
7640
7641         Fixed #69195, #56821
7642         * ecore.cs (ResolveBoolean): Tiny refactoring.
7643
7644         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
7645         of right expression resolving when left is false constant and
7646         operator is LogicalAnd OR true constant and operator is LogicalOr.
7647
7648         * statement.cs (ResolveUnreachable): Always reports warning.
7649
7650 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
7651
7652         * class.cs: Distinguish between 1721 and 1722 (just a little help
7653         for the programmer).
7654
7655 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
7656
7657         * delegate.cs: Only allow this on new versions of the language. 
7658
7659 2004-12-02  Duncan Mak  <duncan@ximian.com>
7660
7661         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
7662         Expression class.
7663         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
7664         here as a static method. Take an additional bool out parameter
7665         `must_do_cs1540_check' for signaling to InstanceResolve.
7666         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
7667         member field from PropertyExpr class and made it an argument of
7668         the method instead.
7669         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
7670         check for MarshalByRefObject, and report CS0122 instead of CS1540.
7671         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
7672         and `remove_accessor' as well as InstanceResolve: report CS0122
7673         where applicable.
7674
7675         Fixes #70129.
7676
7677 2004-12-07  Martin Baulig  <martin@ximian.com>
7678
7679         * decl.cs (DeclSpace.AddToContainer): Report correct errors CS0694
7680         and CS0692 where appropriate.
7681
7682 2004-12-06  Martin Baulig  <martin@ximian.com>
7683
7684         * class.cs (MethodCore.MayUnify): Moved the CS0408 check here from
7685         IsDuplicateImplementation() and improved it.
7686
7687         * expression.cs (Invocation.InferTypeArguments): Added
7688         `Type[] inferred_class_types' argument (for MethodCore.MayUnify)
7689         and removed the "ref" modifier from `infered_types'.
7690
7691         * decl.cs (MemberName.ToString): Removed the exception.
7692
7693 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
7694
7695         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
7696           comments are allowed.
7697
7698 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7699
7700         * delegate.cs: Add checks for subtypes in paramaters and return values
7701         in VerifyMethod () to add support for Covariance/Contravariance
7702         in delegates.
7703         
7704 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7705
7706         * report.cs: Remove extra closing parenthesis.
7707
7708         * convert.cs (Error_CannotImplicitConversion): If the name of the
7709         types are the same, provide some extra information.
7710
7711 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
7712
7713         Fix bug #70102
7714         * attribute.cs (Resolve): Improved implementation of params
7715         attribute arguments.
7716
7717         * support.cs (ParameterData): Add HasParams to be faster.
7718
7719 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
7720
7721         all things are for /doc support:
7722
7723         * doc.cs: new file that supports XML documentation generation.
7724         * mcs.exe.sources: added doc.cs.
7725         * driver.cs:
7726           Handle /doc command line option.
7727           Report error 2006 instead of 5 for missing file name for /doc.
7728           Generate XML documentation when required, after type resolution.
7729         * cs-tokenizer.cs:
7730           Added support for picking up documentation (/// and /** ... */),
7731           including a new XmlCommentState enumeration.
7732         * cs-parser.jay:
7733           Added lines to fill Documentation element for field, constant,
7734           property, indexer, method, constructor, destructor, operator, event
7735           and class, struct, interface, delegate, enum.
7736           Added lines to warn incorrect comment.
7737         * rootcontext.cs :
7738           Added Documentation field (passed only when /doc was specified).
7739         * decl.cs:
7740           Added DocComment, DocCommentHeader, GenerateDocComment() and
7741           OnGenerateDocComment() and some supporting private members for
7742           /doc feature to MemberCore.
7743         * class.cs:
7744           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
7745         * delegate.cs:
7746           Added overriden DocCommentHeader.
7747         * enum.cs:
7748           Added overriden DocCommentHeader and GenerateDocComment().
7749
7750 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
7751
7752         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
7753         unwrapping the enumeration values, chain to
7754         DoConstantNumericPromotions again, so we can promote things to the
7755         fundamental types (takes care of enums that are bytes, sbytes).
7756
7757         Fixes bug #62054.
7758
7759 2004-12-01  Raja R Harinath  <rharinath@novell.com>
7760
7761         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
7762         Fix long-standing bug in type-lookup.  Use FindType instead of
7763         LookupType when ec.ResolvingTypeTree.
7764         (Attribute.ResolveType, Attribute.Resolve)
7765         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
7766         Update to changes.
7767         (Attributes.Search): Remove internal version.  Update.
7768         (Attributes.SearchMulti): Update.
7769         (Attributes.GetClsCompliantAttribute): Remove.
7770         (Attributes.GetIndexerNameAttribute): Remove.
7771         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
7772         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
7773         * class.cs (Indexer.Define): Likewise.
7774
7775 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
7776
7777         Fix bug #68790
7778         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
7779         MarshallByReference members access.
7780
7781         * expression.cs: Use CheckMarshallByRefAccess;
7782         Better error CS0197 message.
7783
7784         * report.cs: Print whole related error message.
7785
7786 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7787
7788         * class (GetClassBases): Better error 60 report.
7789         (EventProperty): Disabled warning 67 detection.
7790
7791 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7792
7793         Fix bug #60324
7794         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
7795
7796         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
7797         precise values.
7798
7799 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
7800
7801         Fix bug #49488
7802         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
7803
7804         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
7805
7806 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
7807
7808         * attribute.cs (Attribute.Resolve): Refine error reporting and
7809         report a cs0117 if the identifier does not exist, to distinguish
7810         from 0617 which is a miss-use of the actual identifier.
7811
7812         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
7813         between cs0070 and cs0079.
7814
7815         * class.cs (MemberBase.DoDefine): When reporting a wrong
7816         accessibility level, we use MethodCore to compare instead of
7817         Method (this was a regression in some refactoring effort).
7818
7819         So now we correctly report cs0056 again.
7820
7821         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
7822         testing the target_type (which was known to be object_type) and
7823         not the source type (which is anonymous_method).
7824
7825         Fixed reporting of error cs1660.
7826
7827         * expression.cs (UserCast.Source): Expose the underlying cast.
7828
7829         * statement.cs (Switch.SwitchGoverningType): Sort the list of
7830         allowed types to find a match to int32 first (most common).
7831
7832         In addition, it ignores any ImplicitUserConversions that did an
7833         internal implicit conversion (as the switch statement allows only
7834         one integral conversion to exist).
7835
7836         * class.cs (PartialContainer.Create): rename `name' to
7837         `member_name' for clarity.  Then replace the string calls with a
7838         call to MemberName.GetPartialName, as now using
7839         MemberName.ToString is an error (this is due to the side effects
7840         it had, that were fixed in the past).
7841
7842         This will restore the error reporting on a number of partial class
7843         errors that were missusing this (and getting an exception as a
7844         results, which is now just a plain textual warning, because
7845         yyparse debug output would crash otherwise).
7846
7847 2004-11-26  Raja R Harinath  <rharinath@novell.com>
7848
7849         * Makefile (PROGRAM_INSTALL_DIR): Remove.
7850
7851 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7852
7853         * rootcontext.cs (LookupType): Make sure to cache lookups that
7854         don't give us a negative result. This saves about 5% of corlib
7855         compilation time.
7856
7857 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7858
7859         * report.cs (AbstractMessage.Print): messages are sent to stderr
7860
7861         * class.cs (TypeContainer.GetClassBases): It is an error to have a
7862         non-interface in the list of interfaces (at this point, either
7863         parent was properly set, or a base class is being listed in the
7864         interfaces section).
7865
7866         This flags error 1722, and resolves the crash from bug 69259.
7867
7868 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
7869
7870         * statement.cs (Using.EmitExpressionFinally): make this work right
7871         for valuetypes. Fixes 69926.
7872
7873 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7874
7875         * const.cs (Const.ChangeType): Cope with the "0 literal can be
7876         converted to an enum" here, before we try to change the underlying
7877         type.  This code exists, but it is a different code path than the
7878         one used while encoding constants.
7879
7880         (ImplicitReferenceConversionExists): In addition, resynchronized
7881         the code here, so it matches the same code in
7882         ImplicitReferenceConversionExists for the `from any class-type S
7883         to any interface-type T'.       
7884
7885 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
7886
7887         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
7888
7889 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
7890
7891         * cs-parser.jay: Use verbosity accordingly. 
7892
7893 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7894
7895         * expression.cs (Unary.ResolveOperator): Do not report warning;
7896         AddressOf reads from variable.
7897         
7898         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
7899
7900 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
7901
7902         Fix bug #69462
7903
7904         * attribute.cs (Attributable): Removed CheckTargets.
7905         (Attributes.Emit): Explicit attribute targets are tested here.
7906
7907         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
7908         not enabled for interfaces.
7909
7910         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
7911         (GetAssemblyName): Ouch next bug there.
7912
7913 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
7914
7915         * expression.cs: Error 275 added.
7916         
7917 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
7918
7919         Fix bug #69177 (Implemented decimal constant support)
7920
7921         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
7922         (BinaryFold): Add DecimalConstant.
7923
7924         * const.cs (Define): Decimal constant 
7925         (is not constant.
7926         (ChangeType): Add decimal type handling.
7927         (LookupConstantValue): Don't set value for decimal type but
7928         emit DecimalConstantAttribute. Needed for constant optimization.
7929
7930         * constant.cs (ToDecimal): New method.
7931         (ConvertToDecimal): New method.
7932         (IntConstant): Implemented ConvertToDecimal.
7933         (DecimalConstant.Emit): Emit optimized version for decimals in
7934         int range.
7935
7936         * expression.cs (ResolveOperator): Changed order of constant
7937         reduction to work correctly with native types which have
7938         overloaded operators.
7939         (ResolveMemberAccess): Extract constant value from attribute
7940         for decimal type.
7941
7942         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
7943
7944         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
7945         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
7946         (ChangeType): Decimal is special.
7947         (TypeToCoreType): Add decimal type.
7948
7949 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
7950
7951         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
7952         decimal types.
7953
7954 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
7955
7956         * class.cs (EventField.ApplyAttributeBuilder): Fix error
7957         test cs1667-5.cs.
7958
7959 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
7960
7961         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
7962
7963         * pending.cs (PendingImplementation): Grab only interfaces.
7964
7965 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
7966
7967         * statement.cs (ForeachHelperMethods): Add location member and
7968         error 202 detection.
7969
7970 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
7971
7972         * expression.cs (DoResolveBase): Fixed wrong warning for out
7973         variables.
7974
7975 2004-12-04  Martin Baulig  <martin@ximian.com>
7976
7977         * convert.cs (Convert.TypeParameter_to_Null): Use the constraints
7978         to check whether the conversion is ok.
7979
7980         * typemanager.cs (TypeManager.GetTypeArguments): Just return
7981         `Type.EmptyTypes' if we're not a generic TypeContainer.
7982
7983 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
7984
7985         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
7986         old bug: when converting from the null literal to a pointer,
7987         return an EmptyCast, not the NullLiteral.
7988
7989         This fixes #69921, the recent null_type changes probably made this
7990         bug more prominent.
7991
7992 2004-12-03  Martin Baulig  <martin@ximian.com>
7993
7994         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
7995         method as our child, call AnonymousMethod.Compatible() on it.
7996
7997 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
7998
7999         * class.cs (FieldBase): Use an unused bit field from the field to
8000         encode the `has_offset' property from the FieldMember.  This saves
8001         a couple of Ks on bootstrap compilation.
8002
8003         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
8004         method as our child, return the AnonymousMethod resolved
8005         expression.
8006
8007         * expression.cs (New.DoResolve): Allow return values from
8008         NewDelegate to also include AnonymousMethods.
8009
8010         Fixes #70150.
8011
8012 2004-11-29  Raja R Harinath  <rharinath@novell.com>
8013
8014         * decl.cs (MemberCore.MemberName): Remove readonly to fix an error
8015         cs1648 report.
8016         * rootcontext.cs (ResolveCore::interfaces_first_stage): Add
8017         System.Runtime.InteropServices._Exception, since it's a base
8018         interface of the core type System.Exception in the net_2_0 profile.
8019
8020 2004-11-27  Martin Baulig  <martin@ximian.com>
8021
8022         * ecore.cs (Expression.StoreFromPtr): Use `stobj' for generic parameters.
8023
8024 2004-11-26  Raja R Harinath  <rharinath@novell.com>
8025
8026         * Makefile: Convert to use executable.make.
8027         * gmcs.exe.sources: New.
8028
8029 2004-11-25  Martin Baulig  <martin@ximian.com>
8030
8031         * expression.cs (Invocation.InferType): Added support for byref types.
8032
8033 2004-11-25  Martin Baulig  <martin@ximian.com>
8034
8035         * statement.cs (Foreach.FetchMethodMoveNext): Wrap `mi.ReturnType'
8036         in TypeManager.TypeToCoreType().
8037
8038 2004-11-25  Martin Baulig  <martin@ximian.com>
8039
8040         * iterators.cs (Iterator.DoDefineMembers): Override and lookup the
8041         "Dispose" method from the `current_type'.
8042         (Iterator.EmitMoveNext): Use the `dispose_method' we looked up in
8043         DoDefineMembers() instead of using the MethodBuilder; this is
8044         required for generic iterators.
8045
8046         * class.cs (TypeContainer.DoDefineMembers): Make this virtual.
8047
8048 2004-11-24  Martin Baulig  <martin@ximian.com>
8049
8050         * ecore.cs (Expression.LoadFromPtr): Use `ldobj' for generic parameters.
8051
8052 2004-11-20  Martin Baulig  <martin@ximian.com>
8053
8054         * expression.cs (Invocation.InferType): Correctly infer generic
8055         instances; see gen-103.cs.
8056         (Invocation.InferTypeArguments): If a generic method doesn't have
8057         any unbound type parameters, we don't need to infer anything.
8058
8059 2004-11-19  Raja R Harinath  <rharinath@novell.com>
8060
8061         * Makefile (gmcs.exe): Update to new location of bootstrap mcs.exe.
8062
8063 2004-11-17  Raja R Harinath  <rharinath@novell.com>
8064
8065         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
8066         (TypeHandle.GetMemberCache): New.
8067         (TypeHandle.TypeHandle): Update.
8068         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
8069         (TypeManager.LookupParentInterfacesCache):
8070         Rename from LookupInterfaceCache.  Optimize slightly.
8071         (TypeManager.MemberLookup_FindMembers): Update.
8072         * decl.cs (MemberCache.MemberCache): Set Container to null in the
8073         multi-type variant.
8074         (AddCacheContents): Rename from AddHashtable.
8075         * class.cs (TypeContainer.parent_container): Remove.
8076         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
8077         (TypeContainer.DoDefineMembers): Don't initialize it.
8078         Update to name changes.
8079         
8080 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
8081
8082         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
8083         that factors the code to check access modifiers on override.  
8084
8085         (PropertyBase): Use the code here.
8086
8087         Patch from Lluis S'anchez, fixes bug #69361.
8088
8089 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
8090
8091         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
8092         routine that is used to report the use of a captured variable
8093         whose address has been taken.
8094
8095         There are two checks: one when variables are being captured and
8096         the other check is when the address of a variable is taken. 
8097         
8098         (because an anonymous methods might be resolved before *or* after
8099         the address has been taken) and 
8100
8101         * expression.cs (Conditional.DoResolve): Remove the special
8102         casing that Martin added to trueExpr and falseExpr being both
8103         NullLiteral.  We get the right behavior now just by introducing
8104         the null_type into the compiler. 
8105
8106         * convert.cs (ExplicitConversion): Change the code to use
8107         null_type instead of testing `expr is NullLiteral'.
8108         (ImplicitConversionStandard): use null_type too.
8109         (ImplicitReferenceConversionExists): use null_type too.
8110         (ImplicitReferenceConversion): use null_type too.
8111
8112         * literal.cs: The type of `NullLiteral' is now null_type instead
8113         of object_type. 
8114         (Resolve): Set the type here.
8115
8116         * typemanager.cs: Introduce null_type.
8117
8118 2004-11-18  Martin Baulig  <martin@ximian.com>
8119
8120         * rootcontext.cs
8121         (RootContext.LookupType): Return a `Type', not a `TypeExpr'.
8122
8123 2004-11-18  Martin Baulig  <martin@ximian.com>
8124
8125         * ecore.cs (TypeExpr.DoResolveAsTypeStep): Make this protected.
8126
8127 2004-11-18  Martin Baulig  <martin@ximian.com>
8128
8129         * generic.cs (Constraints.Resolve): Take an `EmitContext' instead
8130         of a `DeclSpace'.  If one of our constraints is a `ConstructedType',
8131         call ResolveConstructedType() on it to resolve it without checking
8132         constraints.
8133         (Constraints.ResolveTypes): Check them here.
8134         (ConstructedType.DoResolveAsTypeStep): Fully resolve ourselves,
8135         but don't check constraints.
8136         (ConstructedType.ResolveAsTypeTerminal): Override this and also
8137         check constraints here.
8138         (ConstructedType.ResolveConstructedType): New public method.  This
8139         is called from DoResolveAsTypeStep() and Constraints.Resolve() to
8140         resolve ourselves without checking constraints.
8141
8142         * ecore.cs (Expression.ResolveAsTypeTerminal): Make this virtual.
8143
8144 2004-11-18  Martin Baulig  <martin@ximian.com>
8145
8146         * decl.cs
8147         (DeclSpace.CurrentType): Changed type from `TypeExpr' to `Type'.
8148
8149         * delegate.cs (Delegate.DefineType): Always create the EmitContext.
8150
8151 2004-11-18  Martin Baulig  <martin@ximian.com>
8152
8153         * ecore.cs (TypeExpr.ResolveType): Removed.
8154         (Expression.ResolveAsTypeTerminal): We always return a fully
8155         resolved `TypeExpr', so we can just access its `Type'.
8156
8157         * class.cs (TypeContainer.DefineType): Resolve `CurrentType' here.
8158
8159 2004-11-17  Martin Baulig  <martin@ximian.com>
8160
8161         * ecore.cs (IAlias.Type): Replaced with ResolveAsType() to make
8162         sure we don't return any unresolved TypeExpr's.
8163         (TypeAliasExpression): The .ctor now takes an `IAlias' instead of
8164         a `TypeExpr'.
8165         (Expression.ResolveAsTypeTerminal): Make sure `te.Type != null'.
8166
8167         * expression.cs (MemberAccess.ResolveAsTypeStep): Don't return any
8168         unresolved `ConstructedType's.
8169
8170 2004-11-17  Martin Baulig  <martin@ximian.com>
8171
8172         * ecore.cs (TypeExpr.ResolveType): Don't make this virtual.
8173
8174 2004-11-17  Martin Baulig  <martin@ximian.com>
8175
8176         * ecore.cs
8177         (Expression.ResolveAsTypeTerminal): Removed the `bool silent' argument.
8178
8179         * decl.cs (DeclSpace.ResolveType): Removed.
8180         (DeclSpace.ResolveTypeExpr): Removed the `bool silent' argument.
8181
8182 2004-11-17  Martin Baulig  <martin@ximian.com>
8183
8184         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
8185         direction, like FindMembers() does.  Fixes #69546, testcase is in
8186         test-315.cs.    
8187
8188 2004-11-16  Martin Baulig  <martin@ximian.com>
8189
8190         This is based on a patch from Marek Safar, see bug #69082.
8191         Fixes bugs #63705 and #67130.
8192
8193         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
8194         method; create a MemberCache for an interface type and cache the
8195         result.
8196
8197         * decl.cs (IMemberContainer.ParentContainer): Removed.
8198         (IMemberContainer.ParentCache): New property.
8199         (MemberCache.SetupCacheForInterface): Removed.
8200         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
8201         to create a cache for an interface's "parent".
8202
8203         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
8204         interfaces too.
8205
8206 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
8207
8208         * statement.cs: Avoid adding bools to a hashtable.
8209
8210 2004-11-15  Martin Baulig  <martin@ximian.com>
8211
8212         * decl.cs (MemberName.GetPartialName): Removed, use GetTypeName() instead.
8213
8214 2004-11-11  Martin Baulig  <martin@ximian.com>
8215
8216         * typemanager.cs (TypeManager.GetMethodName): New method.
8217
8218         * class.cs (MethodData.Define): Include the generic arity in the
8219         name of an explicit interface; also add it to the method name.
8220
8221         * pending.cs (PendingImplementation.InterfaceMethod): The method
8222         name now includes the generic arity.
8223
8224 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
8225
8226         * expression.cs (Invocation.OverloadResolve): Flag error if we are
8227         calling an unsafe method from a safe location.
8228
8229 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
8230
8231         Fix #69167
8232         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
8233
8234 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
8235
8236         * namespace.cs (VerifyUsing): use GetPartialName instead of
8237         ToString. 
8238
8239 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
8240
8241         * statement.cs (Return.Resolve): Fix regression in typo: if
8242         `in_exc', we have to request a NeedReturnLabel, this was a typo
8243         introduced in the anonymous method check-in.  Fixes #69131.
8244
8245         * Indexers were using the ShortName when defining themselves,
8246         causing a regression in the compiler bootstrap when applying the
8247         patch from 2004-11-02 (first part), now they use their full name
8248         and the bug is gone.
8249
8250 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
8251
8252         * driver.cs: Strip the path from the names of embedded resources. Fixes
8253         #68519.
8254
8255 2004-11-04  Raja R Harinath  <rharinath@novell.com>
8256
8257         Fix error message regression: cs0104-2.cs.
8258         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
8259         (AliasEntry.Resolve): Update.
8260         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
8261         'silent' flag.
8262         (RootContext.LookupType): Update.
8263
8264 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
8265
8266         * cs-parser.jay: Add support for handling accessor modifiers
8267         * class: Add support port accessor modifiers and error checking,
8268         define PropertyMethod.Define as virtual (not abstract anymore)
8269         * ecore.cs: Add checking for proeprties access with access modifiers
8270         * iterators.cs: Modify Accessor constructor call based in the modified
8271         constructor
8272 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
8273
8274         * expression.cs (StringConcat): Handle being called twice,
8275         as when we have a concat in a field init with more than two
8276         ctors in the class
8277
8278 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
8279
8280         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
8281         special case explicit implementations, we should always produce
8282         the .property or .event declaration.
8283         
8284         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
8285         since it will not return correct data if people use this
8286         unresolved in the presence of using statements (see test-313).
8287
8288         * class.cs (MethodData.Define): If we are an explicit interface
8289         implementation, set the method name to the full name of the
8290         interface plus the name of the method.  
8291
8292         Notice that using the method.MethodName.GetFullName() does not
8293         work, as it will only contain the name as declared on the source
8294         file (it can be a shorthand in the presence of using statements)
8295         and not the fully qualifed type name, for example:
8296
8297         using System;
8298
8299         class D : ICloneable {
8300                 object ICloneable.Clone ()  {
8301                 }
8302         }
8303
8304         Would produce a method called `ICloneable.Clone' instead of
8305         `System.ICloneable.Clone'.
8306
8307         * namespace.cs (Alias.Resolve): Use GetPartialName.
8308         
8309 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8310
8311         * cs-parser.jay: Add error 1055 report.
8312
8313 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
8314
8315         * assign.cs (Assign.DoResolve): Only do the transform of
8316         assignment into a New if the types are compatible, if not, fall
8317         through and let the implicit code deal with the errors and with
8318         the necessary conversions. 
8319
8320 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
8321
8322         * cs-parser.jay: Add error 1031 report.
8323
8324         * cs-tokenizer.cs: Add location for error 1038.
8325
8326 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8327
8328         * cs-parser.jay: Add error 1016 report.
8329
8330 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8331
8332         * cs-parser.jay: Add errors 1575,1611 report.
8333
8334 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8335
8336         * cs-parser.jay: Add error 1001 report.
8337
8338 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8339
8340         Fix #68850
8341         * attribute.cs (GetMarshal): Add method argument for
8342         caller identification.
8343
8344         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
8345         agument for GetMarshal and RuntimeMissingSupport.
8346
8347 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
8348
8349         * attribute.cs (ExtractSecurityPermissionSet): Removed
8350         TypeManager.code_access_permission_type.
8351
8352         * typemanager.cs: Removed TypeManager.code_access_permission_type.
8353
8354 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
8355
8356         * expression.cs (LocalVariableReference.DoResolveLValue): Check
8357         for obsolete use of a variable here.   Fixes regression on errors
8358         cs0619-25 and cs0619-26.
8359
8360 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
8361
8362         Fix #62358, implemented security attribute encoding.
8363
8364         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
8365         Tests permitted SecurityAction for assembly or other types.
8366         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
8367         data from SecurityPermissionAttribute to PermisionSet class.
8368
8369         * class.cs (ApplyAttributeBuilder): Added special handling
8370         for System.Security.Permissions.SecurityAttribute based types.
8371
8372         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
8373         special handling for System.Security.Permissions.SecurityAttribute
8374         based types.
8375
8376         * enum.cs (ApplyAttributeBuilder): Added special handling
8377         for System.Security.Permissions.SecurityAttribute based types.
8378
8379         * parameter.cs (ApplyAttributeBuilder): Added special handling
8380         for System.Security.Permissions.SecurityAttribute based types.
8381
8382         * rootcontext.cs: Next 2 core types.
8383
8384         * typemanager.cs (TypeManager.security_permission_attr_type):
8385         Built in type for the SecurityPermission Attribute.
8386         (code_access_permission_type): Build in type.
8387
8388 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
8389
8390         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
8391         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
8392         all of this information into
8393         EmitContext.EmitCapturedVariableInstance.
8394         
8395         * codegen.cs (EmitCapturedVariableInstance): move here the
8396         funcionality of emitting an ldarg.0 in the presence of a
8397         remapping.   This centralizes the instance emit code.
8398
8399         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
8400         then emit a load of this: it means that we have reached the
8401         topmost ScopeInfo: the one that contains the pointer to the
8402         instance of the class hosting the anonymous method.
8403
8404         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
8405         captures to the topmost CaptureContext.
8406
8407 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
8408
8409         * expression.cs (LocalVariableReference): Move the knowledge about
8410         the iterators into codegen's EmitCapturedVariableInstance.
8411
8412 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
8413
8414         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
8415         all code paths return a value from an anonymous method (it is the
8416         same as the 161 error, but for anonymous methods).
8417
8418 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
8419
8420         The introduction of anonymous methods in the compiler changed
8421         various ways of doing things in the compiler.  The most
8422         significant one is the hard split between the resolution phase
8423         and the emission phases of the compiler.
8424
8425         For instance, routines that referenced local variables no
8426         longer can safely create temporary variables during the
8427         resolution phase: they must do so from the emission phase,
8428         since the variable might have been "captured", hence access to
8429         it can not be done with the local-variable operations from the runtime.
8430         
8431         * statement.cs 
8432
8433         (Block.Flags): New flag `IsTopLevel' to indicate that this block
8434         is a toplevel block.
8435
8436         (ToplevelBlock): A new kind of Block, these are the blocks that
8437         are created by the parser for all toplevel method bodies.  These
8438         include methods, accessors and anonymous methods.
8439
8440         These contain some extra information not found in regular blocks:
8441         A pointer to an optional CaptureContext (for tracking captured
8442         local variables and parameters).  A pointer to the parent
8443         ToplevelBlock.
8444         
8445         (Return.Resolve): Catch missmatches when returning a value from an
8446         anonymous method (error 1662).
8447         Invoke NeedReturnLabel from the Resolve phase instead of the emit
8448         phase.
8449
8450         (Break.Resolve): ditto.
8451
8452         (SwitchLabel): instead of defining the labels during the
8453         resolution phase, we now turned the public ILLabel and ILLabelCode
8454         labels into methods called GetILLabelCode() and GetILLabel() that
8455         only define the label during the Emit phase.
8456
8457         (GotoCase): Track the SwitchLabel instead of the computed label
8458         (its contained therein).  Emit the code by using
8459         SwitchLabel.GetILLabelCode ().
8460
8461         (LocalInfo.Flags.Captured): A new flag has been introduce to track
8462         whether the Local has been captured or not.
8463
8464         (LocalInfo.IsCaptured): New property, used to tell whether the
8465         local has been captured.
8466         
8467         * anonymous.cs: Vastly updated to contain the anonymous method
8468         support.
8469
8470         The main classes here are: CaptureContext which tracks any
8471         captured information for a toplevel block and ScopeInfo used to
8472         track the activation frames for various local variables.   
8473
8474         Each toplevel block has an optional capture context associated
8475         with it.  When a method contains an anonymous method both the
8476         toplevel method and the anonymous method will create a capture
8477         context.   When variables or parameters are captured, they are
8478         recorded on the CaptureContext that owns them, for example:
8479
8480         void Demo () {
8481              int a;
8482              MyDelegate d = delegate {
8483                  a = 1;
8484              }
8485         }
8486
8487         Here `a' will be recorded as captured on the toplevel
8488         CapturedContext, the inner captured context will not have anything
8489         (it will only have data if local variables or parameters from it
8490         are captured in a nested anonymous method.
8491
8492         The ScopeInfo is used to track the activation frames for local
8493         variables, for example:
8494
8495         for (int i = 0; i < 10; i++)
8496                 for (int j = 0; j < 10; j++){
8497                    MyDelegate d = delegate {
8498                         call (i, j);
8499                    }
8500                 }
8501
8502         At runtime this captures a single captured variable `i', but it
8503         captures 10 different versions of the variable `j'.  The variable
8504         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
8505         recorded on a child.  
8506
8507         The toplevel ScopeInfo will also track information like the `this'
8508         pointer if instance variables were referenced (this is necessary
8509         as the anonymous method lives inside a nested class in the host
8510         type of the method). 
8511
8512         (AnonymousMethod): Expanded to track the Toplevel, implement
8513         `AnonymousMethod.Compatible' to tell whether an anonymous method
8514         can be converted to a target delegate type. 
8515
8516         The routine now also produces the anonymous method content
8517
8518         (AnonymousDelegate): A helper class that derives from
8519         DelegateCreation, this is used to generate the code necessary to
8520         produce the delegate for the anonymous method that was created. 
8521
8522         * assign.cs: API adjustments for new changes in
8523         Convert.ImplicitStandardConversionExists.
8524
8525         * class.cs: Adjustments to cope with the fact that now toplevel
8526         blocks are of type `ToplevelBlock'. 
8527
8528         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
8529         insteda of standard blocks.
8530
8531         Flag errors if params arguments are passed to anonymous methods.
8532
8533         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
8534         `CurrentAnonymousMethod' which points to the current Anonymous
8535         Method.  The variable points to the AnonymousMethod class that
8536         holds the code being compiled.  It is set in the new EmitContext
8537         created for the anonymous method.
8538
8539         (EmitContext.Phase): Introduce a variable and an enumeration to
8540         assist in enforcing some rules about when and where we are allowed
8541         to invoke certain methods (EmitContext.NeedsReturnLabel is the
8542         only one that enfonces this right now).
8543
8544         (EmitContext.HaveCaptureInfo): new helper method that returns
8545         whether we have a CapturedContext initialized.
8546
8547         (EmitContext.CaptureVariable): New method used to register that a
8548         LocalInfo must be flagged for capturing. 
8549
8550         (EmitContext.CapturedParameter): New method used to register that a
8551         parameters must be flagged for capturing. 
8552         
8553         (EmitContext.CapturedField): New method used to register that a
8554         field must be flagged for capturing. 
8555
8556         (EmitContext.HaveCapturedVariables,
8557         EmitContext.HaveCapturedFields): Return whether there are captured
8558         variables or fields. 
8559
8560         (EmitContext.EmitMethodHostInstance): This is used to emit the
8561         instance for the anonymous method.  The instance might be null
8562         (static methods), this (for anonymous methods that capture nothing
8563         and happen to live side-by-side with the current method body) or a
8564         more complicated expression if the method has a CaptureContext.
8565
8566         (EmitContext.EmitTopBlock): Routine that drives the emission of
8567         code: it will first resolve the top block, then emit any metadata
8568         and then emit the code.  The split is done so that we can extract
8569         any anonymous methods and flag any captured variables/parameters.
8570         
8571         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
8572         during this phase, the ILGenerator should not be used as labels
8573         and local variables declared here might not be accessible to any
8574         code that is part of an anonymous method.  
8575
8576         Exceptions to this include the temporary variables that are
8577         created by some statements internally for holding temporary
8578         variables. 
8579         
8580         (EmitContext.EmitMeta): New routine, in charge of emitting all the
8581         metadata for a cb
8582
8583         (EmitContext.TemporaryReturn): This method is typically called
8584         from the Emit phase, and its the only place where we allow the
8585         ReturnLabel to be defined other than the EmitMeta.  The reason is
8586         that otherwise we would have to duplicate a lot of logic in the
8587         Resolve phases of various methods that today is on the Emit
8588         phase. 
8589
8590         (EmitContext.NeedReturnLabel): This no longer creates the label,
8591         as the ILGenerator is not valid during the resolve phase.
8592
8593         (EmitContext.EmitThis): Extended the knowledge in this class to
8594         work in anonymous methods in addition to iterators. 
8595
8596         (EmitContext.EmitCapturedVariableInstance): This emits whatever
8597         code is necessary on the stack to access the instance to a local
8598         variable (the variable will be accessed as a field).
8599
8600         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
8601         EmitContext.EmitAddressOfParameter): Routines to support
8602         parameters (not completed at this point). 
8603         
8604         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
8605         will also remove the parameters.
8606
8607         * convert.cs (Convert): Define a `ConstantEC' which points to a
8608         null.  This is just to prefity some code that uses
8609         ImplicitStandardConversion code and do not have an EmitContext
8610         handy.
8611
8612         The idea is to flag explicitly that at that point in time, it is
8613         known that the conversion will not trigger the delegate checking
8614         code in implicit conversions (which requires a valid
8615         EmitContext). 
8616
8617         Everywhere: pass new EmitContext parameter since
8618         ImplicitStandardConversionExists now requires it to check for
8619         anonymous method conversions. 
8620
8621         (Convert.ImplicitStandardConversionExists): If the type of an
8622         expression is the anonymous_method_type, and the type is a
8623         delegate, we invoke the AnonymousMethod.Compatible method to check
8624         whether an implicit conversion is possible. 
8625
8626         (Convert.ImplicitConversionStandard): Only do implicit method
8627         group conversions if the language level is not ISO_1.
8628
8629         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
8630         MethodInfo for the Invoke method.  used by Delegate and
8631         AnonymousDelegate.
8632
8633         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
8634         method conversions if the target type is a delegate.
8635
8636         Removed extra debugging nops.
8637
8638         (LocalVariableReference): Turn the `local_info' into a public
8639         field. 
8640
8641         Add `prepared' field, the same hack used for FieldExprs to cope
8642         with composed assignments, as Local variables do not necessarily
8643         operate purely on the stack as they used to: they can be captured
8644         fields. 
8645
8646         Add `temp' for a temporary result, like fields.
8647
8648         Refactor DoResolve and DoResolveLValue into DoResolveBase.
8649
8650         It now copes with Local variables that are captured and emits the
8651         proper instance variable to load it from a field in the captured
8652         case. 
8653
8654         (ParameterReference.DoResolveBase): During the resolve phase,
8655         capture parameters if we are in an anonymous method.
8656
8657         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
8658         anonymous method, use the EmitContext helper routines to emit the
8659         parameter reference.
8660
8661         * iterators.cs: Set RemapToProxy to true/false during the
8662         EmitDispose class.
8663
8664         * parameters.cs (GetParameterByName): New helper method. 
8665
8666         * typemanager.cs (anonymous_method_type) a new type that
8667         represents an anonyous method.  This is always an internal type,
8668         used as a fencepost to test against the anonymous-methodness of an
8669         expression. 
8670         
8671 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
8672
8673         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
8674         561 report.
8675         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
8676
8677 2004-11-10  Martin Baulig  <martin@ximian.com>
8678
8679         * expression.cs (Invocation.BetterFunction): If two methods have
8680         equal parameter types, but only one of them is generic, the
8681         non-generic one wins.
8682         (New.DoResolve): Don't set `is_struct' to false if we're a generic
8683         instance; just use `Type.IsValueType' to determine whether
8684         something is a struct or not.
8685         (MemberAccess.DoResolveAsTypeStep): Don't modify the `args' field,
8686         so we can be called multiple times.
8687
8688 2004-11-10  Martin Baulig  <martin@ximian.com>
8689
8690         * generic.cs (TypeParameter.DefineConstraints): New public method.
8691         (TypeParameter.CheckAccessLevel): Override this and return true.
8692         (ConstructedType.ResolveType): Renamed to DoResolveType(), don't
8693         override ResolveType() anymore.
8694         (ConstructedType.DoResolveAsTypeStep): Call DoResolveType() here.
8695
8696 2004-11-10  Martin Baulig  <martin@ximian.com>
8697
8698         * rootcontext.cs (RootContext.LookupType): If we're a nested type,
8699         call DeclSpace.ResolveNestedType() on it.
8700
8701 2004-11-10  Martin Baulig  <martin@ximian.com>
8702
8703         * support.cs (ReflectionParameters.ParameterModifier): If `gpd' is
8704         non-null, call ParameterModifier() on it.
8705
8706 2004-11-10  Martin Baulig  <martin@ximian.com>
8707
8708         * iterators.cs
8709         (Iterators): Added `current_type' and `this_type' fields.
8710         (Iterators.DefineIterator): Create a new EmitContext and store it
8711         in `ec'; compute `this_type'.
8712
8713 2004-11-10  Martin Baulig  <martin@ximian.com>
8714
8715         * typemanager.cs
8716         (TypeManager.IsPrivateAccessible): New public method.
8717         (Closure.Filter): Use IsPrivateAccessible() instead of IsEqual().
8718
8719 2004-11-10  Martin Baulig  <martin@ximian.com>
8720
8721         * class.cs (TypeContainer.DefineType): Call
8722         TypeBuilder.DefineGenericParameters() before resolving the type
8723         parameters.
8724         (MethodData.parent_method): New protected field.
8725         (MethodData..ctor): Added `MethodInfo parent_method' argument.
8726         (MethodData.Define): Compute `parent_method'.
8727
8728         * decl.cs
8729         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
8730         (MemberCore.GetClsCompliantAttributeValue): Likewise.
8731         (DeclSpace.ec): New protected field; store the EmitContext here.
8732         (DeclSpace.EmitContext): New public property.
8733         (DeclSpace.ResolveType): Un-comment from the [Obsolte] attribute.
8734         (DeclSpace.ResolveNestedType): New public method.
8735         (DeclSpace.ResolveTypeExpr): Just call ResolveAsTypeTerminal() here.
8736         (DeclSpace.NestedAccessible): Added `Type tb' argument.
8737         (DeclSpace.FamilyAccessible): Likewise.
8738         (DeclSpace.FindType): Call ResolveNestedType() for nested types.
8739         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
8740         EmitContext.
8741
8742         * delegate.cs (Delegate.Define): Store the EmitContext in the `ec'
8743         field.
8744
8745         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
8746         (Enum.Emit): Don't create a new EmitContext.
8747
8748 2004-10-18  Martin Baulig  <martin@ximian.com>
8749
8750         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
8751         `Type' directly, but call ResolveType() on it.
8752         (Catch.Resolve): Likewise.
8753         (Foreach.Resolve): Likewise.
8754
8755 2004-10-18  Martin Baulig  <martin@ximian.com>
8756
8757         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
8758         `Type' directly, but call ResolveType() on it.
8759         (Probe.DoResolve): Likewise.
8760         (ArrayCreation.LookupType): Likewise.
8761         (TypeOf.DoResolve): Likewise.
8762         (SizeOf.DoResolve): Likewise.
8763
8764 2004-10-18  Raja R Harinath  <rharinath@novell.com>
8765
8766         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
8767         the ResolveType.
8768
8769 2004-10-17  John Luke  <john.luke@gmail.com>
8770
8771         * class.cs (Operator.GetSignatureForError): use CSharpName
8772
8773         * parameter.cs (Parameter.GetSignatureForError): Returns
8774         correct name even if was not defined.
8775
8776 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8777
8778         Fix #65816.
8779         * class.cs (TypeContainer.EmitContext): New property.
8780         (DefineNestedTypes): Create an emitcontext for each part.
8781         (MethodCore.DoDefineParameters): Use container's emitcontext.
8782         Pass type array to InternalParameters.
8783         (MemberBase.DoDefine): Use container's emitcontext.
8784         (FieldMember.Define): Likewise.
8785         (Event.Define): Likewise.
8786         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8787         Pass type array to InternalParameters.
8788         (SetIndexerMethod.GetParameterInfo): Likewise.
8789         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8790         * delegate.cs (Define): Pass emitcontext to
8791         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8792         array to InternalParameters.
8793         * expression.cs (ParameterReference.DoResolveBase): Pass
8794         emitcontext to GetParameterInfo.
8795         (ComposedCast.DoResolveAsTypeStep): Remove check on
8796         ec.ResolvingTypeTree.
8797         * parameter.cs (Parameter.Resolve): Change argument to
8798         EmitContext.  Use ResolveAsTypeTerminal.
8799         (Parameter.GetSignature): Change argument to EmitContext.
8800         (Parameters.ComputeSignature): Likewise.
8801         (Parameters.ComputeParameterTypes): Likewise.
8802         (Parameters.GetParameterInfo): Likewise.
8803         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8804         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8805         * support.cs (InternalParameters..ctor): Remove variant that takes
8806         a DeclSpace.
8807         * typemanager.cs (system_intptr_expr): New.
8808         (InitExpressionTypes): Initialize it.
8809
8810 2004-10-12  Chris Toshok  <toshok@ximian.com>
8811
8812         * cs-parser.jay: fix location for try_statement and catch_clause.
8813
8814 2004-10-18  Martin Baulig  <martin@ximian.com>
8815
8816         * class.cs (FieldMember.Define): Don't access the TypeExpr's
8817         `Type' directly, but call ResolveType() on it.
8818         (MemberBase.DoDefine): Likewise.
8819
8820         * expression.cs (New.DoResolve): Don't access the TypeExpr's
8821         `Type' directly, but call ResolveType() on it.
8822         (ComposedCast.DoResolveAsTypeStep): Likewise.
8823
8824         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
8825         `Type' directly, but call ResolveType() on it.
8826
8827 2004-10-17  John Luke  <john.luke@gmail.com>
8828
8829         * class.cs (Operator.GetSignatureForError): use CSharpName
8830
8831         * parameter.cs (Parameter.GetSignatureForError): Returns
8832         correct name even if was not defined.
8833
8834 2004-10-13  Raja R Harinath  <rharinath@novell.com>
8835
8836         Fix #65816.
8837         * class.cs (TypeContainer.EmitContext): New property.
8838         (DefineNestedTypes): Create an emitcontext for each part.
8839         (MethodCore.DoDefineParameters): Use container's emitcontext.
8840         Pass type array to InternalParameters.
8841         (MemberBase.DoDefine): Use container's emitcontext.
8842         (FieldMember.Define): Likewise.
8843         (Event.Define): Likewise.
8844         (SetMethod.GetParameterInfo): Change argument to EmitContext.
8845         Pass type array to InternalParameters.
8846         (SetIndexerMethod.GetParameterInfo): Likewise.
8847         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
8848         * delegate.cs (Define): Pass emitcontext to
8849         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
8850         array to InternalParameters.
8851         * expression.cs (ParameterReference.DoResolveBase): Pass
8852         emitcontext to GetParameterInfo.
8853         (ComposedCast.DoResolveAsTypeStep): Remove check on
8854         ec.ResolvingTypeTree.
8855         * parameter.cs (Parameter.Resolve): Change argument to
8856         EmitContext.  Use ResolveAsTypeTerminal.
8857         (Parameter.GetSignature): Change argument to EmitContext.
8858         (Parameters.ComputeSignature): Likewise.
8859         (Parameters.ComputeParameterTypes): Likewise.
8860         (Parameters.GetParameterInfo): Likewise.
8861         (Parameters.ComputeAndDefineParameterTypes): Likewise.
8862         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
8863         * support.cs (InternalParameters..ctor): Remove variant that takes
8864         a DeclSpace.
8865         * typemanager.cs (system_intptr_expr): New.
8866         (InitExpressionTypes): Initialize it.
8867
8868 2004-10-12  Chris Toshok  <toshok@ximian.com>
8869
8870         * cs-parser.jay: fix location for try_statement and catch_clause.
8871
8872 2004-10-07  Raja R Harinath  <rharinath@novell.com>
8873
8874         More DeclSpace.ResolveType avoidance.
8875         * decl.cs (MemberCore.InUnsafe): New property.
8876         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
8877         with newly created EmitContext.
8878         (FieldMember.Define): Likewise.
8879         * delegate.cs (Delegate.Define): Likewise.
8880         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
8881         only if normal name-lookup fails.
8882         (TypeExpr.DoResolve): Enable error-checking.
8883         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
8884         (SizeOf.DoResolve): Likewise.
8885         (ComposedCast.DoResolveAsTypeStep): Likewise.
8886         (StackAlloc.DoResolve): Likewise.
8887         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
8888         (Block.Unsafe): New property.
8889         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
8890         (Unsafe): Set 'unsafe' flag of contained block.
8891         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
8892         (Fixed.Resolve): Likewise.
8893         (Catch.Resolve): Likewise.
8894         (Using.ResolveLocalVariableDecls): Likewise.
8895         (Foreach.Resolve): Likewise.
8896
8897 2004-10-05  John Luke <john.luke@gmail.com>
8898
8899         * cs-parser.jay: add location to error CS0175
8900
8901 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
8902
8903         * ecore.cs (Expression.Constantity): Add support for turning null
8904         into a constant.
8905
8906         * const.cs (Const.Define): Allow constants to be reference types
8907         as long as the value is Null.
8908
8909 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
8910
8911         * namespace.cs (NamespaceEntry.Using): No matter which warning
8912         level is set, check if this namespace name has already been added.
8913
8914 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
8915
8916         * expression.cs: reftype [!=]= null should always use br[true,false].
8917         # 67410
8918
8919 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
8920
8921         Fix #67108
8922         * attribute.cs: Enum conversion moved to 
8923         GetAttributeArgumentExpression to be applied to the all
8924         expressions.
8925
8926 2004-10-01  Raja R Harinath  <rharinath@novell.com>
8927
8928         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
8929         * class.c (TypeContainer.DefineType): Flag error if
8930         base types aren't accessible due to access permissions.
8931         * decl.cs (DeclSpace.ResolveType): Move logic to
8932         Expression.ResolveAsTypeTerminal.
8933         (DeclSpace.ResolveTypeExpr): Thin layer over
8934         Expression.ResolveAsTypeTerminal.
8935         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
8936         Refactor code into NestedAccess.  Use it.
8937         (DeclSpace.NestedAccess): New.
8938         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
8939         argument to silence errors.  Check access permissions.
8940         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
8941         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
8942         (Cast.DoResolve): Likewise.
8943         (New.DoResolve): Likewise.
8944         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
8945         (TypeOf.DoResolve): Likewise.
8946
8947         * expression.cs (Invocation.BetterConversion): Return the Type of
8948         the better conversion.  Implement section 14.4.2.3 more faithfully.
8949         (Invocation.BetterFunction): Make boolean.  Make correspondence to
8950         section 14.4.2.2 explicit.
8951         (Invocation.OverloadResolve): Update.
8952         (Invocation): Remove is_base field.
8953         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
8954         (Invocation.Emit): Likewise.
8955
8956 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
8957
8958         * cs-parser.jay: Reverted 642 warning fix.
8959
8960 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8961
8962         Fix bug #66615
8963         * decl.cs (FindMemberWithSameName): Indexer can have more than
8964         1 argument.
8965
8966 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8967
8968         * expression.cs (LocalVariableReference.DoResolveLValue):
8969         Do not report warning 219 for out values.
8970         (EmptyExpression.Null): New member to avoid extra allocations.
8971
8972 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
8973
8974         * cs-parser.jay: Fix wrong warning 642 report.
8975
8976         * cs-tokenizer.cs (CheckNextToken): New helper;
8977         Inspect next character if is same as expected.
8978
8979 2004-09-23  Martin Baulig  <martin@ximian.com>
8980
8981         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
8982         (Convert.ImplicitReferenceConversionExists): Likewise.
8983
8984 2004-11-09  Raja R Harinath  <rharinath@novell.com>
8985
8986         * Makefile (DISTFILES): Comment out a few missing files.
8987
8988 2004-10-29  Raja R Harinath  <rharinath@novell.com>
8989
8990         * Makefile (bootstrap_libs,bootstrap_libfiles): New.
8991         (bootstrap-libs): New target.  Invokes the net_2_0_bootstrap profile.
8992         (gmcs.exe): Invoke bootstrap-libs.
8993         (clean-local): Clean the net_2_0_bootstrap profile too.
8994         (PROGRAM_INSTALL_DIR): New.
8995         (install-local): Use it.
8996
8997 2004-10-13  Martin Baulig  <martin@ximian.com>
8998
8999         * generic.cs (TypeManager.InflatedConstraints): New nested class.
9000         (TypeParameter.DefineType): If we're a method type parameter and
9001         that method is overriding something, "inflate" its constraints.
9002
9003 2004-10-12  Martin Baulig  <martin@ximian.com>
9004
9005         * expression.cs (MemberAccess.DoResolve): If we're a SimpleName
9006         and have type arguments, create and resolve a ConstructedType.
9007
9008 2004-10-12  Martin Baulig  <martin@ximian.com>
9009
9010         * decl.cs (MemberCache.FindMemberToOverride): Use
9011         TypeManager.IsEqual() to compare the parameters and Type.Equals()
9012         to compare the invocationType.
9013
9014         * typemanager.cs (TypeManager.IsEqual): Added support for arrays.
9015         When comparing two type parameters, only do the signature-only
9016         comparision for method type parameters.
9017
9018 2004-10-11  Martin Baulig  <martin@ximian.com>
9019
9020         * report.cs: Don't make --fatal abort on warnings, we have
9021         -warnaserror for that.
9022
9023 2004-10-11  Martin Baulig  <martin@ximian.com>
9024
9025         * typemanager.cs
9026         (TypeManager.IsEqualGenericType): Removed, use IsEqual() instead.
9027         (TypeManager.IsEqual): Call ourself recursively instead of using
9028         Type.IsEqual(). 
9029
9030 2004-10-11  Martin Baulig  <martin@ximian.com>
9031
9032         * class.cs (TypeContainer.DefineType): Only call TypeParameter.Define()
9033         on our own type parameters, not on the ones we inherit from a containing
9034         class.
9035
9036         * expression.cs (Invocation.InferType): Use `==', not `Equals()' for
9037         the comparision.
9038
9039         * generic.cs (TypeParameter.Define): We may only be called once.
9040
9041         * pending.cs (Pending.InterfaceMethod): Call TypeManager.Real_IsEqual()
9042         instead of TypeManager.IsEqual().
9043
9044 2004-09-28  Martin Baulig  <martin@ximian.com>
9045
9046         * generic.cs
9047         (GenericConstraints.EffectiveBaseClass): New public property.
9048         (TypeParameter.GenericConstraints): New public property.
9049         (ConstructedType.CheckConstraints): Improved.
9050
9051         * convert.cs (Convert.TypeParam_EffectiveBaseType): New private method.
9052         (Convert.TypeParameterConversion): New private method; use this in
9053         ImplicitReferenceConversion() and ImplicitReferenceConversionExists()
9054         for all conversions related to type parameters.
9055
9056 2004-09-24  Martin Baulig  <martin@ximian.com>
9057
9058         * convert.cs (Convert.ImplicitReferenceConversion): Added implicit
9059         type parameter conversions for type parameters which are known to
9060         be reference types.
9061
9062 2004-09-24  Martin Baulig  <martin@ximian.com>
9063
9064         * generic.cs (GenericConstraints): Added `IsReferenceType' and
9065         `IsValueType' properties.
9066
9067         * support.cs (ReflectionConstraints): Use
9068         Type.GetGenericParameterConstraints() instead of the old hack.
9069
9070 2004-09-24  Martin Baulig  <martin@ximian.com>
9071
9072         * generic.cs (GenericConstraints): Moved here and made it an
9073         abstract class.
9074
9075         * support.cs (GenericConstraints): Moved to generic.cs.
9076
9077 2004-09-24  Martin Baulig  <martin@ximian.com>
9078
9079         * support.cs
9080         (ReflectionConstraints): Un-nested this class and made it public.
9081
9082         * typemanager.cs
9083         (TypeManager.GetTypeParameterConstraints): New public method.
9084         (TypeManager.HasConstructorConstraint): Use the attributes.
9085
9086 2004-09-24  Martin Baulig  <martin@ximian.com>
9087
9088         * support.cs (GenericConstraints): Replaced `HasConstructor',
9089         `IsReferenceType' and `IsValueType' with `Attributes'.
9090         (ReflectionParameters.ReflectionConstraints): Removed the Create()
9091         method and made the .ctor public.
9092
9093         * generic.cs (Constraints.Attributes): New public property.
9094         (Constraints): Renamed `HasConstructor' -> `HasConstructorConstraint',
9095         `IsReferenceType' -> `HasReferenceTypeConstraint' and
9096         `IsValueType' -> `HasValueTypeConstraint'.
9097
9098 2004-09-23  Martin Baulig  <martin@ximian.com>
9099
9100         * generic.cs (Constraints): Reflect latest runtime changes.
9101
9102 2004-09-23  Martin Baulig  <martin@ximian.com>
9103
9104         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
9105         (Convert.ImplicitReferenceConversionExists): Likewise.
9106
9107 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
9108
9109         * class.cs (Operator.Define): Add error 448 and 559 report.
9110         
9111 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9112
9113         * class.cs (MemberBase.IsTypePermitted): New protected
9114         method for checking error CS0610.
9115
9116 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9117
9118         * class.cs (TypeContainer.HasExplicitLayout): New property
9119         Returns whether container has StructLayout attribute set Explicit.
9120         (FieldMember): New abstract class for consts and fields.
9121         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
9122         (Field): Reuse FieldMember.
9123
9124         * const.cs (Const): Reuse FieldMember.
9125
9126         * rootcontext.cs: EmitConstants call moved to class.
9127
9128 2004-09-22  Martin Baulig  <martin@ximian.com>
9129
9130         Marek and me just fixed one of our oldest bugs: #28562 :-)
9131
9132         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
9133
9134         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
9135         we're an EnumConstant, just return that.
9136         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
9137         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
9138         to get the value which'll actually be written into the attribute.
9139         However, we have to use GetValue() to access the attribute's value
9140         in the compiler.        
9141
9142 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
9143
9144         * constant.cs (Constant.IsNegative): New abstract property
9145         IsNegative.
9146
9147         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
9148         (StackAlloc.DoResolve): Reused IsNegative.
9149
9150 2004-09-22  Martin Baulig  <martin@ximian.com>
9151
9152         * typemanager.cs (TypeManager.LookupGenericTypeContainer): New
9153         public method; like LookupTypeContainer, but also works for
9154         generic instances.
9155
9156         * report.cs (Report.SymbolRelatedToPreviousError): Use
9157         TypeManager.LookupGenericTypeContainer().       
9158
9159 2004-09-22  Martin Baulig  <martin@ximian.com>
9160
9161         Thanks to Peter Sestoft for this bug report.
9162
9163         * expression.cs (Conditional): If both the `trueExpr' and the
9164         `falseExpr' is a NullLiteral, return a NullLiteral.
9165
9166 2004-09-22  Martin Baulig  <martin@ximian.com>
9167
9168         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
9169         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
9170         for the "get_Current" call.
9171
9172 2004-09-21  Martin Baulig  <martin@ximian.com>
9173
9174         * convert.cs (Convert.ImplicitReferenceConversion): When
9175         converting to an interface type, first check whether we're
9176         converting from a reference type.
9177
9178 2004-09-14  Martin Baulig  <martin@ximian.com>
9179
9180         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
9181
9182 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
9183
9184         Fixed bug #61902
9185         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
9186         called and is obsolete then this member suppress message
9187         when call is inside next [Obsolete] method or type.
9188
9189         * expression.cs: Use TestObsoleteMethodUsage member.
9190
9191 2004-09-14  Martin Baulig  <martin@ximian.com>
9192
9193         * genericparser.cs: Removed.
9194
9195 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
9196
9197         * class.cs (MethodCore.CheckBase): Fix bug #65757.
9198
9199 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
9200
9201         * attribute.cs (Attribute.Resolve): Add error 653 report.
9202
9203         * class.cs (Class.ApplyAttributeBuilder): Add error 641
9204         report.
9205         (Method.ApplyAttributeBuilder): Add error 685 report.
9206         (Operator.Define): Add error 564 report.
9207
9208         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
9209
9210         * expression.cs (Invocation.DoResolve): Add error
9211         245 and 250 report.
9212
9213         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
9214         error 674 report.
9215
9216 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9217
9218         * class.cs (ConstructorInitializer.Resolve):
9219         Wrong error number (515->516).
9220
9221 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9222
9223         * class.cs (Indexer.Define): Add error 631 report.
9224
9225 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9226
9227         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
9228
9229 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
9230
9231         * expression.cs (Probe.DoResolve): Add error CS0241 report.
9232
9233 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
9234
9235         * cs-parser.jay: Added error CS0241 report.
9236
9237 2004-09-10  Raja R Harinath  <rharinath@novell.com>
9238
9239         * cs-parser.jay (fixed_statement): Introduce a scope for the
9240         declaration in the 'fixed' statement.
9241
9242 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9243
9244         * cs-parser.jay: Added CS0230 error report.
9245
9246 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9247
9248         * cs-parser.jay: Added errors CS0231 and CS0257 report.
9249
9250 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9251
9252         * expression.cs (Argument.Resolve): Added error CS0192 and
9253         CS0199 report.
9254
9255 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
9256
9257         C# 2.0 #pragma warning feature
9258
9259         * cs-tokenizer.cs (PreProcessPragma): New method; 
9260         Handles #pragma directive.
9261
9262         * report.cs (WarningRegions): New class; Support
9263         class for #pragma warning directive. It tests whether
9264         warning is enabled for a given line.
9265
9266 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
9267
9268         * const.cs: Add more descriptive error report, tahnks to
9269         Sebastien. 
9270
9271 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
9272
9273         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
9274
9275 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
9276
9277         * expression.cs: Apply patch from Ben: Remove dead code from
9278         ArrayCreation, and remove the TurnintoConstant call in const.cs,
9279         as that code just threw an exception anwyays.
9280
9281         * const.cs: Remove the call to the turnintoconstant, for details
9282         see bug: #63144
9283         
9284         * literal.cs: The type of the null-literal is the null type;  So
9285         we use a placeholder type (literal.cs:System.Null, defined here)
9286         for it.
9287
9288         * expression.cs (Conditional.DoResolve): Remove some old code that
9289         is no longer needed, conversions have been fixed.
9290
9291         (ArrayCreationExpression.DoResolve): Return false if we fail to
9292         resolve the inner expression.
9293
9294 2004-09-07  Raja R Harinath  <rharinath@novell.com>
9295
9296         Fix test-290.cs.
9297         * cs-parser.jay (delegate_declaration): Record a delegate
9298         declaration as a type declaration.
9299         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
9300
9301 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
9302
9303         * parameter.cs: Do not crash if the type can not be resolved. 
9304
9305         * expression.cs: Report errors with unsafe pointers, fixes #64896
9306
9307 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
9308
9309         * expression.cs: Pointer arith always needs to do a conv.i
9310         if the operand is a long. fix 65320
9311
9312 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9313
9314         Fixed cs0619-37.cs, cs0619-38.cs
9315
9316         * enum.cs (GetObsoleteAttribute): Removed.
9317
9318         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
9319         on Enum member is double staged. The first is tested member
9320         and then enum.
9321
9322 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
9323
9324         Fixed #56986, #63631, #65231
9325
9326         * class.cs: (TypeContainer.AddToMemberContainer): New method,
9327         adds member to name container.
9328         (TypeContainer.AddToTypeContainer): New method, adds type to
9329         name container.
9330         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
9331         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
9332         AddOperator): Simplified by reusing AddToMemberContainer.
9333         (TypeContainer.UserDefinedStaticConstructor): Changed to property
9334         instead of field.
9335         (Method.CheckForDuplications): Fixed implementation to test all
9336         possibilities.
9337         (MemberBase): Detection whether member is explicit interface
9338         implementation is now in constructor.
9339         (MemberBase.UpdateMemberName): Handles IndexerName.
9340         (Accessor): Changed to keep also location information.
9341         (AbstractPropertyEventMethod): Is derived from MemberCore.
9342         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
9343         will be emited or not.
9344         (PropertyBase.AreAccessorsDuplicateImplementation):
9345         Tests whether accessors are not in collision with some method.
9346         (Operator): Is derived from MethodCore to simplify common
9347         operations.
9348
9349         * decl.cs (Flags.TestMethodDuplication): Test for duplication
9350         must be performed.
9351         (DeclSpace.AddToContainer): Adds the member to defined_names
9352         table. It tests for duplications and enclosing name conflicts.
9353
9354         * enum.cs (EnumMember): Clean up to reuse the base structures
9355
9356 2004-09-03  Martin Baulig  <martin@ximian.com>
9357
9358         Merged latest changes into gmcs.  Please keep this comment in
9359         here, it makes it easier for me to see what changed in MCS since
9360         the last time I merged.
9361
9362 2004-09-03  Martin Baulig  <martin@ximian.com>
9363
9364         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9365         into TypeContainer, to make partial classes work again.
9366
9367 2004-09-03  Martin Baulig  <martin@ximian.com>
9368
9369         * rootcontext.cs (RootContext.V2): Removed.
9370
9371 2004-03-23  Martin Baulig  <martin@ximian.com>
9372
9373         * expression.cs (Invocation.OverloadResolve): Added `bool
9374         may_fail' argument and use it instead of the Location.IsNull() hack.
9375
9376 2004-09-09  Martin Baulig  <martin@ximian.com>
9377
9378         * cs-parser.jay (namespace_declaration): Fixed CS0134 reporting.
9379
9380 2004-09-09  Martin Baulig  <martin@ximian.com>
9381
9382         * generic.cs (TypeParameter.DefineType): Added support for
9383         explicit interface methods.
9384
9385 2004-09-09  Martin Baulig  <martin@ximian.com>
9386
9387         * README.Changes: New document.  Started to list important changes
9388         between MCS and GMCS here.
9389
9390 2004-09-08  Martin Baulig  <martin@ximian.com>
9391
9392         * class.cs
9393         (TypeContainer.CheckRecursiveDefinition): New protected method.
9394         (TypeContainer.DefineType): Move the CS0146 check into
9395         CheckRecursiveDefinition().     
9396
9397 2004-09-06  Martin Baulig  <martin@ximian.com>
9398
9399         * generic.cs (ConstructedType.CheckConstraints): Allow builtin
9400         types for the constructor constraint.
9401
9402 2004-09-03  Martin Baulig  <martin@ximian.com>
9403
9404         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
9405         into TypeContainer, to make partial classes work again.
9406
9407 2004-09-03  Martin Baulig  <martin@ximian.com>
9408
9409         * rootcontext.cs (RootContext.V2): Removed.
9410
9411 2004-03-23  Martin Baulig  <martin@ximian.com>
9412
9413         * expression.cs (Invocation.OverloadResolve): Added `bool
9414         may_fail' argument and use it instead of the Location.IsNull() hack.
9415
9416 2004-09-03  Martin Baulig  <martin@ximian.com>
9417
9418         Merged latest changes into gmcs.  Please keep this comment in
9419         here, it makes it easier for me to see what changed in MCS since
9420         the last time I merged.
9421
9422 2004-09-03  Raja R Harinath  <rharinath@novell.com>
9423
9424         Fix #61128.
9425         * expression.cs (BetterConversion): Don't allow either conversion 
9426         to be null.  Remove redundant implicit conversion test when 'q ==
9427         null' -- when this function is invoked, we already know that the
9428         implicit conversion exists.
9429         (BetterFunction): Assume that 'best' is non-null.  Remove
9430         redundant reimplementation of IsApplicable when 'best' is null.
9431         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
9432         number of arguments.
9433         (IsAncestralType): Extract from OverloadResolve.
9434         (OverloadResolve): Make robust to the MethodGroupExpr being
9435         unsorted.  Implement all the logic of Section 14.5.5.1, and
9436         support overloading of methods from multiple applicable types.
9437         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
9438
9439         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
9440         (RealError, Warning): Append type of report to related symbol.
9441
9442 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
9443
9444         * enum.cs: Fixed CLS-Compliance checks for enum members.
9445         Error tests cs3008-8.cs, cs3014-8.cs
9446
9447 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9448
9449         Fixed bug #62342, #63102
9450         * class.cs: ImplementIndexer uses member.IsExplicitImpl
9451         like ImplementMethod.
9452
9453 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
9454
9455         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9456         Fixed bug #65170.
9457
9458 2004-09-02  Martin Baulig  <martin@ximian.com>
9459
9460         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9461         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9462         on the MethodBase.
9463
9464 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
9465
9466         C# 2.0 Static classes implemented
9467
9468         * class.cs (TypeContainer): instance_constructors,
9469         initialized_fields, initialized_static_fields,
9470         default_constructor, base_inteface_types are protected to be
9471         accessible from StaticClass.
9472         (TypeContainer.DefineDefaultConstructor): New virtual method
9473         for custom default constructor generating
9474         (StaticClass): New class to handle "Static classes" feature.
9475
9476         * cs-parser.jay: Handle static keyword on class like instance
9477         of StaticClass.
9478
9479         * driver.cs: Added "/langversion" command line switch with two
9480         options (iso-1, default).
9481
9482 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
9483
9484         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
9485
9486 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
9487
9488         * delegate.cs: Style.
9489
9490 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
9491
9492         * delegate.cs: Add seperate instance expr field for miguel.
9493
9494 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9495
9496         * PointerArithmetic (Resolve): make sure we are not doing
9497         pointer arith on void*. Also, make sure we are resolved
9498         by not setting eclass until resolve.
9499
9500         All callers: Make sure that PointerArithmetic gets resolved.
9501
9502 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
9503
9504         * ArrayCreation (LookupType): If the type does not resolve 
9505         to an array, give an error.
9506
9507 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
9508
9509         * statement.cs (Try.Resolve): Fixed bug #64222
9510
9511 2004-08-27  Martin Baulig  <martin@ximian.com>
9512
9513         * class.cs
9514         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9515         crash here.     
9516
9517 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9518
9519         * ecore.cs (Constantify): Get underlying type via
9520         System.Enum.GetUnderlyingType to avoid StackOverflow on the
9521         Windows in special cases.
9522
9523 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
9524
9525         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
9526         for obtaining also private methods.
9527         (GetRemoveMethod): Used GetRemoveMethod (true)
9528         for obtaining also private methods.
9529
9530 2004-09-02  Martin Baulig  <martin@ximian.com>
9531
9532         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
9533         TypeManager.GetArgumentTypes() rather than calling GetParameters()
9534         on the MethodBase.
9535
9536 2004-08-27  Martin Baulig  <martin@ximian.com>
9537
9538         * class.cs
9539         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
9540         crash here.     
9541
9542 2004-08-25  Martin Baulig  <martin@ximian.com>
9543
9544         * support.cs (ReflectionParameters..ctor): If this is a generic
9545         method, retrieve and store its type parameters.
9546         (InternalParameters..ctor): Added `TypeParameter[]' argument.
9547         (ReflectionParameters.GenericConstraints): The argument specifies
9548         the type parameter, not the method parameter.
9549         (InternalParameters.GenericConstraints): Likewise.
9550
9551         * generic.cs (TypeParameter.DefineType): Correctly handle
9552         constraints wrt. generic methods in interfaces and their
9553         implementations.        
9554
9555 2004-08-24  Martin Baulig  <martin@ximian.com>
9556
9557         * generic.cs (TypeParameter.IsSubclassOf): New public method.
9558         (Constraints.IsSubclassOf): New internal method.
9559
9560         * typemanager.cs (TypeManager.FindMembers): Added special support
9561         for GenericTypeParameterBuilder's.      
9562         (TypeManager.IsSubclassOf, IsFamilyAccessible): Added support for
9563         type parameters.
9564
9565 2004-08-24  Martin Baulig  <martin@ximian.com>
9566
9567         * typemanager.cs
9568         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
9569         this for accessibility checks.
9570         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
9571         IsNestedFamilyAccessible.
9572         (TypeManager.IsSubclassOf): New method, do what the name actually
9573         says.   
9574
9575 2004-08-24  Martin Baulig  <martin@ximian.com>
9576
9577         * expression.cs (MemberAccess.DoResolve): When resolving ourselves
9578         as a SimpleName, include the generic arity.
9579
9580 2004-08-24  Martin Baulig  <martin@ximian.com>
9581
9582         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
9583         MethodAttributes.HideBySig for operators.
9584
9585 2004-08-23  Martin Baulig  <martin@ximian.com>
9586
9587         Back to the old error reporting system :-)
9588
9589         * report.cs (Message): Removed.
9590         (Report.MessageData, ErrorData, WarningData): Removed.
9591         (Report.Error, Warning): Back to the old system.
9592
9593 2004-08-23  Martin Baulig  <martin@ximian.com>
9594
9595         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
9596
9597         * class.cs (TypeContainer.ParentContainer): New public virtual
9598         method; replaces the explicit interface implementation.
9599         (ClassPart.ParentContainer): Override.
9600
9601 2004-08-23  Martin Baulig  <martin@ximian.com>
9602
9603         * statement.cs (Switch): Added support for constant switches; see
9604         #59428 or test-285.cs.
9605
9606 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9607
9608         Fixed bug #62740.
9609         * statement.cs (GetEnumeratorFilter): Removed useless
9610         logic because C# specs is strict. GetEnumerator must be
9611         public.
9612
9613 2004-08-22  Martin Baulig  <martin@ximian.com>
9614
9615         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
9616         a switch and may break, reset the barrier.  Fixes #59867.
9617
9618 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
9619
9620         CLS-Compliance speed up (~5% for corlib)
9621
9622         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
9623         New method. Tests container for CLS-Compliant names
9624
9625         * class.cs (TypeContainer.VerifyClsName): New method.
9626         Checks whether container name is CLS Compliant.
9627         (Constructor): Implements IMethodData.
9628
9629         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
9630         low-case table for CLS Compliance test.
9631         (MemberCache.VerifyClsParameterConflict): New method.
9632         Checks method parameters for CS3006 error.
9633
9634         * enum.cs (EnumMember): Is derived from MemberCore.
9635         (Enum.VerifyClsName): Optimized for better performance.
9636
9637 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9638
9639         * report.cs: Renamed Error_T to Error and changed all
9640         references.
9641
9642 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
9643
9644         * class.cs (TypeContainer.IndexerArrayList): New inner class
9645         container for indexers.
9646         (TypeContainer.DefaultIndexerName): New constant for default
9647         indexer name. Replaced all "Item" with this constant.
9648         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
9649
9650         * typemanager.cs (TypeManager.default_member_ctor): Cache here
9651         DefaultMemberAttribute constructor.
9652
9653 2004-08-05  Martin Baulig  <martin@ximian.com>
9654
9655         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
9656         Fix bug #59429.
9657
9658 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
9659
9660         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
9661         multi platforms problem.
9662
9663         * compiler.csproj: Included shared files.
9664
9665 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9666
9667         Fix bug 60333, 55971 in the more general way
9668         * attribute.cs (Attribute.GetAttributeArgumentExpression):
9669         Added arg_type argument for constant conversion.
9670         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
9671
9672 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9673
9674         Fix bug #59760
9675         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
9676         OperatorArrayList, MethodCoreArrayList for typecontainer
9677         containers. Changed class member types to these new types.
9678         (MethodArrayList.DefineMembers): Added test for CS0659.
9679
9680 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
9681
9682         * cfold.cs: Synchronize the folding with the code in expression.cs
9683         Binary.DoNumericPromotions for uint operands.
9684
9685         * attribute.cs: Revert patch from Raja, it introduced a regression
9686         while building Blam-1.2.1 (hard to isolate a test case).
9687
9688 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
9689
9690         Fix for #55382
9691         * class.cs:
9692         (TypeContainer.Define): Renamed to DefineContainerMembers because of
9693         name collision.
9694         (MethodCore.parent_method): New member. The method we're overriding
9695         if this is an override method.
9696         (MethodCore.CheckBase): Moved from Method class and made common.
9697         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
9698         private.
9699         (MethodCore.CheckForDuplications): New abstract method. For custom
9700         member duplication search in a container
9701         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
9702         method and its return type.
9703         (Event.conflict_symbol): New member. Symbol with same name in the
9704         parent class.
9705
9706         * decl.cs:
9707         (MemberCache.FindMemberWithSameName): New method. The method
9708         is looking for conflict with inherited symbols.
9709
9710 2004-08-04  Martin Baulig  <martin@ximian.com>
9711
9712         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9713
9714         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9715
9716 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9717
9718         * report.cs (Message): New enum for better error, warning reference in
9719         the code.
9720         (MessageData): New inner abstract class. It generally handles printing of
9721         error and warning messages.
9722         Removed unused Error, Warning, Message methods.
9723
9724 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9725
9726         Fix for cs0592-8.cs test
9727         * attribute.cs
9728         (Attributable.ValidAttributeTargets): Made public.
9729         (Attribute.ExplicitTarget): New member for explicit target value.
9730         (Attribute.CheckTargets): Now we translate explicit attribute
9731         target to Target here.
9732
9733 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
9734
9735         * ecore.cs (MethodGroupExpr): new IsBase property.
9736
9737         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
9738
9739         * delegate.cs (DelegateCreation): store a MethodGroupExpr
9740         rather than an instance expr.
9741
9742         (DelegateCreation.Emit): Use the method group rather than
9743         the instance expression. Also, if you have base.Foo as the
9744         method for a delegate, make sure to emit ldftn, not ldftnvirt.
9745
9746         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
9747
9748         (NewDelegate.DoResolve): Only check for the existance of Invoke
9749         if the method is going to be needed. Use MethodGroupExpr.
9750
9751         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
9752
9753         * expression.cs: For pointer arith., make sure to use
9754         the size of the type, not the size of the pointer to
9755         the type.
9756
9757 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
9758
9759         Fix for #60722
9760         * class.cs (Class): Added error CS0502 test.
9761
9762 2004-08-03  John Luke  <jluke@cfl.rr.com>
9763             Raja R Harinath  <rharinath@novell.com>
9764
9765         Fix for #60997.
9766         * attribute.cs (Attribute.complained_before): New flag.
9767         (Attribute.ResolveType, Attribute.Resolve),
9768         (Attribute.DefinePInvokeMethod): Set it.
9769         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
9770         
9771 2004-08-03  Martin Baulig  <martin@ximian.com>
9772
9773         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9774         use a user-defined operator; we still need to do numeric
9775         promotions in case one argument is a builtin type and the other
9776         one has an implicit conversion to that type.  Fixes #62322.
9777
9778 2004-08-18  Martin Baulig  <martin@ximian.com>
9779
9780         * class.cs (Method.Define): Use the correct method name when
9781         creating the MethodBuilder for a generic method.
9782
9783 2004-08-17  Martin Baulig  <martin@ximian.com>
9784
9785         * generic.cs (Constraints): Support type parameter constraints.
9786
9787 2004-08-16  Martin Baulig  <martin@ximian.com>
9788
9789         * cs-tokenizer.cs (Tokenizer.TypeOfParsing): New public property.
9790         (Token.GENERIC_DIMENSION): New token; this is returned if we
9791         encounter an unbound generic type in a typeof() expression.
9792
9793         * cs-parser.jay (opt_type_argument_list): Added GENERIC_DIMENSION;
9794         this token is only generated while parsing a typeof() expression.
9795         (typeof_expression): Removed the old unbound_type hack.
9796
9797         * generic.cs (TypeArguments.IsUnbound): New public property.
9798
9799         * decl.cs (MemberName): Added support for unbound types.
9800
9801 2004-08-14  Martin Baulig  <martin@ximian.com>
9802
9803         * typemanager.cs
9804         (TypeManager.IsEqualGenericInstance): New static method.
9805         (TypeManager.IsSubclassOrNestedChildOf, IsSubclassOf): This is
9806         just used to check accessibility, so follow the rules of 26.1.6.        
9807
9808         * expression.cs (MemberAccess.ResolveAsTypeStep): Return a
9809         ConstructedType instead of a TypeExpression if we have type arguments.
9810
9811         * cs-parser.jay (typeof_expression): Support unbound generic types.
9812
9813         * ecore.cs (UnboundTypeExpression): New public class.
9814
9815 2004-08-12  Martin Baulig  <martin@ximian.com>
9816
9817         * typemanager.cs (TypeManager.IsNestedChildOf): Use
9818         TypeManager.IsEqual() rather than `=='.
9819
9820         * decl.cs (DeclSpace.CheckAccessLevel): Use `tb.FullName' for
9821         generic instances as well.
9822
9823 2004-08-12  Martin Baulig  <martin@ximian.com>
9824
9825         * expression.cs (Invocation.InferType): We can only infer method
9826         type parameters.  Fixes #62647.
9827
9828 2004-08-11  Martin Baulig  <martin@ximian.com>
9829
9830         * class.cs (TypeContainer.DefineType): Create the TypeBuilder
9831         before resolving the base classes.
9832
9833 2004-08-06 Gonzalo Paniagua Javier <gonzalo@ximian.com>
9834
9835         * Makefile: install .mdb file too.
9836
9837 2004-08-05  Martin Baulig  <martin@ximian.com>
9838
9839         * ecore.cs (FieldExpr.DoResolveLValue): If we're resolving a field
9840         initializer, the current type is just the TypeBuilder, not the
9841         instantiated generic type.
9842         (FieldExpr.IsFieldInitializer): New public property.
9843
9844 2004-08-04  Martin Baulig  <martin@ximian.com>
9845
9846         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
9847
9848         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
9849
9850 2004-08-03  Martin Baulig  <martin@ximian.com>
9851
9852         * class.cs (MethodData.Define): If we're an explicit
9853         implementation, remove the generic arity from the type name.
9854
9855 2004-08-03  Martin Baulig  <martin@ximian.com>
9856
9857         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
9858         use a user-defined operator; we still need to do numeric
9859         promotions in case one argument is a builtin type and the other
9860         one has an implicit conversion to that type.  Fixes #62322.
9861
9862 2004-08-02  Martin Baulig  <martin@ximian.com>
9863
9864         * class.cs (TypeContainer.ifaces): Make this a `Type[]', not a
9865         `TypeExpr[]' array.
9866         (TypeContainer.GetClassBases): Return the unexpanded list of
9867         interfaces; we expand them later.
9868         (TypeContainer.DefineType): After creating the TypeBuilder, call
9869         TypeManager.ExpandInterfaces() to get an expanded and resolved
9870         list of interfaces.
9871
9872         * ecore.cs (TypeExpr.GetInterfaces): Removed
9873
9874         * generics.cs (Constraints.InterfaceConstraints): Remove.
9875         (TypeParameter.DefineType): Call TypeManager.RegisterBuilder() to
9876         register the interface constraints.
9877
9878         * typemanager.cs
9879         (TypeManager.AddUserType): Removed the `ifaces' argument.
9880         (TypeManager.AddTypeParameter): Likewise.
9881         (TypeManager.AddUserInterface): Removed, was unused.
9882         (TypeManager.RegisterBuilder): Take a `Type[]' instead of a
9883         `TypeExpr[]' array for the interfaces.
9884         (TypeManager.ExpandInterfaces): Call this after the TypeBuilder
9885         has been defined, returns a list of the resolved interfaces types.
9886         (TypeManager.GetInterfaces): Return a `Type[]', not a `TypeExpr[]'.
9887         (TypeManager.GetExplicitInterfaces): Likewise.  
9888
9889 2004-08-02  Martin Baulig  <martin@ximian.com>
9890
9891         * expression.cs (Invocation.EmitCall): If we're invoking a method
9892         on a type parameter, use the new `Constrained' prefix opcode.
9893
9894 2004-08-02  Martin Baulig  <martin@ximian.com>
9895
9896         * statement.cs (LocalInfo.Flags): Added `IsThis'.
9897         (LocalInfo.IsThis): New public property.
9898         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
9899
9900 2004-08-01  Martin Baulig  <martin@ximian.com>
9901
9902         * class.cs (TypeContainer.GetClassBases): Don't set the default
9903         here since we may get called from GetPartialBases().
9904         (TypeContainer.DefineType): If GetClassBases() didn't return a
9905         parent, use the default one.
9906
9907 2004-07-30  Martin Baulig  <martin@ximian.com>
9908
9909         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
9910
9911         * class.cs (SourceMethod): New public class, derive from the
9912         symbol writer's ISourceMethod.
9913         (Method): Use the new symbol writer API.
9914
9915         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
9916         as argument and use the new symbol writer.
9917
9918         * location.cs
9919         (SourceFile): Implement the symbol writer's ISourceFile.
9920         (Location.SymbolDocument): Removed.
9921         (Location.SourceFile): New public property.
9922
9923         * symbolwriter.cs: Use the new symbol writer API.
9924
9925 2004-07-30  Raja R Harinath  <rharinath@novell.com>
9926
9927         * Makefile (install-local): Remove.  Functionality moved to
9928         executable.make.
9929
9930 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
9931
9932         * Makefile: Install mcs.exe.config file together with mcs.exe.
9933         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
9934         correct runtime version.
9935         
9936 2004-07-25  Martin Baulig  <martin@ximian.com>
9937
9938         * class.cs
9939         (TypeContainer.RegisterOrder): Removed, this was unused.
9940         (TypeContainer, interface_order): Removed.
9941         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
9942         TypeContainer as argument since we can also be called with a
9943         `PartialContainer' for a partial class/struct/interface.
9944         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
9945         of checking whether we're an `Interface' - we could be a
9946         `PartialContainer'.
9947         (PartialContainer.Register): Override; call
9948         AddClass()/AddStruct()/AddInterface() on our parent.
9949
9950         * cs-parser.jay (interface_member_declaration): Add things to the
9951         `current_container', not the `current_class'.
9952
9953         * rootcontext.cs (RegisterOrder): The overloaded version which
9954         takes an `Interface' was unused, removed.
9955
9956         * typemanager.cs (TypeManager.LookupInterface): Return a
9957         `TypeContainer', not an `Interface'.
9958         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
9959         contain a `PartialContainer' for an interface, so check it's
9960         `Kind' to figure out what it is.
9961
9962 2004-07-25  Martin Baulig  <martin@ximian.com>
9963
9964         * class.cs (Class.DefaultTypeAttributes): New public constant.
9965         (Struct.DefaultTypeAttributes): Likewise.
9966         (Interface.DefaultTypeAttributes): Likewise.
9967         (PartialContainer.TypeAttr): Override this and add the
9968         DefaultTypeAttributes.
9969
9970 2004-07-25  Martin Baulig  <martin@ximian.com>
9971
9972         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
9973         we can just use the `Parent' field instead.
9974
9975 2004-07-25  Martin Baulig  <martin@ximian.com>
9976
9977         * class.cs (TypeContainer.Emit): Renamed to EmitType().
9978
9979 2004-07-25  Martin Baulig  <martin@ximian.com>
9980
9981         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
9982         our parts before defining any methods.
9983         (TypeContainer.VerifyImplements): Make this virtual.
9984         (ClassPart.VerifyImplements): Override and call VerifyImplements()
9985         on our PartialContainer.
9986
9987 2004-07-25  Martin Baulig  <martin@ximian.com>
9988
9989         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
9990
9991         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
9992         argument, we can just use the `Parent' field instead.
9993
9994         * class.cs
9995         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
9996         (MemberBase.DoDefine): Likewise.
9997
9998 2004-07-24  Martin Baulig  <martin@ximian.com>
9999
10000         * decl.cs (MemberCore.Parent): New public field.
10001         (DeclSpace.Parent): Moved to MemberCore.
10002
10003         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
10004         (MemberBase.ctor): Added TypeContainer argument, pass it to our
10005         parent's .ctor.
10006         (FieldBase, Field, Operator): Likewise.
10007         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
10008         (EventField, Event): Likewise.
10009
10010 2004-07-23  Martin Baulig  <martin@ximian.com>
10011
10012         * class.cs (PartialContainer): New public class.
10013         (ClassPart): New public class.
10014         (TypeContainer): Added support for partial classes.
10015         (TypeContainer.GetClassBases): Splitted some of the functionality
10016         out into GetNormalBases() and GetPartialBases().
10017
10018         * cs-tokenizer.cs (Token.PARTIAL): New token.
10019         (Tokenizer.consume_identifier): Added some hacks to recognize
10020         `partial', but only if it's immediately followed by `class',
10021         `struct' or `interface'.
10022
10023         * cs-parser.jay: Added support for partial clases.
10024
10025 2004-07-23  Martin Baulig  <martin@ximian.com>
10026
10027         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
10028         a `DeclSpace' and also made it readonly.
10029         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
10030         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
10031         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
10032
10033         * cs-parser.jay: Pass the `current_class', not the
10034         `current_container' (at the moment, this is still the same thing)
10035         to a new Method, Property, Event, Indexer or Constructor.
10036
10037 2004-07-23  Martin Baulig  <martin@ximian.com>
10038
10039         * cs-parser.jay (CSharpParser): Added a new `current_class' field
10040         and removed the `current_interface' one.
10041         (struct_declaration, class_declaration, interface_declaration):
10042         Set `current_class' to the newly created class/struct/interface;
10043         set their `Bases' and call Register() before parsing their body.
10044
10045 2004-07-23  Martin Baulig  <martin@ximian.com>
10046
10047         * class.cs (Kind): New public enum.
10048         (TypeContainer): Made this class abstract.
10049         (TypeContainer.Kind): New public readonly field.
10050         (TypeContainer.CheckDef): New public method; moved here from
10051         cs-parser.jay.
10052         (TypeContainer.Register): New public abstract method.
10053         (TypeContainer.GetPendingImplementations): New public abstract
10054         method.
10055         (TypeContainer.GetClassBases): Removed the `is_class' and
10056         `is_iface' parameters.
10057         (TypeContainer.DefineNestedTypes): Formerly known as
10058         DoDefineType().
10059         (ClassOrStruct): Made this class abstract.
10060
10061         * tree.cs (RootTypes): New public type. 
10062
10063 2004-07-20  Martin Baulig  <martin@ximian.com>
10064
10065         * tree.cs (Tree.RecordNamespace): Removed.
10066         (Tree.Namespaces): Removed.
10067
10068         * rootcontext.cs (RootContext.IsNamespace): Removed.
10069
10070         * cs-parser.jay (namespace_declaration): Just create a new
10071         NamespaceEntry here.
10072
10073 2004-07-21  Lluis Sanchez Gual  <lluis@novell.com>
10074
10075         * Makefile: Install gmcs.exe.config file together with gmcs.exe.
10076         * gmcs.exe.config: Renamed from mcs.exe.config. Added supportedRuntime
10077         entry to make sure it runs in the correct runtime version.
10078         
10079 2004-07-18  Martin Baulig  <martin@ximian.com>
10080
10081         * generic.cs (ConstructedType.CheckConstraints): Improved
10082         constraints checking.
10083
10084 2004-07-18  Martin Baulig  <martin@ximian.com>
10085
10086         * expression.cs (Invocation.BetterMethod): Call
10087         TypeManager.TypeToCoreType() on all types and removed my previous
10088         hack; we're already doig the right thing here.
10089
10090 2004-07-17  Martin Baulig  <martin@ximian.com>
10091
10092         * decl.cs (MemberName.MakeName): Create the "class`1" names here.
10093
10094 2004-07-16  Martin Baulig  <martin@ximian.com>
10095
10096         * iterators.cs: Added generics support.
10097
10098 2004-07-16  Martin Baulig  <martin@ximian.com>
10099
10100         * iterators.cs: Rewrote this.  We're now using one single Proxy
10101         class for both the IEnumerable and the IEnumerator interface and
10102         `Iterator' derives from Class so we can use the high-level API.
10103
10104         * class.cs (TypeContainer.AddIterator): New method.
10105         (TypeContainer.DoDefineType): New protected virtual method, which
10106         is called from DefineType().
10107         (TypeContainer.DoDefineMembers): Call DefineType() and
10108         DefineMembers() on all our iterators.
10109         (TypeContainer.Emit): Call Emit() on all our iterators.
10110         (TypeContainer.CloseType): Call CloseType() on all our iterators.
10111
10112         * codegen.cs (EmitContext.CurrentIterator): New public field.
10113
10114 2004-07-15  Martin Baulig  <martin@ximian.com>
10115
10116         * typemanager.cs
10117         (TypeManager.not_supported_exception_type): New type.   
10118
10119 2004-07-14  Martin Baulig  <martin@ximian.com>
10120
10121         * typemanager.cs
10122         (TypeManager.generic_ienumerable_type): New type.
10123         (TypeManager.generic_ienumerator_type): New type.
10124
10125         * rootcontext.cs
10126         (RootContext.interfaces_first_stage): Added
10127         "System.Collections.Generic.IEnumerator`1" and
10128         "System.Collections.Generic.IEnumerable`1".     
10129
10130 2004-07-14  Martin Baulig  <martin@ximian.com>
10131
10132         * iterators.cs: Use real error numbers.
10133
10134 2004-07-14  Martin Baulig  <martin@ximian.com>
10135
10136         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
10137         requires this to be a System.Collection.IEnumerable and not a
10138         class implementing that interface.
10139         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
10140
10141 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
10142
10143         * class.cs: Fixed previous fix, it broke some error tests.
10144
10145 2004-07-12  Martin Baulig  <martin@ximian.com>
10146
10147         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
10148         Fixes #61293.
10149
10150 2004-07-14  Martin Baulig  <martin@ximian.com>
10151
10152         * decl.cs, expression.cs, generic.cs: Use a backqoute (`) and not
10153         an exclamation mark (!) for the generic arity to reflect the
10154         latest spec changes; ie. use "System.Collections.Generic.IList`1".
10155
10156 2004-07-13  Martin Baulig  <martin@ximian.com>
10157
10158         * cs-tokenizer.cs (Tokenizer.parse_less_than): Allow array rank
10159         specifiers being part of a type argument.
10160
10161 2004-07-13  Martin Baulig  <martin@ximian.com>
10162
10163         * expression.cs (MemberAccess.ResolveAsTypeStep): Use the full `!'
10164         name for generic types.
10165
10166 2004-07-13  Martin Baulig  <martin@ximian.com>
10167
10168         * assign.cs (Assign.DoResolve): Moved the CS0131 check up a little
10169         bit to fix #60119.
10170
10171 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
10172
10173         * assign.cs (LocalTemporary): Add new argument: is_address,If
10174         `is_address' is true, then the value that we store is the address
10175         to the real value, and not the value itself.
10176         
10177         * ecore.cs (PropertyExpr): use the new local temporary
10178         stuff to allow us to handle X.Y += z (where X is a struct)
10179
10180 2004-07-08  Martin Baulig  <martin@ximian.com>
10181
10182         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
10183         not always return, just like we're doing in Using.Resolve().
10184
10185 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
10186
10187         * cs-parser.jay (fixed_statement): flag this as Pinned.
10188
10189 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
10190
10191         * typemanager.cs (TypeManager): Removed MakePinned method, this
10192         mechanism is replaced with the .NET 2.x compatible mechanism of
10193         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
10194
10195         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
10196         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
10197         `IsFixed' property which has a different meaning.
10198
10199 2004-07-02  Raja R Harinath  <rharinath@novell.com>
10200
10201         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
10202         visible from inside a nested class, not just the names of the
10203         immediately enclosing class.
10204         Fix for bug #60730.
10205
10206 2004-06-24  Raja R Harinath  <rharinath@novell.com>
10207
10208         * expression.cs (BetterConversion): Remove buggy special-case
10209         handling of "implicit constant expression conversions".  At this
10210         point, we already know that the conversion is possible -- we're
10211         only checking to see which is better.
10212
10213 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10214
10215         * cs-parser.jay: Added error CS0210 test.
10216
10217 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10218
10219         * cs-parser.jay: Added error CS0134 test.
10220
10221 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10222
10223         Fix bug #52507
10224         * cs-parser.jay: Added error CS0145 test.
10225
10226 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
10227
10228         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
10229
10230 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
10231         
10232         * expression.cs (StackAlloc.Resolve): The argument may not
10233         be a constant; deal with this case.
10234         
10235 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
10236
10237         * attribute.cs (IndexerName_GetIndexerName): Renamed to
10238         GetIndexerAttributeValue.
10239         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
10240
10241         * class.cs (Indexer.Define): Added error tests for CS0415,
10242         CS0609.
10243
10244 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
10245
10246         * attribute.cs (Attribute.Resolve): Keep field code in sync with
10247         property code.
10248
10249 2004-06-23  Martin Baulig  <martin@ximian.com>
10250
10251         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
10252         neither return nor throw, reset the barrier as well.  Fixes #60457.
10253
10254 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
10255
10256         * class.cs : EventAttributes is now set to None by default.
10257           This fixes bug #60459.
10258
10259 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10260
10261         Fix bug #60219
10262         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10263         Don't throw exception but return null (it's sufficient now).
10264
10265 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
10266
10267         * typemanager.cs (GetArgumentTypes): Faster implementation.
10268
10269 2004-06-18  Martin Baulig  <martin@ximian.com>
10270
10271         * attribute.cs (Attribute.Resolve): Check whether we're an
10272         EmptyCast which a Constant child.  Fixes #60333.
10273
10274 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
10275
10276         * statement.cs (EmitCollectionForeach): Account for the fact that
10277         not all valuetypes are in areas which we can take the address of.
10278         For these variables, we store to a temporary variable. Also, make
10279         sure that we dont emit a `callvirt' on a valuetype method.
10280
10281 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10282
10283         * expression.cs (StackAlloc.DoReSolve): Added test for
10284         negative parameter (CS0247).
10285
10286 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10287
10288         Fix bug #59792
10289         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
10290
10291 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
10292
10293         Fix bug #59781
10294         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
10295         ulong.
10296
10297 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10298
10299         Fix bug #58254 & cs1555.cs, cs1556.cs
10300         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
10301
10302 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
10303
10304         * cs-parser.jay: Added error CS1669 test for indexers.
10305
10306 2004-06-18  Martin Baulig  <martin@ximian.com>
10307
10308         * generics.cs (GenericMethod.ctor): Don't take an Attributes
10309         argument.  Fixes #60441.
10310
10311 2004-06-16  Ben Maurer  <bmaurer@ximian.com>
10312         * ecore.cs (MethodGroupExpr.Name): Revert Martin's patch.
10313         The name needs to have the actual name of the method in order
10314         for other tests (such as the one in OverloadResolve for Invoke
10315         on a delegate) to work. As well, it does not really help
10316         error reporting because the method group had multiple methods.
10317         * Makefile: Remove MCS_DEBUG, you can enable with the DEBUG_FLAGS.
10318         Make profiling work.
10319         
10320 2004-06-13  Martin Baulig  <martin@ximian.com>
10321
10322         * cs-parser.jay: Don't allow generic attributes.
10323
10324 2004-06-13  Martin Baulig  <martin@ximian.com>
10325
10326         * class.cs (MemberBase.DoDefineBase): New protected method.
10327         (MemberBase.DoDefine): Compute the `flags' in the new
10328         DoDefineBase() which must be called first.
10329         (Method.Define): Call DoDefineBase() first so we have the flags
10330         when defining the generic method.
10331
10332         * cs-parser.jay (interface_method_declaration): Support generic methods.
10333
10334 2004-06-13  Martin Baulig  <martin@ximian.com>
10335
10336         * decl.cs (TypeName): Removed.
10337         (MemberName): Removed TypeName and MemberNow; now we just have
10338         MemberName.
10339
10340         * cs-parser.jay: Don't distinguish between type arguments and type
10341         parameters in the grammar and simplified the rules a bit.  The
10342         reduce/reduce conflicts are now gone (except the one we inherited
10343         from mcs).
10344
10345 2004-06-11  Martin Baulig  <martin@ximian.com>
10346
10347         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
10348         call this twice: for params and varargs methods.
10349
10350 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10351
10352         * class.cs:
10353         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
10354
10355 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
10356
10357         * attribute.cs (Attribute.GetValidTargets): Made public.
10358
10359         * class.cs: 
10360         (AbstractPropertyEventMethod): New class for better code sharing.
10361         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
10362         CS1667 report.
10363         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
10364
10365 2004-06-09  Martin Baulig  <martin@ximian.com>
10366
10367         * cs-parser.jay: Removed a reduce/reduce conflict.
10368
10369 2004-06-03  Martin Baulig  <martin@ximian.com>
10370
10371         * generic.cs (ConstructedType.GetMemberAccess): Renamed to
10372         GetSimpleName() and return a SimpleName.
10373
10374         * ecore.cs (SimpleName.Arguments): New public field.
10375         (SimpleName): Added overloaded ctor which takes an additional
10376         TypeArguments argument.
10377         (SimpleName.SimpleNameResolve): Added support for generic methods.
10378         (MethodGroupExpr.ResolveGeneric): New public method.  The code was
10379         formerly in MemberAccess.DoResolve(), but we also need it in
10380         SimpleNameResolve().
10381
10382         * expression.cs (MemberAccess.DoResolve): Use the new
10383         MethodGroupExpr.ResolveGeneric().       
10384
10385 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10386
10387         * decl.cs: If possible, use lookuptypedirect here. We can only do
10388         this if there is no `.' after the namespace. Avoids using
10389         LookupType, which does lots of slow processing.
10390         (FindNestedType) New method, does what it says :-).
10391         * namespace.cs: use LookupTypeDirect.
10392         * rootcontext.cs: use membercache, if possible.
10393         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10394
10395 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10396
10397         * expression.cs:
10398         According to the spec, 
10399
10400         In a member access of the form E.I, if E is a single identifier,
10401         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10402         field, property, localvariable, or parameter with the same type as
10403         the meaning of E as a type-name (§3.8), then both possible
10404         meanings of E are permitted.
10405
10406         We did not check that E as a simple-name had the same type as E as
10407         a type name.
10408
10409         This trivial check gives us 5-7% on bootstrap time.
10410
10411 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10412
10413         * expression.cs (Invocation.OverloadResolve): Avoid the
10414         use of hashtables and boxing here by allocating on demand.
10415
10416 2004-05-30  Martin Baulig  <martin@ximian.com>
10417
10418         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10419         we're doing a silent lookup.  Don't try to lookup nested types in
10420         TypeManager.object_type (thanks to Ben Maurer).
10421
10422 2004-05-30  Martin Baulig  <martin@ximian.com>
10423
10424         Committing a patch from Ben Maurer.
10425
10426         * rootcontext.cs (RootContext.LookupType): Cache negative results.
10427
10428 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10429
10430         * convert.cs: add a trivial cache for overload operator resolution.
10431
10432 2004-05-31  Marek Safar  <marek.safar@seznam.cz>
10433
10434         * attribute.cs
10435         (AttributeTester.GetObsoleteAttribute): Returns instance of
10436         ObsoleteAttribute when type is obsolete.
10437
10438         * class.cs
10439         (TypeContainer.VerifyObsoleteAttribute): Override.
10440         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
10441         (MethodCode.VerifyObsoleteAttribute): Override.
10442         (MemberBase.VerifyObsoleteAttribute): Override.
10443
10444         * decl.cs
10445         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
10446         and report proper error.
10447
10448         *delegate.cs
10449         (Delegate.VerifyObsoleteAttribute): Override.
10450
10451         * ecore.cs
10452         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
10453         and report proper error.
10454         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
10455
10456         * enum.cs
10457         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
10458         and enum member.
10459
10460         * expression.cs
10461         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
10462         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
10463         Added test for ObsoleteAttribute.
10464
10465         * statement.cs
10466         (Catch): Derived from Statement.
10467
10468 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10469
10470         * decl.cs: If possible, use lookuptypedirect here. We can only do
10471         this if there is no `.' after the namespace. Avoids using
10472         LookupType, which does lots of slow processing.
10473         (FindNestedType) New method, does what it says :-).
10474         * namespace.cs: use LookupTypeDirect.
10475         * rootcontext.cs: use membercache, if possible.
10476         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
10477
10478 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10479
10480         * expression.cs:
10481         According to the spec, 
10482
10483         In a member access of the form E.I, if E is a single identifier,
10484         and if the meaning of E as a simple-name (§7.5.2) is a constant,
10485         field, property, localvariable, or parameter with the same type as
10486         the meaning of E as a type-name (§3.8), then both possible
10487         meanings of E are permitted.
10488
10489         We did not check that E as a simple-name had the same type as E as
10490         a type name.
10491
10492         This trivial check gives us 5-7% on bootstrap time.
10493
10494 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10495
10496         Fixed bug #59071 & cs0160.cs
10497         * statement.cs (Try.Resolve): Check here whether order of catch
10498         clauses matches their dependencies.
10499
10500 2004-05-30  Marek Safar  <marek.safar@seznam.cz>
10501
10502         Fixed bug #58624
10503         * ecore.cs (SimpleName.SimpleNameResolve): Added test for
10504         unsafe type.
10505
10506 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
10507
10508         * expression.cs (Invocation.OverloadResolve): Avoid the
10509         use of hashtables and boxing here by allocating on demand.
10510
10511 2004-05-30  Martin Baulig  <martin@ximian.com>
10512
10513         * rootcontext.cs (RootContext.LookupType): Don't cache things if
10514         we're doing a silent lookup.  Don't try to lookup nested types in
10515         TypeManager.object_type (thanks to Ben Maurer).
10516
10517 2004-05-30  Martin Baulig  <martin@ximian.com>
10518
10519         Committing a patch from Ben Maurer.
10520
10521         * rootcontext.cs (RootContext.LookupType): Cache negative results.      
10522
10523 2004-05-29  Martin Baulig  <martin@ximian.com>
10524
10525         * class.cs (IMethodData.ShouldIgnore): New method.
10526
10527         * typemanager.cs (TypeManager.MethodFlags): Don't take a
10528         `Location' argument, we don't need it anywhere.  Use
10529         `IMethodData.ShouldIgnore ()' instead of
10530         `MethodData.GetMethodFlags ()'.
10531         (TypeManager.AddMethod): Removed.
10532         (TypeManager.AddMethod2): Renamed to AddMethod.
10533
10534 2004-05-29  Martin Baulig  <martin@ximian.com>
10535
10536         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
10537
10538         * convert.cs (Convert.ImplicitReferenceConversion): If we're
10539         converting from a class type S to an interface type and we already
10540         have an object on the stack, don't box it again.  Fixes #52578.
10541
10542 2004-05-29  Martin Baulig  <martin@ximian.com>
10543
10544         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
10545         Added support for `params' parameters.  Fixes #59267.
10546
10547 2004-05-29  Martin Baulig  <martin@ximian.com>
10548
10549         * literal.cs (NullPointer): Provide a private .ctor which sets
10550         `type' to TypeManager.object_type.  Fixes #59048.
10551
10552 2004-05-29  Martin Baulig  <martin@ximian.com>
10553
10554         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
10555         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
10556
10557         * ecore.cs (EventExpr.instance_expr): Make the field private.
10558
10559 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
10560
10561         Fixed bug #50080 & cs0214-2.cs
10562         * expression.cs (Cast.DoResolve): Check unsafe context here.
10563         
10564         * statement.cs (Resolve.DoResolve): Likewise.
10565
10566 2004-05-26  Martin Baulig  <martin@ximian.com>
10567
10568         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
10569
10570         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
10571         (RootContext.LookupType): Pass down the `silent' flag.
10572
10573 2004-05-25  Martin Baulig  <martin@ximian.com>
10574
10575         * expression.cs
10576         (MethodGroupExpr.IdenticalTypeName): New public property.
10577         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
10578         expression actually refers to a type.
10579
10580 2004-05-25  Martin Baulig  <martin@ximian.com>
10581
10582         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
10583         for #56176 and made it actually work.
10584
10585 2004-05-25  Martin Baulig  <martin@ximian.com>
10586
10587         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
10588         (FieldExpr, PropertyExpr): Override and implement
10589         CacheTemporaries.  Fixes #52279.
10590
10591 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
10592
10593         * location.cs: In the new compiler listing a file twice is a
10594         warning, not an error.
10595
10596 2004-05-24  Martin Baulig  <martin@ximian.com>
10597
10598         * enum.cs (Enum.DefineType): For the `BaseType' to be a
10599         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
10600
10601 2004-05-24  Martin Baulig  <martin@ximian.com>
10602
10603         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
10604         walking the `using' list.  Fixes #53921.
10605
10606 2004-05-24  Martin Baulig  <martin@ximian.com>
10607
10608         * const.cs (Const.LookupConstantValue): Added support for
10609         EmptyCast's; fixes #55251.
10610
10611 2004-05-24  Martin Baulig  <martin@ximian.com>
10612
10613         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
10614         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
10615         which does the CS0135 check.  The reason is that we first need to
10616         check whether the variable actually exists.
10617
10618 2004-05-24  Martin Baulig  <martin@ximian.com>
10619
10620         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
10621         than RootContext.LookupType() to find the explicit interface
10622         type.  Fixes #58584.
10623
10624 2004-05-24  Raja R Harinath  <rharinath@novell.com>
10625
10626         * Makefile: Simplify.  Use executable.make.
10627         * mcs.exe.sources: New file.  List of sources of mcs.exe.
10628
10629 2004-05-24  Anders Carlsson  <andersca@gnome.org>
10630
10631         * decl.cs:
10632         * enum.cs:
10633         Use the invariant culture when doing String.Compare for CLS case
10634         sensitivity.
10635         
10636 2004-05-23  Martin Baulig  <martin@ximian.com>
10637
10638         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
10639         don't have any dots.  Fixes #52622, added cs0246-8.cs.
10640
10641         * namespace.cs (NamespaceEntry.Lookup): Likewise.
10642
10643 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10644
10645         * class.cs (MemberBase.Define): Reuse MemberType member for 
10646         resolved type. Other methods can use it too.
10647
10648 2004-05-23  Martin Baulig  <martin@ximian.com>
10649
10650         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
10651         the variable also exists in the current block (otherwise, we need
10652         to report a CS0103).  Fixes #58670.
10653
10654 2004-05-23  Martin Baulig  <martin@ximian.com>
10655
10656         * flowanalysis.cs (Reachability.Reachable): Compute this
10657         on-the-fly rather than storing it as a field.
10658
10659 2004-05-23  Martin Baulig  <martin@ximian.com>
10660
10661         * flowanalysis.cs (Reachability.And): Manually compute the
10662         resulting `barrier' from the reachability.      
10663        
10664 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
10665
10666         Fix bug #57835
10667         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
10668         instance of ObsoleteAttribute when symbol is obsolete.
10669
10670         * class.cs
10671         (IMethodData): Extended interface for ObsoleteAttribute support.
10672
10673 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10674
10675         * attribute.cs: Fix bug #55970
10676
10677 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
10678
10679         Fix bug #52705
10680         * attribute.cs
10681         (GetObsoleteAttribute): New method. Creates the instance of
10682         ObsoleteAttribute.
10683         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
10684         ObsoleteAttribute when member is obsolete.
10685         (AttributeTester.Report_ObsoleteMessage): Common method for
10686         Obsolete error/warning reporting.
10687
10688         * class.cs
10689         (TypeContainer.base_classs_type): New member for storing parent type.
10690
10691         * decl.cs
10692         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
10693         for this MemberCore.
10694
10695 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10696
10697         * attribute.cs, const.cs: Fix bug #58590
10698
10699 2004-05-21  Martin Baulig  <martin@ximian.com>
10700
10701         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
10702         out parameters if the end of the method is unreachable.  Fixes
10703         #58098. 
10704
10705 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10706
10707         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
10708         Hari was right, why extra method.
10709
10710 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
10711
10712         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
10713
10714 2004-05-20  Martin Baulig  <martin@ximian.com>
10715
10716         * delegate.cs: Convert this file to Unix mode - like the original
10717         version in mcs is.
10718
10719 2004-05-20  Martin Baulig  <martin@ximian.com>
10720
10721         * attribute.cs: Convert this file to Unix mode - like the original
10722         version in mcs is.
10723
10724 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
10725
10726        Fix bug #58688 (MCS does not report error when the same attribute
10727        is assigned twice)
10728
10729        * attribute.cs (Attribute.Emit): Distinction between null and default.
10730
10731 2004-05-19  Raja R Harinath  <rharinath@novell.com>
10732
10733        * cs-parser.jay (attribute): Create a GlobalAttribute for the case
10734        of a top-level attribute without an attribute target.
10735        * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
10736        Make non-static.
10737        (Attribute.Conditional_GetConditionName), 
10738        (Attribute.Obsolete_GetObsoleteMessage): Update.
10739        (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
10740        part of ScanForIndexerName.
10741        (Attribute.CanIgnoreInvalidAttribute): New function.
10742        (Attribute.ScanForIndexerName): Move to ...
10743        (Attributes.ScanForIndexerName): ... here.
10744        (Attributes.Attrs): Rename from now-misnamed AttributeSections.
10745        (Attributes.Search): New internal variant that can choose not to
10746        complain if types aren't resolved.  The original signature now
10747        complains.
10748        (Attributes.GetClsCompliantAttribute): Use internal variant, with
10749        complaints suppressed.
10750        (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
10751        only if it not useful.
10752        (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
10753        top-level for attributes that are shared between the assembly
10754        and a top-level class.
10755        * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
10756        * class.cs: Update to reflect changes.
10757        (DefineIndexers): Fuse loops.
10758        * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
10759        a couple more variants of attribute names.
10760
10761 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
10762
10763         Fix bug #52585 (Implemented explicit attribute declaration)
10764
10765         * attribute.cs:
10766         (Attributable.ValidAttributeTargets): New abstract method. It gets
10767         list of valid attribute targets for explicit target declaration.
10768         (Attribute.Target): It holds target itself.
10769         (AttributeSection): Removed.
10770         (Attribute.CheckTargets): New method. It checks whether attribute
10771         target is valid for the current element.
10772
10773         * class.cs:
10774         (EventProperty): New class. For events that are declared like
10775         property (with add and remove accessors).
10776         (EventField): New class. For events that are declared like field.
10777         class.cs
10778
10779         * cs-parser.jay: Implemented explicit attribute target declaration.
10780
10781         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
10782         Override ValidAttributeTargets.
10783
10784         * parameter.cs:
10785         (ReturnParameter): Class for applying custom attributes on 
10786         the return type.
10787         (ParameterAtribute): New class. Class for applying custom
10788         attributes on the parameter type.
10789
10790 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
10791
10792         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
10793         definitions. 
10794
10795         (Method): Allow UNSAFE here.
10796
10797         * modifiers.cs: Support unsafe reporting.
10798
10799 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
10800
10801         * decl.cs: Fix bug #58478.
10802
10803 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10804
10805         * statement.cs: When checking for unreachable code on an EmptyStatement,
10806         set the location. Fixes bug #58488.
10807
10808 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
10809
10810         * driver.cs: Add -pkg handling.
10811
10812         From Gonzalo: UseShelLExecute=false
10813
10814 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
10815
10816         * attribute.cs:
10817         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
10818         for attribute.
10819         (Attribute.IsClsCompliaceRequired): Moved to base for better
10820         accesibility.
10821         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
10822         when attribute is AttributeUsageAttribute.
10823         (Attribute.GetValidTargets): Simplified.
10824         (Attribute.GetAttributeUsage): New method returns AttributeUsage
10825         attribute for this type.
10826         (Attribute.ApplyAttributes): Method renamed to Emit and make
10827         non-static.
10828         (GlobalAttributeSection): New class for special handling of global
10829         attributes (assembly, module).
10830         (AttributeSection.Emit): New method.
10831
10832         * class.cs: Implemented Attributable abstract methods.
10833         (MethodCore.LabelParameters): Moved to Parameter class.
10834         (Accessor): Is back simple class.
10835         (PropertyMethod): Implemented Attributable abstract class.
10836         (DelegateMethod): Implemented Attributable abstract class.
10837         (Event): New constructor for disctintion between normal Event
10838         and Event with accessors.
10839
10840         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
10841
10842         * codegen.cs, const.cs, decl.cs, delegate.cs:
10843         (CommonAssemblyModulClass): Implemented Attributable abstract class
10844         and simplified.
10845
10846         * enum.cs: Implement IAttributeSupport interface.
10847         (EnumMember): New class for emum members. Implemented Attributable
10848         abstract class
10849
10850         * parameter.cs:
10851         (ParameterBase): Is abstract.
10852         (ReturnParameter): New class for easier [return:] attribute handling.
10853
10854         * typemanager.cs: Removed builder_to_attr.
10855
10856 2004-05-11  Raja R Harinath  <rharinath@novell.com>
10857
10858         Fix bug #57151.
10859         * attribute.cs (Attribute.GetPositionalValue): New function.
10860         * class.cs (TypeContainer.VerifyMembers): New function.
10861         (TypeContainer.Emit): Use it.
10862         (ClassOrStruct): New base class for Class and Struct.
10863         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
10864         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
10865         class.
10866         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
10867         then each non-static field should have a FieldOffset attribute.
10868         Otherwise, none of the fields should have a FieldOffset attribute.
10869         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
10870         and FieldOffset attributes.
10871         * typemanager.cs (TypeManager.struct_layout_attribute_type)
10872         (TypeManager.field_offset_attribute_type): New core types.
10873         (TypeManager.InitCoreTypes): Initialize them.
10874
10875 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
10876
10877         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
10878         Return correct type.
10879         From bug #58270.
10880
10881 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
10882
10883         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
10884         be implicitly converted to ulong.
10885         
10886         * expression.cs: The logic for allowing operator &, | and ^ worked
10887         was wrong, it worked before because we did not report an error in
10888         an else branch.  Fixes 57895.
10889
10890         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
10891         allow volatile fields to be reference types.
10892
10893 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
10894
10895         * driver.cs: Add support for /debug-
10896
10897 2004-05-07  Raja R Harinath  <rharinath@novell.com>
10898
10899         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
10900         Add a 'complain' parameter to silence errors.
10901         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
10902         silently overlooked type-resolutions.
10903         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
10904         to reflect changes.
10905         (Attributes.Search): New function.
10906         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
10907         (Attributes.GetAttributeFullName): Remove hack.
10908         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
10909         Update to reflect changes.
10910         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
10911         Use Attributes.Search instead of nested loops.
10912
10913 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
10914
10915         * decl.cs:
10916         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
10917         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
10918         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
10919
10920         * report.cs: (Report.Warning): Renamed to Warning_T because of
10921         parameter collision.
10922
10923 2004-05-05  Raja R Harinath  <rharinath@novell.com>
10924
10925         * expression.cs (MemberAccess.ResolveMemberAccess):
10926         Exit with non-zero status after Report.Error.
10927         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
10928         Likewise.
10929         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
10930
10931 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
10932
10933         * support.cs: Don't hang when the file is empty.
10934
10935 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
10936
10937         * support.cs: In SeekableStreamReader, compute the preamble size of the
10938           underlying stream. Position changes should take into account that initial
10939           count of bytes.
10940
10941 2004-05-03  Todd Berman  <tberman@sevenl.net>
10942
10943         * driver.cs: remove unused GetSysVersion function.
10944
10945 2004-05-03  Todd Berman  <tberman@sevenl.net>
10946
10947         * driver.cs: Remove the hack from saturday, as well as the hack
10948         from jackson (LoadAssemblyFromGac), also adds the CWD to the
10949         link_paths to get that bit proper.
10950
10951 2004-05-01  Todd Berman  <tberman@sevenl.net>
10952
10953         * driver.cs: Try a LoadFrom before a Load, this checks the current
10954         path. This is currently a bug in mono that is be fixed, however, this
10955         provides a workaround for now. This will be removed when the bug
10956         is fixed.
10957
10958 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
10959
10960         * CryptoConvert.cs: Updated to latest version. Fix issue with 
10961         incomplete key pairs (#57941).
10962
10963 2004-05-01  Todd Berman  <tberman@sevenl.net>
10964
10965         * driver.cs: Remove '.' from path_chars, now System.* loads properly
10966         from the GAC
10967
10968 2004-04-30  Jackson Harper  <jackson@ximian.com>
10969
10970         * codegen.cs: Open keys readonly.
10971         
10972 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10973
10974         * typemanager.cs: don't report cyclic struct layout when a struct
10975         contains 2 or more fields of the same type. Failed for Pango.AttrShape
10976         which has 2 Pango.Rectangle fields.
10977
10978 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
10979
10980         * expression.cs: Handle IntPtr comparisons with IL code
10981         rather than a method call.
10982
10983 2004-04-29  Martin Baulig  <martin@ximian.com>
10984
10985         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
10986         the list of PropertyInfo's in class hierarchy and find the
10987         accessor.  Fixes #56013.
10988
10989 2004-04-29  Martin Baulig  <martin@ximian.com>
10990
10991         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
10992
10993 2004-04-29  Martin Baulig  <martin@ximian.com>
10994
10995         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
10996
10997         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
10998
10999 2004-04-29  Martin Baulig  <martin@ximian.com>
11000
11001         * class.cs (ConstructorInitializer.Resolve): Check whether the
11002         parent .ctor is accessible.  Fixes #52146.
11003
11004 2004-04-29  Martin Baulig  <martin@ximian.com>
11005
11006         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
11007
11008         * statement.cs (Using.EmitLocalVariableDecls): Use
11009         TypeManager.idisposable_type, not typeof (IDisposable).
11010         (Foreach.EmitCollectionForeach): Added support for valuetypes.
11011
11012 2004-04-29  Martin Baulig  <martin@ximian.com>
11013
11014         * class.cs (Event.Define): Don't emit the field and don't set
11015         RTSpecialName and SpecialName for events on interfaces.  Fixes
11016         #57703. 
11017
11018 2004-04-29  Raja R Harinath  <rharinath@novell.com>
11019
11020         Refactor Attribute.ApplyAttributes.
11021         * attribute.cs (Attributable): New base class for objects that can
11022         have Attributes applied on them.
11023         (Attribute): Make AttributeUsage fields public.
11024         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
11025         (Attribute.IsInternalCall): New property.
11026         (Attribute.UsageAttr): Convert to a public read-only property.
11027         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
11028         (Attribute.ResolveType, Attribute.Resolve)
11029         (Attribute.ScanForIndexerName): Update to reflect changes.
11030         (Attribute.CheckAttributeTarget): Re-format.
11031         (Attribute.ApplyAttributes): Refactor, to various
11032         Attributable.ApplyAttributeBuilder methods.
11033         * decl.cs (MemberCore): Make Attributable.
11034         * class.cs (Accessor): Make Attributable.
11035         (MethodData.ApplyAttributes): Use proper attribute types, not
11036         attribute names.
11037         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
11038         (TypeContainer.ApplyAttributeBuilder)
11039         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
11040         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
11041         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
11042         (Operator.ApplyAttributeBuilder): New factored-out methods.
11043         * const.cs (Const.ApplyAttributeBuilder): Likewise.
11044         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
11045         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
11046         * parameter.cs (ParameterBase): New Attributable base class
11047         that can also represent Return types.
11048         (Parameter): Update to the changes.
11049
11050 2004-04-29  Jackson Harper  <jackson@ximian.com>
11051
11052         * driver.cs: Prefer the corlib system version when looking for
11053         assemblies in the GAC. This is still a hack, but its a better hack
11054         now.
11055         
11056 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
11057
11058         * decl.cs, enum.cs: Improved error 3005 reporting.
11059   
11060         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
11061         (related_symbols): New private member for list of symbols
11062         related to reported error/warning.
11063         
11064         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
11065
11066 2004-04-29  Martin Baulig  <martin@ximian.com>
11067
11068         * ecore.cs (Expression.Constantify): If we're an enum and
11069         TypeManager.TypeToCoreType() doesn't give us another type, use
11070         t.UnderlyingSystemType.  Fixes #56178.  
11071
11072 2004-04-29  Martin Baulig  <martin@ximian.com>
11073
11074         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
11075         interfaces and for each interface, only add members directly
11076         declared in that interface.  Fixes #53255.
11077
11078 2004-04-28  Martin Baulig  <martin@ximian.com>
11079
11080         * expression.cs (ConditionalLogicalOperator): Use a temporary
11081         variable for `left' to avoid that we evaluate it more than once;
11082         bug #52588.
11083
11084 2004-04-28  Martin Baulig  <martin@ximian.com>
11085
11086         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
11087         `void[]' (CS1547).
11088
11089 2004-04-28  Martin Baulig  <martin@ximian.com>
11090
11091         * statement.cs (LocalInfo.Resolve): Check whether the type is not
11092         void (CS1547).
11093
11094         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
11095         whether the type is not void (CS1547).
11096
11097 2004-04-28  Martin Baulig  <martin@ximian.com>
11098
11099         * expression.cs (Unary.DoResolveLValue): Override this and report
11100         CS0131 for anything but Operator.Indirection.
11101
11102 2004-04-28  Martin Baulig  <martin@ximian.com>
11103
11104         Committing a patch from Ben Maurer; see bug #50820.
11105
11106         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11107         check for classes.
11108
11109         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11110         classes.        
11111
11112 2004-04-28  Martin Baulig  <martin@ximian.com>
11113
11114         Committing a patch from Ben Maurer; see bug #50820.
11115
11116         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
11117         check for classes.
11118
11119         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
11120         classes.        
11121
11122 2004-04-28  Martin Baulig  <martin@ximian.com>
11123
11124         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
11125         (Block.AddLabel): Call DoLookupLabel() to only search in the
11126         current block.
11127
11128 2004-04-28  Martin Baulig  <martin@ximian.com>
11129
11130         * cfold.cs (ConstantFold.BinaryFold): Added special support for
11131         comparing StringConstants and NullLiterals in Equality and Inequality.
11132
11133 2004-04-28  Jackson Harper  <jackson@ximian.com>
11134
11135         * driver.cs: Attempt to load referenced assemblies from the
11136         GAC. This is the quick and dirty version of this method that
11137         doesnt take into account versions and just takes the first
11138         canidate found. Will be good enough for now as we will not have more
11139         then one version installed into the GAC until I update this method.
11140
11141 2004-04-28  Martin Baulig  <martin@ximian.com>
11142
11143         * typemanager.cs (TypeManager.CheckStructCycles): New public
11144         static method to check for cycles in the struct layout.
11145
11146         * rootcontext.cs (RootContext.PopulateTypes): Call
11147         TypeManager.CheckStructCycles() for each TypeContainer.
11148         [Note: We only need to visit each type once.]
11149
11150 2004-04-28  Martin Baulig  <martin@ximian.com>
11151
11152         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
11153
11154         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
11155         success and added `out object value'.  Use a `bool resolved' field
11156         to check whether we've already been called rather than
11157         `ConstantValue != null' since this breaks for NullLiterals.
11158
11159 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11160
11161         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
11162         setting of this flag, since the 'set' method may be non-public.
11163
11164 2004-04-28  Raja R Harinath  <rharinath@novell.com>
11165
11166         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
11167         check on current_vector.Block.
11168
11169 2004-04-27  Martin Baulig  <martin@ximian.com>
11170
11171         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
11172         a field initializer.  Fixes #56459.
11173
11174 2004-04-27  Martin Baulig  <martin@ximian.com>
11175
11176         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
11177         we're not attempting to use an indexer.  Fixes #52154.
11178
11179 2004-04-27  Martin Baulig  <martin@ximian.com>
11180
11181         * statement.cs (Return): Don't create a return label if we don't
11182         need it; reverts my change from January 20th.  Thanks to Ben
11183         Maurer for this.
11184
11185 2004-04-27  Martin Baulig  <martin@ximian.com>
11186
11187         According to the spec, `goto' can only leave a nested scope, but
11188         never enter it.
11189
11190         * statement.cs (Block.LookupLabel): Only lookup in the current
11191         block, don't recurse into parent or child blocks.
11192         (Block.AddLabel): Check in parent and child blocks, report
11193         CS0140/CS0158 if we find a duplicate.
11194         (Block): Removed this indexer for label lookups.
11195         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
11196         this already does the error reporting for us.
11197
11198         * flowanalysis.cs
11199         (FlowBranching.UsageVector.Block): New public variable; may be null.
11200         (FlowBranching.CreateSibling): Added `Block' argument.
11201         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
11202         label for the target of a `goto' and check whether we're not
11203         leaving a `finally'.
11204
11205 2004-04-27  Martin Baulig  <martin@ximian.com>
11206
11207         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
11208         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
11209         just for returns).
11210
11211 2004-04-27  Martin Baulig  <martin@ximian.com>
11212
11213         * statement.cs (Block.AddLabel): Also check for implicit blocks
11214         and added a CS0158 check.
11215
11216 2004-04-27  Martin Baulig  <martin@ximian.com>
11217
11218         * flowanalysis.cs (FlowBranchingLoop): New class.
11219         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
11220         UsageVector's instead of an ArrayList.
11221         (FlowBranching.Label): Likewise.
11222         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
11223         (FlowBranching.AddBreakVector): New method.
11224
11225 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
11226
11227         * attribute.cs: Small regression fix: only convert the type if we
11228         the type is different, fixes System.Drawing build.
11229
11230 2004-04-27  Martin Baulig  <martin@ximian.com>
11231
11232         * attribute.cs (Attribute.Resolve): If we have a constant value
11233         for a named field or property, implicity convert it to the correct
11234         type.
11235
11236 2004-04-27  Raja R Harinath  <rharinath@novell.com>
11237
11238         * statement.cs (Block.Block): Implicit blocks share
11239         'child_variable_names' fields with parent blocks.
11240         (Block.AddChildVariableNames): Remove.
11241         (Block.AddVariable): Mark variable as "used by a child block" in
11242         every surrounding block.
11243         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
11244         been used in a child block, complain about violation of "Invariant
11245         meaning in blocks" rule.
11246         * cs-parser.jay (declare_local_variables): Don't use
11247         AddChildVariableNames.
11248         (foreach_statement): Don't create an implicit block: 'foreach'
11249         introduces a scope.
11250
11251 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
11252
11253         * convert.cs (ImplicitNumericConversion): 0 is also positive when
11254         converting from 0L to ulong.  Fixes 57522.
11255
11256 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11257
11258         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
11259         derived class hides via 'new' keyword field from base class (test-242.cs).
11260         TODO: Handle this in the more general way.
11261         
11262         * class.cs (CheckBase): Ditto.
11263
11264 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
11265
11266         * decl.cs (caching_flags): New member for storing cached values
11267         as bit flags.
11268         (MemberCore.Flags): New enum where bit flags for caching_flags
11269         are defined.
11270         (MemberCore.cls_compliance): Moved to caching_flags.
11271         (DeclSpace.Created): Moved to caching_flags.
11272
11273         * class.cs: Use caching_flags instead of DeclSpace.Created
11274         
11275 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
11276
11277         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
11278         if we are only a derived class, not a nested class.
11279
11280         * typemanager.cs: Same as above, but do this at the MemberLookup
11281         level (used by field and methods, properties are handled in
11282         PropertyExpr).   Allow for the qualified access if we are a nested
11283         method. 
11284
11285 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
11286
11287         * class.cs: Refactoring.
11288         (IMethodData): New inteface; Holds links to parent members
11289         to avoid member duplication (reduced memory allocation).
11290         (Method): Implemented IMethodData interface.
11291         (PropertyBase): New inner classes for get/set methods.
11292         (PropertyBase.PropertyMethod): Implemented IMethodData interface
11293         (Event): New inner classes for add/remove methods.
11294         (Event.DelegateMethod): Implemented IMethodData interface.
11295
11296         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
11297         EmitContext (related to class.cs refactoring).
11298
11299 2004-04-21  Raja R Harinath  <rharinath@novell.com>
11300
11301         * delegate.cs (Delegate.VerifyApplicability): If the number of
11302         arguments are the same as the number of parameters, first try to
11303         verify applicability ignoring  any 'params' modifier on the last
11304         parameter.
11305         Fixes #56442.
11306
11307 2004-04-08  Martin Baulig  <martin@ximian.com>
11308
11309         Merged latest changes into gmcs.  Please keep this comment in
11310         here, it makes it easier for me to see what changed in MCS since
11311         the last time I merged.
11312
11313 2004-04-16  Raja R Harinath  <rharinath@novell.com>
11314
11315         * class.cs (TypeContainer.AddIndexer): Use
11316         'ExplicitInterfaceName' to determine if interface name was
11317         explicitly specified.  'InterfaceType' is not initialized at this time.
11318         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
11319         Indexers array is already in the required order.  Initialize
11320         'IndexerName' only if there are normal indexers.
11321         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
11322         (TypeContainer.Emit): Emit DefaultMember attribute only if
11323         IndexerName is initialized.
11324         Fixes #56300.
11325
11326 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
11327
11328         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
11329         Fixes #57007
11330
11331 2004-04-15  Raja R Harinath  <rharinath@novell.com>
11332
11333         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
11334         attributes.
11335         Fix for #56456.
11336
11337         * attribute.cs (Attribute.Resolve): Check for duplicate named
11338         attributes.
11339         Fix for #56463.
11340
11341 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
11342
11343         * iterators.cs (MarkYield): track whether we are in an exception,
11344         and generate code accordingly.  Use a temporary value to store the
11345         result for our state.
11346
11347         I had ignored a bit the interaction of try/catch with iterators
11348         since their behavior was not entirely obvious, but now it is
11349         possible to verify that our behavior is the same as MS .NET 2.0
11350
11351         Fixes 54814
11352
11353 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
11354
11355         * iterators.cs: Avoid creating temporaries if there is no work to
11356         do. 
11357
11358         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
11359         Enumerations, use TypeManager.EnumToUnderlying and call
11360         recursively. 
11361
11362         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
11363         bug #57013
11364
11365         (This.Emit): Use EmitContext.EmitThis to emit our
11366         instance variable.
11367
11368         (This.EmitAssign): Ditto.
11369
11370         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
11371         codepaths, we will move all the functionality into
11372         Mono.CSharp.This 
11373
11374         (FieldExpr.EmitAssign): Ditto.
11375
11376         This fixes several hidden bugs that I uncovered while doing a code
11377         review of this today.
11378
11379         * codegen.cs (EmitThis): reworked so the semantics are more clear
11380         and also support value types "this" instances.
11381
11382         * iterators.cs: Changed so that for iterators in value types, we
11383         do not pass the value type as a parameter.  
11384
11385         Initialization of the enumerator helpers is now done in the caller
11386         instead of passing the parameters to the constructors and having
11387         the constructor set the fields.
11388
11389         The fields have now `assembly' visibility instead of private.
11390
11391 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
11392
11393         * expression.cs (Argument.Resolve): Check if fields passed as ref
11394         or out are contained in a MarshalByRefObject.
11395
11396         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
11397         another compiler type.
11398
11399 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
11400
11401         * class.cs (Indexer.Define): use the new name checking method.
11402         Also, return false on an error.
11403         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
11404         (is_identifier_[start/part]_character): make static.
11405
11406 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
11407
11408         * expression.cs (Binary.ResolveOperator): Do no append strings
11409         twice: since we can be invoked more than once (array evaluation)
11410         on the same concatenation, take care of this here.  Based on a fix
11411         from Ben (bug #56454)
11412
11413 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11414
11415         * codegen.cs: Fix another case where CS1548 must be reported (when 
11416         delay-sign isn't specified and no private is available #56564). Fix
11417         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11418         error when MCS is used on the MS runtime and we need to delay-sign 
11419         (which seems unsupported by AssemblyBuilder - see #56621).
11420
11421 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
11422
11423         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
11424         (TypeManager.ComputeNamespaces): Faster implementation for
11425         Microsoft runtime.
11426
11427         * compiler.csproj: Updated AssemblyName to mcs.
11428
11429 2004-05-11  Jackson Harper  <jackson@ximian.com>
11430
11431         * Makefile: Preserve MONO_PATH
11432         
11433 2004-05-11  Jackson Harper  <jackson@ximian.com>
11434
11435         * Makefile: Use mono and mcs to build gmcs
11436         
11437 2004-05-03  Miguel de Icaza  <miguel@ximian.com>
11438
11439         * codegen.cs: Add patch from Robert Shade
11440         <rshade@dvsconsulting.com>, use FileAccess.Read on the keyfile, to
11441         sync with mcs.
11442
11443 2004-05-02  Sebastien Pouliot  <sebastien@ximian.com>
11444
11445         * CryptoConvert.cs: Updated to latest version. Fix issue with 
11446         incomplete key pairs (#57941).
11447
11448 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
11449
11450         * codegen.cs: Fix another case where CS1548 must be reported (when 
11451         delay-sign isn't specified and no private is available #56564). Fix
11452         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
11453         error when MCS is used on the MS runtime and we need to delay-sign 
11454         (which seems unsupported by AssemblyBuilder - see #56621).
11455
11456 2004-04-29  Jackson Harper  <jackson@ximian.com>
11457
11458         * Makefile: Set MONO_PATH to use the bootstrap corlib
11459         * driver.cs: Check the GAC for referenced assemblies.
11460                 
11461 2004-04-29  Martin Baulig  <martin@ximian.com>
11462
11463         * Makefile (gmcs.exe): Set MONO_PATH to use `../class/lib/net_2_0'.
11464
11465 2004-04-07  Martin Baulig  <martin@ximian.com>
11466
11467         * expression.cs (Binary.ResolveOperator): Added special case for
11468         Equality/Inequality between a type parameter and a null literal.
11469
11470 2004-04-07  Martin Baulig  <martin@ximian.com>
11471
11472         * convert.cs: Check null literal -> type parameter conversions.
11473
11474 2004-04-07  Martin Baulig  <martin@ximian.com>
11475
11476         * generic.cs (ConstructedType.CheckConstraints): Enforce the
11477         `class' and `struct' constraints.
11478
11479 2004-04-07  Martin Baulig  <martin@ximian.com>
11480
11481         * generic.cs (SpecialConstraint): New public enum.
11482         (Constraints.Resolve): Added support for the `class' and `struct'
11483         constraints.
11484
11485         * cs-parser.jay (type_parameter_constraint): Added support for the
11486         `class' and `struct' constraints.
11487
11488 2004-04-07  Martin Baulig  <martin@ximian.com>
11489
11490         * support.cs (GenericConstraints): Replaced `Types' by
11491         `ClassConstraint' and `InterfaceConstraints'; added
11492         `HasClassConstraint'.   
11493
11494 2004-04-07  Martin Baulig  <martin@ximian.com>
11495
11496         * generic.cs
11497         (Constraints.InterfaceConstraints): New public property.
11498         (Constraints.Types): Make this property public
11499         (TypeParameter): Implement IMemberContainer.
11500         (TypeParameter.Define): Take a `GenericTypeParameterBuilder'
11501         instead of a TypeBuilder/MethodBuilder; pass the interface
11502         constraints to TypeManager.AddTypeParameter().
11503         (TypeParameter.DefineType): Just take an EmitContext and no
11504         TypeBuilder/MethodBuilder.  Use the new public API.
11505
11506         * typemanager.cs (TypeManager.AddTypeParameter): Added
11507         `TypeExpr[]' argument; add the interfaces to the
11508         `builder_to_ifaces' hash.
11509         (TypeManager.LookupMemberContainer): For
11510         GenericTypeParameterBuilders, get the TypeParameter from the
11511         `builder_to_type_param'.
11512         (TypeManager.FindMembers): For GenericTypeParameterBuilders, get
11513         the TypeParameter and call FindMembers on it.
11514
11515 2004-04-07  Martin Baulig  <martin@ximian.com>
11516
11517         * class.cs
11518         (MethodCore.GenericMethod): Moved this field here from Method.
11519         (MethodCore.IsDuplicateImplementation): Take the number of type
11520         parameters into account if we're a generic method.
11521
11522         * expression.cs (Invocation.InferTypeArguments): Don't return true
11523         if `arguments' is null; we still need to check whether we actually
11524         don't need to infer anything in this case.
11525         (MemberAccess): Merged the functionality from GenericMemberAccess
11526         into this class.
11527
11528         * generic.cs (GenericMemberAccess): Removed.
11529
11530 2004-04-05  Martin Baulig  <martin@ximian.com>
11531
11532         * decl.cs (MemberCore): For generic classes, interfaces and
11533         structs, `Name' now includes the number of type parameters
11534         ("Stack!1.Node!1").
11535         (DeclSpace.FindType): Removed the `num_type_args' argument; we now
11536         encode the number of type arguments in the type name.
11537
11538         * expression.cs (Expression.MemberLookup): Removed the
11539         `num_type_args' argument; we now encode the number of type
11540         arguments in the type name.
11541
11542         * ecore.cs (SimpleName): Encode the number of type arguments in
11543         the type name itself.
11544
11545         * generic.cs (ConstructedType): Likewise.
11546
11547         * tree.cs (Tree.RecordDecl): Take a `string' instead of a
11548         `MemberName'; we now include the number of type parameters in the
11549         type name.
11550
11551         * typemanager.cs (TypeManager.CheckGeneric): Removed.
11552         (TypeManager.MemberLookup): Removed the
11553         `num_type_args' argument; we now encode the number of type
11554         arguments in the type name.     
11555
11556 2004-04-03  Martin Baulig  <martin@ximian.com>
11557
11558         * decl.cs (MemberCore.ctor): Take a MemberName instead of a sting.
11559         (MemberCore.MemberName): Moved here from MemberBase.
11560         (DeclSpace.SetParameterInfo): Just take the constraints as an
11561         ArrayList; we already have the type parameters in our
11562         `MemberName'; also do the CS0080 reporting here.
11563
11564         * cs-parser.jay (struct_declaration): Use `member_name' instead of
11565         `IDENTIFIER opt_type_parameter_list'; when constructing our
11566         `MemberName', it'll already include our type parameters.
11567         (class_declaration, interface_declaration): Likewise.
11568         (delegate_declaration): Likewise.
11569         (MakeName): Take a MemberName and return a MemberName.
11570         The following two changes are required to avoid shift/reduce conflicts:
11571         (member_name): Don't include a TypeName anymore; ie. this is now
11572         just 'IDENTIFIER opt_type_parameter_list'.
11573         (property_declaration, event_declaration): Use a
11574         `namespace_or_type_name' instead of a `member_name'.            
11575
11576 2004-04-03  Martin Baulig  <martin@ximian.com>
11577
11578         * decl.cs (MemberName): Renamed to `TypeName' and created a new
11579         `MemberName' class.
11580         (TypeName): Formerly known as MemberName.
11581
11582         * namespace.cs (NamespaceEntry.UsingAlias): Take a `TypeName'
11583         instead of a `MemberName'.
11584
11585         * cs-parser.jay (namespace_or_type_name): Create a TypeName.
11586         (member_name): New rule; create a MemberName.
11587
11588 2004-04-02  Martin Baulig  <martin@ximian.com>
11589
11590         * namespace.cs (NamespaceEntry.VerifyUsing): Added error checking
11591         (CS0305 and CS0308).
11592
11593 2004-04-02  Martin Baulig  <martin@ximian.com>
11594
11595         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Added
11596         support for nested types.
11597
11598 2004-04-02  Martin Baulig  <martin@ximian.com>
11599
11600         * ecore.cs (IAlias): New public interface.
11601         (TypeExpr, TypeExpression): Implement IAlias.
11602         (TypeAliasExpression): New public class.
11603
11604         * namespace.cs (Namespace): Implement IAlias.
11605         (Namespace.Lookup): Return an IAlias instead on an object.
11606         (Namespace.DefineName): Take an IAlias instead of an object.
11607         (NamespaceEntry.AliasEntry.Resolve): Return an IAlias instead of
11608         an object.
11609         (NamespaceEntry.UsingAlias): Take a Membername instead of an
11610         Expression.
11611         (NamespaceEntry.LookupAlias): Return an IAlias instead on an
11612         object.
11613         (NamespaceEntry.Lookup): Likewise.
11614
11615         * rootcontext.cs (RootContext.LookupType): Return a TypeExpr
11616         instead of a Type.      
11617
11618         * decl.cs (DeclSpace): Implement IAlias.
11619         (DeclSpace.LookupAlias): Return an IAlias instead of a string.
11620
11621         * generic.cs (ConstructedType): Improved error checking.
11622
11623 2004-04-02  Martin Baulig  <martin@ximian.com>
11624
11625         * convert.cs: Added type parameter conversions.
11626
11627         * ecore.cs
11628         (UnboxCast.Emit): Emit an `unbox.any' for type params.
11629         (ClassCast.Emit): If the source type is a type parameter, box it.
11630         If the target type is a type parameter, emit an `unbox.any'
11631         instead of a `classcast'.1      
11632
11633 2004-04-01  Martin Baulig  <martin@ximian.com>
11634
11635         * cs-tokenizer.cs (parse_less_than): Allow Token.DOT.
11636
11637 2004-04-01  Martin Baulig  <martin@ximian.com>
11638
11639         * generic.cs (ConstructedType.CheckConstraints): Use
11640         Convert.ImplicitStandardConversionExists(); user-defined implicit
11641         conversions are not allowed according to the spec.
11642
11643 2004-03-30  Martin Baulig  <martin@ximian.com>
11644
11645         * expression.cs (New): Added support for type parameters.
11646
11647         * typemanager.cs
11648         (TypeManager.activator_type): New public static field.
11649         (TypeManager.activator_create_instance): Likewise.
11650
11651 2004-03-30  Martin Baulig  <martin@ximian.com>
11652
11653         * typemanager.cs (TypeManager.HasConstructorConstraint): New
11654         public method.
11655
11656 2004-03-30  Martin Baulig  <martin@ximian.com>
11657
11658         * generic.cs (ConstructedType.CheckConstraints): Actually follow
11659         the spec here: the argument type must be convertible to the
11660         constraints.
11661
11662 2004-03-30  Martin Baulig  <martin@ximian.com>
11663
11664         * generic.cs
11665         (TypeParameter.Define, TypeParameter.DefineMethod): Call
11666         TypeManager.AddTypeParameter().
11667         (ConstructedType.CheckConstraints): Re-enable this and actually
11668         check whether we have a constructor constraint.
11669
11670         * typemanager.cs
11671         (TypeManager.builder_to_type_param): New static field.
11672         (TypeManager.AddTypeParameter): New static method.
11673         (TypeManager.LookupTypeParameter): New public method.
11674
11675 2004-03-30  Martin Baulig  <martin@ximian.com>
11676
11677         * generic.cs (TypeParameter.DefineType): Return a boolean and use
11678         the new API to actually define the constructor constraint.
11679
11680         * typemanager.cs
11681         (TypeManager.new_constraint_attr_type): New static field.
11682         (TypeManager.InitCoreTypes): Initialize it.
11683
11684 2004-03-30  Martin Baulig  <martin@ximian.com>
11685
11686         * generic.cs (Constraints): Completed error checking, use correct
11687         error numbers.
11688
11689 2004-03-29  Martin Baulig  <martin@ximian.com>
11690
11691         * delegate.cs (Delegate.VerifyMethod): Infer type arguments.
11692
11693         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11694         public version which takes a `ParameterData pd' instead of an
11695         `ArrayList args'.
11696
11697 2004-03-29  Martin Baulig  <martin@ximian.com>
11698
11699         * typemanager.cs (TypeManager.IsGenericMethod): Take a MethodBase,
11700         not a MethodInfo.       
11701
11702 2004-03-29  Martin Baulig  <martin@ximian.com>
11703
11704         * expression.cs (Argument.ResolveMethodGroup): If we're a
11705         ConstructedType, call GetMemberAccess() on it.  
11706
11707 2004-03-29  Martin Baulig  <martin@ximian.com>
11708
11709         * class.cs (MethodBase.CheckGenericOverride): New abstract method.
11710         (MethodCore.CheckGenericOverride): When overriding a generic
11711         method, check whether the constraints match.
11712
11713         * support.cs (GenericConstraints): New public interface.
11714         (ParameterData.GenericConstraints): New public method.
11715
11716         * parameter.cs (Parameter.Resolve): Check whether we're a generic
11717         method parameter and compute our constraints if appropriate.
11718         (Parameter.GenericConstraints): New public property.
11719
11720         * generic.cs (Constraints): Implement GenericConstraints.
11721
11722 2004-03-29  Martin Baulig  <martin@ximian.com>
11723
11724         * decl.cs (MemberCache.FindMemberToOverride): Use
11725         `paramTypes [j].Equals (cmpAttrs [j])' instead of `=='.
11726
11727 2004-03-29  Martin Baulig  <martin@ximian.com>
11728
11729         * generic.cs (GenericMethod.Define): Resolve our type parameters.
11730
11731 2004-03-29  Martin Baulig  <martin@ximian.com>
11732
11733         * cs-parser.jay: Report CS0080 instead of -200 ("Constraints are
11734         not allowed on non-generic declarations").
11735
11736 2004-03-29  Martin Baulig  <martin@ximian.com>
11737
11738         * expression.cs (Invocation.InferTypeArguments): Added overloaded
11739         public version of this method.
11740
11741         * class.cs (MethodCore.IsDuplicateImplementation): Use
11742         Invocation.InferTypeArguments() to check this.
11743
11744 2004-03-29  Martin Baulig  <martin@ximian.com>
11745
11746         * convert.cs: Use TypeManager.IsDelegateType() instead of
11747         comparing types correctly.
11748
11749 2004-03-29  Martin Baulig  <martin@ximian.com>
11750
11751         * convert.cs: Use TypeManager.IsSubclassOf() instead of comparing
11752         types directly to make it work for generic instances.
11753
11754         * typemanager.cs (TypeManager.IsSubclassOf): New static method.
11755
11756 2004-03-29  Martin Baulig  <martin@ximian.com>
11757
11758         * typemanager.cs (TypeManager.MayBecomeEqualGenericTypes): Added
11759         support for arrays.     
11760
11761 2004-03-24  Martin Baulig  <martin@ximian.com>
11762
11763         * decl.cs (DeclSpace.FindType): Also use
11764         TypeManager.CheckGeneric() for types from the using clauses.
11765
11766 2004-03-23  Martin Baulig  <martin@ximian.com>
11767
11768         * expression.cs (Invocation.OverloadResolve): Added `bool
11769         may_fail' argument and use it instead of the Location.IsNull() hack.
11770
11771 2004-03-23  Martin Baulig  <martin@ximian.com>
11772
11773         * expression.cs (Invocation.InferType): Use correct type inference
11774         rules here.     
11775
11776 2004-03-23  Martin Baulig  <martin@ximian.com>
11777
11778         * ecore.cs (MethodGroupExpr.Name): Use
11779         TypeManager.CSharpSignature() instead of just the name.
11780
11781         * expression.cs (Invocation.OverloadResolve): Provide better error
11782         reporting.
11783         (Invocation.DoResolve): OverloadResolve() never returns null
11784         without reporting an error, so removed the error -6 reporting here.
11785
11786 2004-03-23  Martin Baulig  <martin@ximian.com>
11787
11788         * typemanager.cs (TypeManager.GetMethodFlags): Fixed the FIXME for
11789         generic methods.
11790
11791         * cs-parser.jay (delegate_declaration): Support generic delegates.
11792
11793         * delegate.cs: Support generic delegates.
11794
11795 2004-03-22  Martin Baulig  <martin@ximian.com>
11796
11797         * expression.cs (Invocation.InferParamsTypeArguments): New static
11798         method; does type inference for params arguments.
11799
11800 2004-03-21  Martin Baulig  <martin@ximian.com>
11801
11802         * typemanager.cs (TypeManager.IsGenericMethod): New public static
11803         method; checks whether a method is a generic method.    
11804
11805         * expression.cs (Invocation.InferTypeArguments): New static method;
11806         infer type arguments for generic method invocation.
11807
11808         * ecore.cs (MethodGroupExpr.HasTypeArguments): New public
11809         property; we set this to true if we're resolving a generic method
11810         invocation and the user specified type arguments, ie. we're not
11811         doing type inference.
11812
11813 2004-03-20  Martin Baulig  <martin@ximian.com>
11814
11815         * class.cs (MethodData.DeclaringType): New public property.
11816         (MethodData.Define): Set DeclaringType here.
11817         (Operator.Define): Use OperatorMethod.MethodData.DeclaringType
11818         instead of OperatorMethodBuilder.DeclaringType.
11819
11820 2004-03-20  Martin Baulig  <martin@ximian.com>
11821
11822         * cs-tokenizer.cs (xtoken): Return a special
11823         Token.DEFAULT_OPEN_PARENS for "`default' followed by open parens".
11824
11825         * cs-parser.jay (default_value_expression): Switch to the new
11826         syntax (14.5.13).
11827
11828 2004-03-19  Martin Baulig  <martin@ximian.com>
11829
11830         * decl.cs (MemberName): New class.  We use this to "construct"
11831         namespace_or_type_name's.
11832
11833         * generics.cs (TypeArguments.GetDeclarations): New public method;
11834         returns the type arguments as a string[] and reports a CS0081 if
11835         one of them is not an identifier.
11836
11837         * class.cs (MemberBase): The .ctor now takes the name as a
11838         MemberName instead of a string.
11839         (MemberBase.ExplicitInterfaceName): Changed type from string to
11840         Expression.
11841         (MemberBase.DoDefine): If we're an explicit implementation, the
11842         InterfaceType may be a generic instance.
11843
11844         * cs-parser.jay (namespace_or_type_name): Return a MemberName.
11845         (namespace_name): Call MemberName.GetName () to transform the
11846         MemberName into a string and ensure we don't have any type
11847         arguments.
11848         (type_name): Call MemberName.GetTypeExpression() to transfrom the
11849         MemberName into an expression.
11850         (method_header): Use namespace_or_type_name instead of member_name.     
11851
11852 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
11853
11854         * rootcontext.cs: Add new types to the boot resolution.
11855
11856         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
11857         MulticastDelegate is not allowed.
11858
11859         * typemanager.cs: Add new types to lookup: System.TypedReference
11860         and ArgIterator.
11861
11862         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
11863         check for TypedReference or ArgIterator, they are not allowed. 
11864
11865         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
11866         makes us properly catch 1510 in some conditions (see bug 56016 for
11867         details). 
11868
11869 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
11870
11871         * CryptoConvert.cs: update from corlib version
11872         with endian fixes.
11873
11874 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
11875
11876         * class.cs (Indexer.Define): Check indexername declaration
11877
11878 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
11879
11880         * attribute.cs (IsClsCompliant): Fixed problem with handling
11881         all three states (compliant, not-compliant, undetected).
11882
11883 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
11884
11885         * attribute.cs (Attribute): Location is now public.
11886         (Resolve): Store resolved arguments (pos_values) in attribute class.
11887         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
11888         (GetClsCompliantAttributeValue): New method that gets
11889         CLSCompliantAttribute value.
11890         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
11891         if exists else null.
11892         (AttributeTester): New class for CLS-Compliant verification routines.
11893
11894         * class.cs (Emit): Add CLS-Compliant verification.
11895         (Method.GetSignatureForError): Implemented.
11896         (Constructor.GetSignatureForError): Implemented
11897         (Constructor.HasCompliantArgs): Returns if constructor has
11898         CLS-Compliant arguments.
11899         (Constructor.Emit): Override.
11900         (Construcor.IsIdentifierClsCompliant): New method; For constructors
11901         is needed to test only parameters.
11902         (FieldBase.GetSignatureForError): Implemented.
11903         (TypeContainer): New member for storing base interfaces.
11904         (TypeContainer.FindMembers): Search in base interfaces too.
11905
11906         * codegen.cs (GetClsComplianceAttribute): New method that gets
11907         assembly or module CLSCompliantAttribute value.
11908         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
11909         for assembly.
11910         (ModuleClass.Emit): Add error 3012 test.
11911
11912         * const.cs (Emit): Override and call base for CLS-Compliant tests.
11913
11914         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
11915         state for all decl types.
11916         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
11917         if CLS-Compliant tests are required.
11918         (IsClsCompliaceRequired): New method. Analyze whether code
11919         must be CLS-Compliant.
11920         (IsExposedFromAssembly): New method. Returns true when MemberCore
11921         is exposed from assembly.
11922         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
11923         value or gets cached value.
11924         (HasClsCompliantAttribute): New method. Returns true if MemberCore
11925         is explicitly marked with CLSCompliantAttribute.
11926         (IsIdentifierClsCompliant): New abstract method. This method is
11927         used to testing error 3005.
11928         (IsIdentifierAndParamClsCompliant): New method. Common helper method
11929         for identifier and parameters CLS-Compliant testing.
11930         (VerifyClsCompliance): New method. The main virtual method for
11931         CLS-Compliant verifications.
11932         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
11933         null. I don't know why is null (too many public members !).
11934         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
11935         and get value of first CLSCompliantAttribute that found.
11936
11937         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
11938         (VerifyClsCompliance): Override and add extra tests.
11939
11940         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
11941         clscheck- disable CLS-Compliant verification event if assembly is has
11942         CLSCompliantAttribute(true).
11943
11944         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
11945         ApllyAttribute is now called in emit section as in the other cases.
11946         Possible future Emit integration.
11947         (IsIdentifierClsCompliant): New override.
11948         (VerifyClsCompliance): New override.
11949         (GetEnumeratorName): Returns full enum name.
11950
11951         * parameter.cs (GetSignatureForError): Implemented.
11952
11953         * report.cs (WarningData): New struct for Warning message information.
11954         (LocationOfPreviousError): New method.
11955         (Warning): New method. Reports warning based on the warning table.
11956         (Error_T): New method. Reports error based on the error table.
11957
11958         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
11959         verifications are done here.
11960
11961         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
11962
11963         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
11964         CLSCompliantAttribute.
11965         (all_imported_types): New member holds all imported types from other
11966         assemblies.
11967         (LoadAllImportedTypes): New method fills static table with exported types
11968         from all referenced assemblies.
11969         (Modules): New property returns all assembly modules.
11970
11971 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
11972
11973         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
11974         throwing a parser error.
11975
11976         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
11977         which removes the hardcoded get_/set_ prefixes for properties, as
11978         IL allows for the properties to be named something else.  
11979
11980         Bug #56013
11981
11982         * expression.cs: Do not override operand before we know if it is
11983         non-null.  Fix 56207
11984
11985 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11986
11987         * typemanager.cs: support for pinned variables.
11988
11989 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11990
11991         * decl.cs, typemanager.cs: Avoid using an arraylist
11992         as a buffer if there is only one result set.
11993
11994 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
11995
11996         * expression.cs: Make sure you cant call a static method
11997         with an instance expression, bug #56174.
11998
11999 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
12000
12001         * class.cs (IsDuplicateImplementation): Improve error reporting to
12002         flag 663 (method only differs in parameter modifier).
12003
12004         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
12005         in preprocessor directives.
12006
12007         * location.cs (LookupFile): Allow for the empty path.
12008
12009         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
12010         better approach for some of that patch, but its failing with the
12011         CharSet enumeration.  For now try/catch will do.
12012
12013         * typemanager.cs: Do not crash if a struct does not have fields.
12014         Fixes 56150.
12015
12016 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12017
12018         * expression.cs: cs0213, cant fix a fixed expression.
12019         fixes 50231.
12020
12021 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12022
12023         * cs-parser.jay: detect invalid embeded statements gracefully.
12024         bug #51113.
12025
12026 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
12027
12028         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
12029         As a regex:
12030         s/
12031         the invocation type may not be a subclass of the tye of the item/
12032         The type of the item must be a subclass of the invocation item.
12033         /g
12034
12035         Fixes bug #50820.
12036
12037 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
12038
12039         * attribute.cs: Added methods to get a string and a bool from an
12040         attribute. Required to information from AssemblyKeyFileAttribute,
12041         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
12042         * codegen.cs: Modified AssemblyName creation to include support for
12043         strongnames. Catch additional exceptions to report them as CS1548.
12044         * compiler.csproj: Updated include CryptoConvert.cs.
12045         * compiler.csproj.user: Removed file - user specific configuration.
12046         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
12047         Mono.Security assembly. The original class is maintained and tested in
12048         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
12049         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
12050         like CSC 8.0 (C# v2) supports.
12051         * Makefile: Added CryptoConvert.cs to mcs sources.
12052         * rootcontext.cs: Added new options for strongnames.
12053
12054 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
12055
12056         * driver.cs: For --expect-error, report error code `2'
12057         if the program compiled with no errors, error code `1' if
12058         it compiled with an error other than the one expected.
12059
12060 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
12061
12062         * compiler.csproj: Updated for Visual Studio .NET 2003.
12063         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
12064         * compiler.sln: Updated for Visual Studio .NET 2003.
12065
12066 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
12067
12068         * expression.cs: Fix bug #47234. We basically need to apply the
12069         rule that we prefer the conversion of null to a reference type
12070         when faced with a conversion to 'object' (csc behaviour).
12071
12072 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12073
12074         * statement.cs: Shorter form for foreach, eliminates
12075         a local variable. r=Martin.
12076
12077 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12078
12079         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
12080         checks if we can use brtrue/brfalse to test for 0.
12081         * expression.cs: use the above in the test for using brtrue/brfalse.
12082         cleanup code a bit.
12083
12084 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12085
12086         * expression.cs: Rewrite string concat stuff. Benefits:
12087
12088         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
12089         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
12090         rather than a concat chain.
12091
12092         * typemanager.cs: Add lookups for more concat overloads.
12093
12094 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
12095
12096         * expression.cs: Emit shorter il code for array init.
12097
12098         newarr
12099         dup
12100         // set 1
12101
12102         // set 2
12103
12104         newarr
12105         stloc.x
12106
12107         ldloc.x
12108         // set 1
12109
12110         ldloc.x
12111         // set 2
12112
12113 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
12114
12115         * statement.cs: Before, two switch blocks would be merged if the
12116         total size of the blocks (end_item - begin_item + 1) was less than
12117         two times the combined sizes of the blocks.
12118
12119         Now, it will only merge if after the merge at least half of the
12120         slots are filled.
12121
12122         fixes 55885.
12123
12124 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
12125
12126         * class.cs : csc build fix for GetMethods(). See bug #52503.
12127
12128 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
12129
12130         * expression.cs: Make sure fp comparisons work with NaN.
12131         This fixes bug #54303. Mig approved this patch a long
12132         time ago, but we were not able to test b/c the runtime
12133         had a related bug.
12134
12135 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
12136
12137         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
12138
12139 2004-03-19  Martin Baulig  <martin@ximian.com>
12140
12141         * class.cs (MemberCore.IsDuplicateImplementation): Check whether
12142         two overloads may unify for some type parameter substitutions and
12143         report a CS0408 if appropriate.
12144
12145 2004-03-19  Martin Baulig  <martin@ximian.com>
12146
12147         * class.cs (MemberCore.IsDuplicateImplementation): Report the
12148         error here and not in our caller.
12149
12150 2004-03-19  Martin Baulig  <martin@ximian.com>
12151
12152         * interface.cs: Completely killed this file.
12153         (Interface): We're now a TypeContainer and live in class.cs.
12154
12155         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
12156         argument; we're now also called for interfaces.
12157         (TypeContainer.DefineMembers): Allow this method being called
12158         multiple times.
12159         (TypeContainer.GetMethods): New public method; formerly known as
12160         Interface.GetMethod().  This is used by PendingImplementation.
12161         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
12162         it's now private and non-static.
12163         (Interface): Moved this here; it's now implemented similar to
12164         Class and Struct.
12165         (Method, Property, Event, Indexer): Added `bool is_interface'
12166         argument to their .ctor's.
12167         (MemberBase.IsInterface): New public field.
12168
12169         * cs-parser.jay: Create normal Method, Property, Event, Indexer
12170         instances instead of InterfaceMethod, InterfaceProperty, etc.
12171         (opt_interface_base): Removed; we now use `opt_class_base' instead.
12172         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
12173
12174 2004-03-19  Martin Baulig  <martin@ximian.com>
12175
12176         * class.cs (MethodCore.IsDuplicateImplementation): New private
12177         method which does the CS0111 checking.
12178         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
12179         Use IsDuplicateImplementation().
12180
12181 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
12182
12183         * decl.cs (FindMemberToOverride): New method to find the correct
12184         method or property to override in the base class.
12185         * class.cs
12186             - Make Method/Property use the above method to find the
12187               version in the base class.
12188             - Remove the InheritableMemberSignatureCompare as it is now
12189               dead code.
12190
12191         This patch makes large code bases much faster to compile, as it is
12192         O(n) rather than O(n^2) to do this validation.
12193
12194         Also, it fixes bug 52458 which is that nested classes are not
12195         taken into account when finding the base class member.
12196
12197         Reviewed/Approved by Martin.
12198
12199 2004-03-17  Martin Baulig  <martin@ximian.com>
12200
12201         * expression.cs (MemberAccess.DoResolve): Take the parent's number
12202         of type arguments into account; use the `real_num_type_args'
12203         approach like in DoResolveAsTypeStep().
12204
12205         * generic.cs (GenericMemberAccess.DoResolve): Make this work for
12206         nested types.
12207
12208 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
12209
12210         * interface.cs: In all interface classes removed redundant
12211         member initialization.
12212
12213 2004-03-16  Martin Baulig  <martin@ximian.com>
12214
12215         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12216
12217 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12218
12219         * decl.cs (DefineTypeAndParents): New helper method to define a
12220         type's containers before the type itself is defined;  This is a
12221         bug exposed by the recent changes to Windows.Forms when an
12222         implemented interface was defined inside a class that had not been
12223         built yet.   
12224
12225         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
12226
12227         (Check): Loop correctly to report errors modifiers
12228         (UNSAFE was not in the loop, since it was the same as TOP).
12229
12230         * interface.cs: Every interface member now takes a ModFlags,
12231         instead of a "is_new" bool, which we set on the base MemberCore. 
12232
12233         Every place where we called "UnsafeOk" in the interface, now we
12234         call the proper member (InterfaceMethod.UnsafeOK) instead to get
12235         the unsafe settings from the member declaration instead of the
12236         container interface. 
12237
12238         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
12239
12240         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12241         `set_indexer_name' to the pending bits (one per type).
12242
12243         We fixed a bug today that was picking the wrong method to
12244         override, since for properties the existing InterfaceMethod code
12245         basically ignored the method name.  Now we make sure that the
12246         method name is one of the valid indexer names.
12247
12248 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
12249  
12250         * support.cs (SeekableStreamReader): Keep track of stream byte
12251         positions and don't mix them with character offsets to the buffer.
12252
12253         Patch from Gustavo Giráldez
12254
12255 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
12256
12257         * interface.cs (InterfaceSetGetBase): Removed double member
12258         initialization, base class does it as well.
12259
12260 2004-03-13  Martin Baulig  <martin@ximian.com>
12261
12262         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
12263         when compiling corlib.
12264
12265 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
12266
12267         * convert.cs (ExplicitConversion): We were reporting an error on
12268         certain conversions (object_type source to a value type, when the
12269         expression was `null') before we had a chance to pass it through
12270         the user defined conversions.
12271
12272         * driver.cs: Replace / and \ in resource specifications to dots.
12273         Fixes 50752
12274
12275         * class.cs: Add check for duplicate operators.  Fixes 52477
12276
12277 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
12278
12279         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
12280         that are in the middle of the statements, not only at the end.
12281         Fixes #54987
12282
12283         * class.cs (TypeContainer.AddField): No longer set the
12284         `HaveStaticConstructor' flag, now we call it
12285         `UserDefineStaticConstructor' to diferentiate the slightly
12286         semantic difference.
12287
12288         The situation is that we were not adding BeforeFieldInit (from
12289         Modifiers.TypeAttr) to classes that could have it.
12290         BeforeFieldInit should be set to classes that have no static
12291         constructor. 
12292
12293         See:
12294
12295         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
12296
12297         And most importantly Zoltan's comment:
12298
12299         http://bugzilla.ximian.com/show_bug.cgi?id=44229
12300
12301         "I think beforefieldinit means 'it's ok to initialize the type sometime 
12302          before its static fields are used', i.e. initialization does not need
12303          to be triggered by the first access to the type. Setting this flag
12304          helps the JIT to compile better code, since it can run the static
12305          constructor at JIT time, and does not need to generate code to call it
12306          (possibly lots of times) at runtime. Unfortunately, mcs does not set
12307          this flag for lots of classes like String. 
12308          
12309          csc sets this flag if the type does not have an explicit static 
12310          constructor. The reasoning seems to be that if there are only static
12311          initalizers for a type, and no static constructor, then the programmer
12312          does not care when this initialization happens, so beforefieldinit
12313          can be used.
12314          
12315          This bug prevents the AOT compiler from being usable, since it 
12316          generates so many calls to mono_runtime_class_init that the AOT code
12317          is much slower than the JITted code. The JITted code is faster, 
12318          because it does not generate these calls if the vtable is type is
12319          already initialized, which is true in the majority of cases. But the
12320          AOT compiler can't do this."
12321
12322 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
12323
12324         * class.cs (MethodData.Emit): Refactor the code so symbolic
12325         information is generated for destructors;  For some reasons we
12326         were taking a code path that did not generate symbolic information
12327         before. 
12328
12329 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
12330
12331         * class.cs: Create a Constructor.CheckBase method that
12332         takes care of all validation type code. The method
12333         contains some code that was moved from Define.
12334
12335         It also includes new code that checks for duplicate ctors.
12336         This fixes bug #55148.
12337
12338 2004-03-09  Joshua Tauberer <tauberer@for.net>
12339
12340         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
12341         a { ... }-style array creation invokes EmitStaticInitializers
12342         which is not good for reference-type arrays.  String, decimal
12343         and now null constants (NullCast) are not counted toward
12344         static initializers.
12345
12346 2004-03-05  Martin Baulig  <martin@ximian.com>
12347
12348         * location.cs (SourceFile.HasLineDirective): New public field;
12349         specifies whether the file contains or is referenced by a "#line"
12350         directive.
12351         (Location.DefineSymbolDocuments): Ignore source files which
12352         either contain or are referenced by a "#line" directive.        
12353
12354 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
12355
12356         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
12357         direct access to our parent, so check the method inline there.
12358
12359 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
12360
12361         * expression.cs (Invocation.EmitCall): Miguel's last commit
12362         caused a regression. If you had:
12363
12364             T t = null;
12365             t.Foo ();
12366
12367         In Foo the implict this would be null.
12368
12369 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
12370
12371         * expression.cs (Invocation.EmitCall): If the method is not
12372         virtual, do not emit a CallVirt to it, use Call.
12373
12374         * typemanager.cs (GetFullNameSignature): Improve the method to
12375         cope with ".ctor" and replace it with the type name.
12376
12377         * class.cs (ConstructorInitializer.Resolve): Now the method takes
12378         as an argument the ConstructorBuilder where it is being defined,
12379         to catch the recursive constructor invocations.
12380
12381 2004-03-16  Martin Baulig  <martin@ximian.com>
12382
12383         * expression.cs (MemberAccess.DoResolve): If `expr' resolved to a
12384         ConstructedType, call ResolveType() on it to get the type rather
12385         than just using `expr.Type'.
12386
12387 2004-03-16  Martin Baulig  <martin@ximian.com>
12388
12389         * generics.cs (ConstructedType.GetMemberAccess): Take the
12390         EmitContext instead on the TypeExpr and use
12391         ec.TypeContainer.CurrentType/ec.ContainerType.
12392
12393 2004-03-16  Martin Baulig  <martin@ximian.com>
12394
12395         * ecore.cs (SimpleName.DoResolveAsTypeStep): Lookup type
12396         parameters before aliases.
12397
12398 2004-03-16  Martin Baulig  <martin@ximian.com>
12399
12400         * typemanager.cs (TypeManager.MayBecomeEqualGenericInstances):
12401         New oublic function; checks whether two generic instances may become
12402         equal under some instantiations (26.3.1).
12403
12404         * class.cs (TypeContainer.Define): Call
12405         TypeManager.MayBecomeEqualGenericInstances() and report CS0695 on
12406         error.
12407
12408 2004-03-16  Martin Baulig  <martin@ximian.com>
12409
12410         * class.cs (TypeContainer.GetClassBases): Moved
12411         Error_TypeParameterAsBase() here and also check whether the base
12412         class is not an attribute.
12413
12414 2004-03-16  Martin Baulig  <martin@ximian.com>
12415
12416         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
12417
12418 2004-03-16  Martin Baulig  <martin@ximian.com>
12419
12420         * class.cs (Error_TypeParameterAsBase): Use correct error number
12421         here (CS0689).  
12422
12423 2004-03-16  Martin Baulig  <martin@ximian.com>
12424
12425         * decl.cs (DeclSpace.ResolveTypeExpr): Added more error checking
12426         for generics.
12427
12428         * generics.cs (ConstructedType.DoResolveAsTypeStep): Added better
12429         error reporting.
12430
12431 2004-03-15  Martin Baulig  <martin@ximian.com>
12432
12433         * typemanager.cs (TypeManager.GetFullName): New public method.
12434         (TypeManager.MemberLookup): Added `int_num_type_arguments'
12435         argument; only return members with the correct number of type
12436         arguments.
12437         (TypeManager.CheckGeneric): Allow -1 to bypass the check.
12438         (TypeManager.FilterWithClosure): Call CheckGeneric() to check
12439         whether the number of type arguments matches.
12440
12441         * generic.cs (GenericMemberAccess.ResolveAsTypeStep): Allow `expr'
12442         not being a ConstructedType; we can now do "typeof (Foo.Bar<U>)".
12443
12444         * expression.cs (MemberAccess): Added public `NumTypeArguments'
12445         field; it's set by the protected .ctor when we're actually a
12446         GenericMemberAccess.
12447         (MemberAccess.ResolveAsTypeStep): Compute the total number of type
12448         arguments and pass it to MemberLookupFinal ().
12449
12450         * ecore.cs (Expression.MemberLookup): Added `int
12451         num_type_arguments' argument; only return members with the correct
12452         number of type arguments.
12453         (Expression.MemberLookupFailed): Check whether the MemberLookup
12454         failed because we did not have the correct number of type
12455         arguments; report CS0305 in this case.
12456
12457         * decl.cs (DeclSpace.ResolveTypeExpr): Don't report an error if
12458         `e.ResolveAsTypeTerminal()' already did so.
12459
12460 2004-03-15  Martin Baulig  <martin@ximian.com>
12461
12462         * ecore.cs (Expression.ResolveLValue): Allow e.type being null if
12463         we're a ConstructedType; in this case, the caller must report an
12464         error (for instance CS0131).
12465
12466         * generic.cs (TypeArguments): Added Location argument to the .ctor.
12467         (TypeArguments.Resolve): Actually report errors here.
12468
12469 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
12470
12471         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
12472         `set_indexer_name' to the pending bits (one per type).
12473
12474         We fixed a bug today that was picking the wrong method to
12475         override, since for properties the existing InterfaceMethod code
12476         basically ignored the method name.  Now we make sure that the
12477         method name is one of the valid indexer names.
12478
12479 2004-03-15  Martin Baulig  <martin@ximian.com>
12480
12481         * typemanager.cs (TypeManager.IndexerPropertyName): Added support
12482         for generic instances.
12483
12484 2004-03-13  Martin Baulig  <martin@ximian.com>
12485
12486         * class.cs (TypeContainer.DefineType): Call
12487         TypeManager.AddUserType() immediately after creating the
12488         TypeBuilder; pass all type parameters when creating the
12489         CurrentType.
12490
12491         * decl.cs (DeclSpace.FindNestedType): New public method.
12492         (DeclSpace.FindType): Added `int num_type_args' argument; only
12493         return types with the correct number of type parameters.
12494         (DeclSpace.CountTypeParams): New public property.
12495
12496         * ecore.cs (SimpleName.ctor): Added overloaded version which takes
12497         the number of type parameters; defaults to zero.
12498
12499         * generic.cs (TypeArguments.Count): New public property.
12500         (ConstructedType.DoResolveAsTypeStep): First call
12501         ds.FindNestedType() to find out whether we're nested in the
12502         current generic type; in this case, we inherit all type parameters
12503         from the current class.
12504
12505         * rootcontext.cs (RootContext.NamespaceLookup): Added `int
12506         num_type_args' argument.
12507         (RootContext.LookupType): Added overloaded version which takes the
12508         number of type arguments; only return types with the correct
12509         number of type arguments.
12510
12511         * typemanager.cs (TypeManager.CheckGeneric): New public function;
12512         checks whether `Type t' has `int num_type_args'.
12513
12514 2004-03-13  Martin Baulig  <martin@ximian.com>
12515
12516         * generic.cs (GenericMethod.DefineType): New method; calls
12517         DefineType() on all the type parameters.
12518
12519         * class.cs (MethodData.ctor): Added `GenericMethod generic' argument.
12520         (MethodData.Define): If we're a generic method, call
12521         GenericMethod.DefineType() to define the type parameters.       
12522
12523 2004-03-10  Martin Baulig  <martin@ximian.com>
12524
12525         * pending.cs (Pending.InterfaceMethod): Use TypeManager.IsEqual()
12526         instead of IsAssignableFrom.    
12527
12528 2004-03-10  Martin Baulig  <martin@ximian.com>
12529
12530         * ecore.cs (FieldExpr.ctor): Use TypeManager.TypeToCoreType().
12531
12532         * support.cs (ParameterData.HasArrayParameter): New property.
12533         (ReflectionParameters.ctor): Take a MethodBase instead of a
12534         ParameterInfo[].  If we have any type parameters, get the generic
12535         method definition and ask it whether we have variable arguments.
12536
12537 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
12538
12539         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
12540         routines to check if a type is an enumerable/enumerator allow
12541         classes that implement the IEnumerable or IEnumerator interfaces.
12542
12543         * class.cs (Property, Operator): Implement IIteratorContainer, and
12544         implement SetYields.
12545
12546         (Property.Define): Do the block swapping for get_methods in the
12547         context of iterators.   We need to check if Properties also
12548         include indexers or not.
12549
12550         (Operator): Assign the Block before invoking the
12551         OperatorMethod.Define, so we can trigger the Iterator code
12552         replacement. 
12553
12554         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
12555         Property and Operator classes are not created when we parse the
12556         declarator but until we have the block completed, so we use a
12557         singleton SimpleIteratorContainer.Simple to flag whether the
12558         SetYields has been invoked.
12559
12560         We propagate this setting then to the Property or the Operator to
12561         allow the `yield' to function.
12562
12563 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
12564
12565         * codegen.cs: Implemented attribute support for modules.
12566         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
12567         Assembly/Module functionality.
12568
12569         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
12570         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
12571         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
12572
12573 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
12574
12575         * interface.cs (FindMembers): The operation is performed on all base
12576         interfaces and not only on the first. It is required for future CLS Compliance patch.
12577
12578 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
12579
12580         * statement.cs, codegen.cs:
12581         This patch deals with patterns such as:
12582
12583         public class List : IEnumerable {
12584
12585                 public MyEnumerator GetEnumerator () {
12586                         return new MyEnumerator(this);
12587                 }
12588
12589                 IEnumerator IEnumerable.GetEnumerator () {
12590                         ...
12591                 }
12592                 
12593                 public struct MyEnumerator : IEnumerator {
12594                         ...
12595                 }
12596         }
12597
12598         Before, there were a few things we did wrong:
12599         1) we would emit callvirt on a struct, which is illegal
12600         2) we emited ldarg when we needed to emit ldarga
12601         3) we would mistakenly call the interface methods on an enumerator
12602         type that derived from IEnumerator and was in another assembly. For example:
12603
12604         public class MyEnumerator : IEnumerator
12605
12606         Would have the interface methods called, even if there were public impls of the
12607         method. In a struct, this lead to invalid IL code.
12608
12609 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
12610
12611         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
12612           renamed to Emit.
12613
12614         * delegate.cs (Define): Fixed crash when delegate type is undefined.
12615
12616 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
12617
12618         * cs-parser.jay: Fix small regression: we were not testing V2
12619         compiler features correctly.
12620
12621         * interface.cs: If the emit context is null, then create one
12622
12623 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
12624
12625         * decl.cs (GetSignatureForError): New virtual method to get full name
12626           for error messages.
12627
12628         * attribute.cs (IAttributeSupport): New interface for attribute setting.
12629           Now it is possible to rewrite ApplyAttributes method to be less if/else.
12630
12631         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
12632           Duplicated members and code in these classes has been removed.
12633           Better encapsulation in these classes.
12634
12635 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
12636
12637         * assign.cs (Assign.DoResolve): When dealing with compound
12638         assignments, there is a new rule in ECMA C# 2.4 (might have been
12639         there before, but it is documented here) that states that in:
12640
12641         a op= b;
12642
12643         If b is of type int, and the `op' is a shift-operator, then the
12644         above is evaluated as:
12645
12646         a = (int) a op b 
12647
12648         * expression.cs (Binary.ResolveOperator): Instead of testing for
12649         int/uint/long/ulong, try to implicitly convert to any of those
12650         types and use that in pointer arithmetic.
12651
12652         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
12653         method to print information for from the type, not from the
12654         null-method we were given.
12655
12656 2004-02-01  Duncan Mak  <duncan@ximian.com>
12657
12658         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
12659         parsing for cmd, fixes bug #53694.
12660
12661 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
12662
12663         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
12664         in the member name duplication tests. Property and operator name duplication
12665         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
12666
12667 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
12668
12669         * interface.cs (PopulateMethod): Fixed crash when interface method
12670         returns not existing type (error test cs0246-3.cs).
12671
12672 2004-02-02  Ravi Pratap M <ravi@ximian.com>
12673
12674         * cs-parser.jay (interface_accessors): Re-write actions to also
12675         store attributes attached to get and set methods. Fix spelling
12676         while at it.
12677
12678         (inteface_property_declaration): Modify accordingly.
12679
12680         (InterfaceAccessorInfo): New helper class to store information to pass
12681         around between rules that use interface_accessors.
12682
12683         * interface.cs (Emit): Apply attributes on the get and set
12684         accessors of properties and indexers too.
12685
12686         * attribute.cs (ApplyAttributes): Modify accordingly to use the
12687         right MethodBuilder when applying attributes to the get and set accessors.
12688
12689 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
12690
12691         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
12692
12693 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
12694
12695         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
12696
12697 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
12698
12699         * cs-parser.jay: Remove YIELD token, instead use the new grammar
12700         changes that treat `yield' specially when present before `break'
12701         or `return' tokens.
12702
12703         * cs-tokenizer.cs: yield is no longer a keyword.
12704
12705 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
12706
12707         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
12708         setting for default constructors.
12709         For default constructors are almost every time set wrong Modifier. The
12710         generated IL code has been alright. But inside mcs this values was
12711         wrong and this was reason why several of my CLS Compliance tests
12712         failed.
12713
12714 2004-02-27  Martin Baulig  <martin@ximian.com>
12715
12716         * generics.cs (ConstructedType.ResolveType): Make the nested type
12717         stuff actually work.
12718
12719 2004-02-25  Martin Baulig  <martin@ximian.com>
12720
12721         * decl.cs (DeclSpace.CurrentTypeParameters): New protected
12722         property; returns the type parameters just from the current type,
12723         ie. with the ones from outer classes.
12724         (DeclSpace.LookupGeneric): First search in the current class, then
12725         in outer classes.
12726         (DeclSpace.initialize_type_params): When hiding a type parameter
12727         from an outer class, put it into the `type_param_list' anyways.
12728
12729         * expression.cs (MemberAccess.expr): Made this field protected.
12730
12731         * class.cs (TypeContainer.Define): The `CurrentType' just contains
12732         the type parameters from the current class.
12733
12734         * generic.cs (ConstructedType.ResolveType): Support nested generic
12735         types by taking the type parameters which we inherit from outer
12736         classes into account.
12737         (GenericMemberAccess.ResolveAsTypeStep): Override this and added
12738         support for nested generic types.
12739
12740 2004-02-23  Martin Baulig  <martin@ximian.com>
12741
12742         * decl.cs (DeclSpace.IsGeneric): Make this a property instead of a
12743         field and check whether we're nested inside a generic type.
12744         (DeclSpace.ResolveType): If we're resolving to a generic type
12745         definition, create a ConstructedType and return its resolved type.
12746         (DeclSpace.initialize_type_params): New private method;
12747         initializes the `type_param_list' field from the type parameters
12748         from this and all enclosing classes.
12749         (DeclSpace.TypeParameters): Call initialize_type_params() unless
12750         we're already initialized.
12751
12752 2004-02-23  Martin Baulig  <martin@ximian.com>
12753
12754         * class.cs (Method.Define): Create the generic method before
12755         calling DoDefine().
12756         (Memberbase.DoDefine): Added DeclSpace argument (in addition to
12757         the TypeContainer one); we use this for generic methods.
12758
12759         * decl.cs (CheckAccessLevel): If we're a GenericMethod, use our
12760         parent's TypeBuilder.
12761
12762 2004-02-18  Martin Baulig  <martin@ximian.com>
12763
12764         * ecore.cs (FieldExpr.DoResolveLValue): Use TypeManager.IsEqual()
12765         to check for equality.
12766
12767 2004-02-05  Martin Baulig  <martin@ximian.com>
12768
12769         * ecore.cs (FieldExpr.DoResolveLValue): If we have an
12770         `ec.TypeContainer.CurrentType', use it instead of
12771         `ec.ContainerType' to check whether we're in the type's ctor.
12772
12773 2004-01-29  Martin Baulig  <martin@ximian.com>
12774
12775         * expression.cs (Invocation.DoResolve): If we're a
12776         `ConstructedType', then we're actually a generic method, so
12777         rewrite the expr as a GenericMemberAccess.
12778
12779         * cs-parser.jay (member_name): Don't use `namespace_or_type_name'
12780         here; manually parse it into a string.
12781
12782 2004-01-28  Martin Baulig  <martin@ximian.com>
12783
12784         * typemanager.cs (TypeManager.IsEqual): New static method.
12785         (TypeManager.FilterWithClosure): Call TypeManager.IsEqual() to
12786         check for equality instead of using `=='.
12787
12788 2004-01-26  Martin Baulig  <martin@ximian.com>
12789
12790         * decl.cs (DeclSpace.CurrentType): New public field.
12791
12792         * expression.cs (This.ResolveBase): If we have an
12793         `ec.TypeContainer.CurrentType', use it instead of
12794         `ec.ContainerType'.
12795
12796         * class.cs (TypeContainer.DefineType): If we're a generic type,
12797         create the `CurrentType' (unresolved).
12798         (TypeContainer.GenericType): New private field.
12799         (TypeContainer.DefineMembers): If we have a `CurrentType', resolve
12800         it and store it in `GenericType' before creating the MemberCache.
12801         (TypeContainer.GetMembers): If we have a `GenericType', call
12802         TypeManager.FindMembers() on it.
12803
12804         * interface.cs (Interface.GenericType): New private field.
12805         (Interface.DefineType): If we're a generic type, create the
12806         `CurrentType' (unresolved).
12807         (Interface.DefineMembers): If we have a `CurrentType', resolve it
12808         and store it in `GenericType' before creating the MemberCache.
12809         (Interface.GetMembers): If we have a `GenericType', call
12810         TypeManager.FindMembers() on it.
12811
12812 2004-01-22  Martin Baulig  <martin@ximian.com>
12813
12814         * cs-parser.jay (namespace_or_type_name): Return an Expression,
12815         not a QualifiedIdentifier.  This is what `type_name_expression'
12816         was previously doing.
12817         (type_name_expression): Removed; the code is now in
12818         `namespace_or_type_name'.
12819         (qualified_identifier): Removed, use `namespace_or_type_name'
12820         instead.
12821         (QualifiedIdentifier): Removed this class.      
12822
12823 2004-01-22  Martin Baulig  <martin@ximian.com>
12824
12825         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
12826         not a string as alias name.
12827
12828 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
12829
12830         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
12831         #52730 bug, and instead compute correctly the need to use a
12832         temporary variable when requesting an address based on the
12833         static/instace modified of the field and the constructor.
12834  
12835 2004-01-21  Martin Baulig  <martin@ximian.com>
12836
12837         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
12838         class and namespace before looking up aliases.  Fixes #52517.
12839
12840 2004-01-21  Martin Baulig  <martin@ximian.com>
12841
12842         * flowanalysis.cs (UsageVector.Merge): Allow variables being
12843         assinged in a 'try'; fixes exception4.cs.
12844
12845 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12846         * class.cs : Implemented parameter-less constructor for TypeContainer
12847
12848         * decl.cs: Attributes are now stored here. New property OptAttributes
12849
12850         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
12851
12852         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
12853
12854 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12855
12856         * typemanager.cs (CSharpSignature): Now reports also inner class name.
12857           (CSharpSignature): New method for indexer and property signature.
12858
12859 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12860
12861         * pending.cs (IsVirtualFilter): Faster implementation.
12862
12863 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12864
12865         * typemanager.cs: Avoid inclusion of same assembly more than once.
12866
12867 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12868
12869         * cs-parser.jay: Fixed problem where the last assembly attribute
12870           has been applied also to following declaration (class, struct, etc.)
12871           
12872 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
12873
12874         * class.cs: Added error CS0538, CS0539 reporting.
12875         Fixed crash on Microsoft runtime when field type is void.
12876
12877         * cs-parser.jay: Added error CS0537 reporting.
12878
12879         * pending.cs: Added error CS0535 reporting.
12880         Improved error report for errors CS0536, CS0534.
12881
12882 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
12883
12884         Merge a few bits from the Anonymous Method MCS tree.
12885
12886         * statement.cs (ToplevelBlock): New class for toplevel methods,
12887         will hold anonymous methods, lifted variables.
12888
12889         * cs-parser.jay: Create toplevel blocks for delegates and for
12890         regular blocks of code. 
12891
12892 2004-01-20  Martin Baulig  <martin@ximian.com>
12893
12894         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
12895         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
12896         and `NeedExplicitReturn'; added `IsLastStatement'.
12897         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
12898         have a `ReturnLabel' or we're not unreachable.
12899
12900         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
12901         child's reachability; don't just override ours with it.  Fixes
12902         #58058 (lluis's example).
12903         (FlowBranching): Added public InTryOrCatch(), InCatch(),
12904         InFinally(), InLoop(), InSwitch() and
12905         BreakCrossesTryCatchBoundary() methods.
12906
12907         * statement.cs (Return): Do all error checking in Resolve().
12908         Unless we are the last statement in a top-level block, always
12909         create a return label and jump to it.
12910         (Break, Continue): Do all error checking in Resolve(); also make
12911         sure we aren't leaving a `finally'.
12912         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
12913         statement in a top-level block.
12914         (Block.Flags): Added `IsDestructor'.
12915         (Block.IsDestructor): New public property.
12916
12917 2004-01-20  Martin Baulig  <martin@ximian.com>
12918
12919         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
12920
12921 2004-01-20  Martin Baulig  <martin@ximian.com>
12922
12923         * statement.cs (Statement.ResolveUnreachable): New public method.
12924         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
12925         (Block.Resolve): Resolve unreachable statements.
12926
12927 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
12928
12929         * expression.cs: We need to fix the case where we do
12930         not have a temp variable here.
12931
12932         * assign.cs: Only expression compound assignments need
12933         temporary variables.
12934
12935 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
12936
12937         * flowanalysis.cs: Reduce memory allocation in a few ways:
12938           - A block with no variables should not allocate a bit
12939             vector for itself.
12940           - A method with no out parameters does not need any tracking
12941             for assignment of the parameters, so we need not allocate
12942             any data for it.
12943           - The arrays:
12944                 public readonly Type[] VariableTypes;
12945                 public readonly string[] VariableNames;
12946             Are redundant. The data is already stored in the variable
12947             map, so we need not allocate another array for it.
12948           - We need to add alot of checks for if (params | locals) == null
12949             due to the first two changes.
12950
12951 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
12952
12953         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
12954         implement IMemoryLocation, we store a copy on a local variable and
12955         take the address of it.  Patch from Benjamin Jemlich
12956
12957         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
12958         to use a special "type_name_expression" rule which reduces the
12959         number of "QualifiedIdentifier" classes created, and instead
12960         directly creates MemberAccess expressions.
12961
12962 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
12963
12964         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
12965         that fixes #52853.  Null literal assignment to ValueType
12966
12967         * class.cs (MethodData.Emit): Instead of checking the name of the
12968         method to determine if its a destructor, create a new derived
12969         class from Method called Destructor, and test for that.  
12970
12971         * cs-parser.jay: Create a Destructor object instead of a Method.  
12972
12973         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
12974
12975         Fixes: 52933
12976
12977 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
12978
12979         * expression.cs (Binary.ResolveOperator): Perform an implicit
12980         conversion from MethodGroups to their delegate types on the
12981         Addition operation.
12982
12983         * delegate.cs: Introduce a new class DelegateCreation that is the
12984         base class for `NewDelegate' and `ImplicitDelegateCreation',
12985         factor some code in here.
12986
12987         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
12988         conversion from MethodGroups to compatible delegate types. 
12989
12990         * ecore.cs (Expression.Resolve): Do not flag error 654
12991         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
12992         we allow conversions from MethodGroups to delegate types now.
12993
12994         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
12995         assignments in v2 either.
12996
12997 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
12998
12999         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
13000         static read-only fields in ctors.
13001
13002         Applied patch from Benjamin Jemlich 
13003
13004         * expression.cs (UnaryMutator): Avoid leaking local variables. 
13005
13006 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
13007
13008         * cs-tokenizer.cs (IsCastToken): Allow the various native types
13009         here to return true, as they can be used like this:
13010
13011                 (XXX) int.MEMBER ()
13012
13013         Fixed 49836 and all the other dups
13014
13015 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
13016
13017         * driver.cs: Implement /win32res and /win32icon.
13018
13019 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
13020
13021         * cs-parser.jay: Add a rule to improve error handling for the
13022         common mistake of placing modifiers after the type.
13023
13024 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
13025
13026         * cs-parser.jay (interface_event_declaration): Catch
13027         initialization of events on interfaces, and report cs0068
13028
13029         * cs-parser.jay (interface_event_declaration): Catch
13030         initialization of events. 
13031
13032         * ecore.cs: Better report missing constructors.
13033
13034         * expression.cs (Binary.ResolveOperator): My previous bug fix had
13035         the error reporting done in the wrong place.  Fix.
13036
13037         * expression.cs (Binary.ResolveOperator): Catch the 
13038         operator + (E x, E y) error earlier, and later allow for implicit
13039         conversions in operator +/- (E e, U x) from U to the underlying
13040         type of E.
13041
13042         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
13043         52596, if the container class is abstract, the default constructor
13044         is protected otherwise its public (before, we were always public).
13045
13046         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
13047         fixed statement.
13048
13049         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
13050         Jemlich that fixes bug #52597, MCS was generating invalid code for
13051         idisposable structs.   Thanks to Ben for following up with this
13052         bug as well.
13053
13054 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
13055
13056         * driver.cs: Allow assemblies without code to be generated, fixes
13057         52230.
13058
13059 2004-01-07  Nick Drochak <ndrochak@gol.com>
13060
13061         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
13062
13063 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
13064
13065         * cs-parser.jay: Add rules to improve error reporting if fields or
13066         methods are declared at the namespace level (error 116)
13067
13068         * Add rules to catch event add/remove
13069
13070 2004-01-04  David Sheldon <dave-mono@earth.li>
13071
13072   * expression.cs: Added matching ")" to error message for 
13073   CS0077
13074
13075 2004-01-03 Todd Berman <tberman@gentoo.org>
13076
13077         * ecore.cs, attribute.cs:
13078         Applying fix from #52429.
13079
13080 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13081
13082         * ecore.cs, expression.cs, statement.cs:
13083         Total rewrite of how we handle branching. We
13084         now handle complex boolean expressions with fewer
13085         jumps. As well if (x == 0) no longer emits a ceq.
13086
13087         if (x is Foo) is much faster now, because we generate
13088         better code.
13089
13090         Overall, we get a pretty big improvement on our benchmark
13091         tests. The code we generate is smaller and more readable.
13092
13093         I did a full two-stage bootstrap. The patch was reviewed
13094         by Martin and Miguel.
13095
13096 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13097
13098         * cs-parser.jay: Make primary_expression not take a QI.
13099         we dont need this because the member_access rule covers
13100         us here. So we replace the rule with just IDENTIFIER.
13101
13102         This has two good effects. First, we remove a s/r conflict.
13103         Second, we allocate many fewer QualifiedIdentifier objects.
13104
13105 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13106
13107         * attribute.cs: Handle MarshalAs attributes as pseudo, and
13108         set the correct information via SRE. This prevents
13109         hanging on the MS runtime. Fixes #29374.
13110
13111 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
13112
13113         * convert.cs: correctly handle conversions to value types
13114         from Enum and ValueType as unboxing conversions.
13115
13116         Fixes bug #52569. Patch by Benjamin Jemlich.
13117
13118 2004-01-02  Ravi Pratap  <ravi@ximian.com>
13119
13120         * expression.cs (BetterConversion): Prefer int -> uint
13121         over int -> ulong (csc's behaviour). This fixed bug #52046.
13122
13123 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13124
13125         * decl.cs (MemberCache.FindMembers): now returns a
13126         MemberInfo [].
13127
13128         * typemanager.cs: In general, go with with ^^.
13129         (CopyNewMethods): take an IList.
13130         (RealMemberLookup): Only allocate an arraylist
13131         if we copy from two sets of methods.
13132
13133         This change basically does two things:
13134         1) Fewer array lists allocated due to CopyNewMethods.
13135         2) the explicit cast in MemberList costed ALOT.
13136
13137 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
13138
13139         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
13140         a hashtable to avoid needless string allocations when an identifier is
13141         used more than once (the common case).
13142
13143 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13144
13145         * pending.cs: MS's TypeBuilder.GetInterfaces ()
13146         is broken, it will not return anything. So, we
13147         have to use the information we have in mcs to
13148         do the task.
13149
13150         * typemanager.cs: Add a cache for GetInterfaces,
13151         since this will now be used more often (due to ^^)
13152
13153         (GetExplicitInterfaces) New method that gets the
13154         declared, not effective, interfaces on a type
13155         builder (eg, if you have interface IFoo, interface
13156         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
13157         { IBar }.
13158
13159         This patch makes MCS able to bootstrap itself on
13160         Windows again.
13161
13162 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
13163
13164         * expression.cs: Remove the Nop's that Miguel put
13165         in by mistake.
13166
13167 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13168
13169         * report.cs, codegen.cs: Give the real stack trace to
13170         the error when an exception is thrown.
13171
13172 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13173
13174         * decl.cs: only allocate hashtables for ifaces if 
13175         it is an iface!
13176
13177 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
13178
13179         * expression.cs: fix the error from cs0121-2.cs
13180         (a parent interface has two child interfaces that
13181         have a function with the same name and 0 params
13182         and the function is called through the parent).
13183
13184 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
13185
13186         * class.cs, rootcontext.cs, typmanager.cs: do not
13187         leak pointers.
13188
13189 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
13190
13191         * codegen.cs: remove stack for the ec flow branching.
13192         It is already a linked list, so no need.
13193
13194 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
13195
13196         * Makefile: Allow custom profiler here.
13197
13198 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13199
13200         * typemanager.cs (LookupType):
13201           - Use a static char [], because split takes
13202             a param array for args, so it was allocating
13203             every time.
13204           - Do not store true in a hashtable, it boxes.
13205
13206 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
13207
13208         * flowanalysis.cs: bytify common enums.
13209
13210 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13211
13212         * modifiers.cs: Add a new set of flags for the
13213         flags allowed on explicit interface impls.
13214         * cs-parser.jay: catch the use of modifiers in
13215         interfaces correctly.
13216         * class.cs: catch private void IFoo.Blah ().
13217
13218         All related to bug #50572.
13219
13220 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13221
13222         * decl.cs: Rewrite the consistant accessability checking.
13223         Accessability is not linear, it must be implemented in
13224         a tableish way. Fixes #49704.
13225
13226 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
13227
13228         * expression.cs: Handle negation in a checked context.
13229         We must use subtraction from zero. Fixes #38674.
13230
13231 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13232
13233         * class.cs: Ignore static void main in DLLs.
13234         * rootcontext.cs: Handle the target type here,
13235         since we are have to access it from class.cs
13236         * driver.cs: account for the above.
13237
13238 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
13239
13240         * report.cs: Give line numbers and files if available.
13241
13242 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
13243
13244         * driver.cs: Implement /addmodule.
13245
13246         * typemanager.cs:  Change 'modules' field so it now contains Modules not
13247         ModuleBuilders.
13248
13249 2003-12-20  Martin Baulig  <martin@ximian.com>
13250
13251         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
13252         (FieldBase.IsAssigned): Removed this field.
13253         (FieldBase.SetAssigned): New public method.
13254         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
13255
13256 2003-12-20  Martin Baulig  <martin@ximian.com>
13257
13258         * expression.cs (LocalVariableReference.DoResolve): Don't set
13259         `vi.Used' if we're called from DoResolveLValue().
13260
13261         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
13262         returns the usage vector it just merged into the current one -
13263         pass this one to UsageWarning().
13264         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
13265         of the `EmitContext', don't call this recursively on our children.
13266
13267 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
13268
13269         * driver.cs: Implement /target:module.
13270
13271 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
13272
13273         * support.cs (CharArrayHashtable): New helper class.
13274
13275         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
13276         char arrays, not strings, so we can avoid creating a string in
13277         consume_identifier if the identifier is a keyword.
13278
13279 2003-12-16  Martin Baulig  <martin@ximian.com>
13280
13281         * statement.cs (LocalInfo.Assigned): Removed this property.
13282         (LocalInfo.Flags): Removed `Assigned'.
13283         (LocalInfo.IsAssigned): New public method; takes the EmitContext
13284         and uses flow analysis.
13285         (Block.UsageWarning): Made this method private.
13286         (Block.Resolve): Call UsageWarning() if appropriate.
13287
13288         * expression.cs (LocalVariableReference.DoResolve): Always set
13289         LocalInfo.Used here.
13290
13291 2003-12-13  Martin Baulig  <martin@ximian.com>
13292
13293         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
13294         any value here; we're now using flow analysis to figure out
13295         whether a statement/block returns a value.
13296
13297 2003-12-13  Martin Baulig  <martin@ximian.com>
13298
13299         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
13300         working again.
13301         (FlowBranching.MergeFinally): Don't call
13302         `branching.CheckOutParameters()' here, this is called in
13303         MergeTopBlock().
13304         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
13305         when adding the `finally' vector.       
13306
13307 2003-12-13  Martin Baulig  <martin@ximian.com>
13308
13309         * flowanalysis.cs
13310         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
13311         actually work and also fix #48962.
13312
13313 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
13314
13315         * decl.cs: Do not check System.Object for nested types,
13316         since we know it does not have any. Big bang for buck:
13317
13318         BEFORE:
13319            Run 1:   8.35 seconds
13320            Run 2:   8.32 seconds
13321            corlib:  17.99 seconds
13322         AFTER:
13323            Run 1:   8.17 seconds
13324            Run 2:   8.17 seconds
13325            corlib:  17.39 seconds
13326
13327 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
13328
13329         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
13330         time we are returning 0 members, so we save alot here.
13331
13332 2003-12-11  Martin Baulig  <martin@ximian.com>
13333
13334         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
13335         `MergeChild()', also just take the `FlowBranching' as argument;
13336         call Merge() on it and return the result.
13337         (FlowBranching.Merge): We don't need to do anything if we just
13338         have one sibling.
13339
13340 2003-12-11  Martin Baulig  <martin@ximian.com>
13341
13342         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
13343         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
13344         Maurer for this idea.
13345
13346 2003-12-11  Martin Baulig  <martin@ximian.com>
13347
13348         * flowanalysis.cs (MergeResult): This class is now gone; we now
13349         use the `UsageVector' for this.  The reason for this is that if a
13350         branching just has one sibling, we don't need to "merge" them at
13351         all - that's the next step to do.
13352         (FlowBranching.Merge): We now return a `UsageVector' instead of a
13353         `MergeResult'.
13354
13355 2003-12-11  Martin Baulig  <martin@ximian.com>
13356
13357         Reworked flow analyis and made it more precise and bug-free.  The
13358         most important change is that we're now using a special `Reachability'
13359         class instead of having "magic" meanings of `FlowReturns'.  I'll
13360         do some more cleanups and optimizations and also add some more
13361         documentation this week.
13362
13363         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
13364         largely reworked this class.
13365         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
13366         the new `Reachability' class instead of having "magic" values here.
13367         (FlowBranching): We're now using an instance of `Reachability'
13368         instead of having separate `Returns', `Breaks' etc. fields.
13369
13370         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
13371         based on flow analysis; ignore the return value of block.Emit ().
13372
13373 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
13374
13375         * driver.cs typemanager.cs: Find the mono extensions to corlib even
13376         if they are private.
13377
13378 2003-12-09  Martin Baulig  <martin@ximian.com>
13379
13380         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
13381         call them directly on the UsageVector.
13382
13383 2003-12-09  Martin Baulig  <martin@ximian.com>
13384
13385         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
13386         Changed return type from `FlowReturns' to `Reachability'.
13387
13388 2003-12-09  Martin Baulig  <martin@ximian.com>
13389
13390         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
13391         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
13392         `Reachable' fields with a single `Reachability' one.
13393
13394 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13395
13396         * class.cs (FindMembers): Remove foreach's.
13397
13398         Bootstrap times:
13399
13400         BEFORE
13401                 Run 1:   8.74 seconds
13402                 Run 2:   8.71 seconds
13403
13404         AFTER
13405                 Run 1:   8.64 seconds
13406                 Run 2:   8.58 seconds
13407
13408
13409 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13410
13411         * cs-parser.jay:
13412         * gen-treedump.cs:
13413         * statement.cs:
13414         This patch does a few things:
13415                 1. EmptyStatement is now a singleton, so it is never reallocated.
13416                 2. All blah is EmptyStatement constructs have been changed to
13417                    blah == EmptyStatement.Value, which is much faster and valid
13418                    now that EmptyStatement is a singleton.
13419                 3. When resolving a block, rather than allocating a new array for
13420                    the non-empty statements, empty statements are replaced with
13421                    EmptyStatement.Value
13422                 4. Some recursive functions have been made non-recursive.
13423         Mainly the performance impact is from (3), however (1) and (2) are needed for
13424         this to work. (4) does not make a big difference in normal situations, however
13425         it makes the profile look saner.
13426
13427         Bootstrap times:
13428
13429         BEFORE
13430         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13431         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
13432         Total memory allocated: 56397 KB
13433
13434         AFTER
13435         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
13436         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
13437         Total memory allocated: 55666 KB
13438
13439 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13440
13441         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
13442         than the hashtable in a hashtable version
13443
13444         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
13445         we always end up concating a string. This results in a huge perf
13446         loss, because many strings have to be tracked by the GC. In this
13447         patch, we first use a hashtable that works with two keys, so that
13448         the strings do not need to be concat'ed.
13449
13450         Bootstrap times:
13451         BEFORE
13452                 Run 1:   8.74 seconds
13453                 Run 2:   8.71 seconds
13454
13455         AFTER
13456                 Run 1:   8.65 seconds
13457                 Run 2:   8.56 seconds
13458
13459 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
13460
13461         * Makefile: Add a new target `do-time' that does a quick and simple
13462         profile, leaving easy to parse output.
13463
13464 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
13465
13466         * codegen.cs (Init): Create the dynamic assembly with 
13467         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
13468
13469 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
13470
13471         * support.cs: Make the PtrHashtable use only one
13472         instance of its comparer.
13473
13474 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
13475
13476         * typemanager.cs: Fix lookup of GetNamespaces.
13477
13478 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
13479
13480         * expression.cs: Removed redundant line.
13481
13482         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
13483         ArrayLists, use for loops with bounds.  
13484
13485         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
13486         arraylist.
13487
13488         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
13489         arraylists, use for loop with bounds.
13490
13491         The above three changes give us a 0.071 second performance
13492         improvement out of 3.294 seconds down to 3.223.  On my machine
13493         the above changes reduced the memory usage by 1,387 KB during
13494         compiler bootstrap.
13495
13496         * cs-parser.jay (QualifiedIdentifier): New class used to represent
13497         QualifiedIdentifiers.  Before we created a new string through
13498         concatenation, and mostly later on, the result would be
13499         manipulated by DecomposeQI through string manipulation.
13500
13501         This reduced the compiler memory usage for bootstrapping from
13502         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
13503         compile times in 0.05 seconds.
13504
13505 2003-11-28  Dick Porter  <dick@ximian.com>
13506
13507         * support.cs: Do string compares with the Invariant culture.
13508
13509         * rootcontext.cs: 
13510         * gen-treedump.cs: 
13511         * expression.cs: 
13512         * driver.cs: 
13513         * decl.cs: 
13514         * codegen.cs: 
13515         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
13516         the comparison is done with the Invariant culture.
13517
13518 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
13519
13520         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
13521         GetEnumerator method.
13522
13523         (ProbeCollectionType): Iterate starting at the most specific type
13524         upwards looking for a GetEnumerator
13525
13526         * expression.cs: Shift count can be up to 31 for int/uint and 63
13527         for long/ulong.
13528
13529 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
13530
13531         * statement.cs (Block.LookupLabel): Also look for the label on the
13532         children blocks.  Use a hash table to keep track of visited
13533         nodes. 
13534
13535         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
13536         we actually did transform the other operand, otherwise fall back
13537         to the common codepath that casts to long.
13538
13539         * cs-tokenizer.cs: Use the same code pattern as the int case.
13540         Maybe I should do the parsing myself, and avoid depending on the
13541         Parse routines to get this done.
13542
13543 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
13544
13545         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13546         which fixes bug 51347.  This time test it.
13547
13548         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
13549         attributes for example can not tell the difference between these.
13550         The difference was only a syntax feature of the language. 
13551
13552         * attribute.cs: Apply attributes to delegates.
13553
13554         * delegate.cs: Call the apply attributes method.
13555
13556 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
13557
13558         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
13559         comparing 0 vs Byte.MinValue, not the value
13560
13561         (ImplicitConversionRequired): When reporting a conversion error,
13562         use error 31 to print out the constant error instead of the
13563         simpler 29.
13564
13565         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
13566         which fixes bug 51347.
13567
13568 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
13569
13570         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
13571         which fixes the -warnaserror command line option.
13572
13573 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
13574
13575         * cfold.cs (DoNumericPromotions): During constant folding of
13576         additions on UIntConstant, special case intconstants with
13577         IntConstants like we do on the expression binary operator. 
13578
13579 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
13580
13581         * convert.cs (ImplicitReferenceConversion): We were missing a case
13582         (System.Enum are not value types or class types, so we need to
13583         classify them separatedly).
13584
13585         * driver.cs: We do not support error 2007.
13586
13587 2003-11-12 Jackson Harper <jackson@ximian.com>
13588
13589         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
13590         system directory. Also use the full file name so users can
13591         libraries names mscorlib-o-tron.dll in a non system dir.
13592         
13593 2004-01-04  David Sheldon <dave-mono@earth.li>
13594
13595         * expression.cs: Added matching ")" to error message for CS0077.
13596
13597 2003-12-19  Martin Baulig  <martin@ximian.com>
13598
13599         * typemanager.cs (TypeManager.IsEqualGenericType): New public
13600         static method; see documentation in the method.
13601         (TypeManager.IsSubclassOrNestedChild): Allow IsEqualGenericType().
13602
13603         * convert.cs (Convert.ImplicitReferenceConversion,
13604         Convert.ImplicitReferenceConversionExists): Add support for
13605         generic type declarations; see gen-36.cs.
13606
13607 2003-12-19  Martin Baulig  <martin@ximian.com>
13608
13609         * pending.cs (Pending.InterfaceMethod): Use
13610         `Type.IsAssignableFrom()' instead of `=='.
13611
13612 2003-12-18  Martin Baulig  <martin@ximian.com>
13613
13614         * decl.cs (DeclSpace.AsAccessible): Check for array, pointer and
13615         byref types first.
13616
13617         * convert.cs (Convert.ImplicitStandardConversionExists): Use
13618         `expr_type.Equals (target_type)' instead of `=='.
13619
13620 2003-12-08  Martin Baulig  <martin@ximian.com>
13621
13622         * generics.cs (Constraints.Types): Removed.
13623         (Constraints.Resolve): Just resolve everything to TypeExpr's, not
13624         to Type's.
13625         (Constraints.ResolveTypes): New public method; resolves the
13626         TypeExpr's to Type's.
13627         (TypeParameter.Define): TypeBuilder.DefineGenericParameter() no
13628         longer takes the constraints.
13629         (TypeParameter.DefineMethod): Likewise.
13630         (TypeParameter.DefineType): New public method.  Calls
13631         `TypeBuilder/MethodBuilder.SetGenericParameterConstraints()' to set
13632         the constraints.
13633
13634 2003-12-08  Martin Baulig  <martin@ximian.com>
13635
13636         * convert.cs (Convert.ImplicitConversionStandard): Use
13637         `expr_type.Equals (target_type)' instead of `=='.
13638
13639 2003-12-08  Martin Baulig  <martin@ximian.com>
13640
13641         * typemanager.cs (TypeManager.GetReferenceType): Call
13642         `Type.MakeByRefType ()'.
13643
13644 2003-12-08  Martin Baulig  <martin@ximian.com>
13645
13646         * cs-parser.jay, cs-tokenizer.cs: `where' is not a keyword, it
13647         just has some special meaning in some situations.  For instance,
13648         it is allowed to use `where' as the name of a variable etc.
13649
13650 2003-12-04  Martin Baulig  <martin@ximian.com>
13651
13652         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13653         `Type.MakeArrayType()' for array types.
13654
13655 2003-11-18  Miguel de Icaza  <miguel@ximian.com>
13656
13657         * expression.cs (Invocation.VerifyArgumentsCompat): Remove
13658         debugging message.
13659
13660         (SizeOf.DoResolve): assign the `type_queried' field.  This gets
13661         corlib to compile.
13662
13663 2003-11-16  Martin Baulig  <martin@ximian.com>
13664
13665         * codegen.cs (EmitContext.IsGeneric): Removed.
13666
13667         * ecore.cs (SimpleName.ResolveAsTypeStep): Always call
13668         ResolveGeneric() on the DeclSpace.
13669
13670 2003-11-16  Martin Baulig  <martin@ximian.com>
13671
13672         * generic.cs (TypeArguments.Resolve):
13673         `Expression.ResolveAsTypeTerminal()' returns a TypeExpr; call
13674         `ResolveType()' on it to get the Type.
13675
13676 2003-11-15  Martin Baulig  <martin@ximian.com>
13677
13678         * generic.cs (ConstructedType.GetInterfaces): Override this.
13679
13680 2003-11-14  Martin Baulig  <martin@ximian.com>
13681
13682         * interface.cs (Interface.DefineType): Define all type parameters
13683         before adding the interfaces we inherit.
13684
13685 2003-11-11  Martin Baulig  <martin@ximian.com>
13686
13687         * generic.cs (ConstructedType.ResolveType): Always call
13688         `gt.BindGenericParameters (atypes)'; also if `args.HasTypeArguments'.
13689
13690 2003-11-10  Martin Baulig  <martin@ximian.com>
13691
13692         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
13693         (TypeManager.InitCoreTypes): Initialize them here, but instead of
13694         calling `ResolveType()' on them, directly assign their `Type'.
13695
13696 2003-11-08  Martin Baulig  <martin@ximian.com>
13697
13698         * generic.cs (ConstructedType): Override `IsClass' etc.
13699
13700 2003-11-08  Martin Baulig  <martin@ximian.com>
13701
13702         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
13703         return value and the `out parent' parameter.
13704         (TypeContainer.DefineType): Moved the CS0644 check into
13705         GetClassBases().  Don't pass the interface types to the
13706         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
13707         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
13708
13709         * ecore.cs (TypeExpr.IsAttribute): New property.
13710         (TypeExpr.GetInterfaces): New method.
13711
13712         * interface.cs (Interface.GetInterfaceTypeByName): Return a
13713         TypeExpr instead of a Type.
13714         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
13715         (Interface.DefineType): Don't pass the interface types to the
13716         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
13717         them later and then call `TypeBulider.AddInterfaceImplementation()'.
13718
13719         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
13720         instead of a `Type[]'.
13721         (TypeManager.RegisterBuilder): Likewise.
13722         (TypeManager.AddUserInterface): Likewise.
13723         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
13724         `Type[]' and also return a `TypeExpr[]'.
13725         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
13726
13727 2003-11-08  Martin Baulig  <martin@ximian.com>
13728
13729         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
13730         Expression.     
13731
13732 2003-11-08  Martin Baulig  <martin@ximian.com>
13733
13734         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
13735         TypeManager.ResolveExpressionTypes().
13736
13737         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
13738         instead of an Expression.
13739         (TypeExpr): This is now an abstract base class for `TypeExpression'.
13740         (TypeExpression): New public class; formerly known as `TypeExpr'.
13741
13742         * expression.cs (ComposedCast): Derive from TypeExpr.
13743
13744         * typemanager.cs (TypeManager.system_*_expr): These are now
13745         TypExpr's instead of Expression's.
13746         (TypeManager.ResolveExpressionTypes): New public static function;
13747         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
13748         of them.        
13749
13750 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
13751
13752         * expression.cs (New.DoResolve): Do not dereference value that
13753         might be a null return.
13754
13755         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
13756         sure that the constant value has the right type.  Fixes an
13757         unreported bug, similar to 50425.
13758
13759         * const.cs (Const.LookupConstantValue): Call
13760         ImplicitStandardConversionExists before doing a conversion to
13761         avoid havng the TypeManager.ChangeType do conversions.
13762
13763         Reduced the number of casts used
13764
13765         (Const.ChangeType): New routine to enable reuse of the constant
13766         type changing code from statement.
13767
13768         * typemanager.cs (ChangeType): Move common initialization to
13769         static global variables.
13770
13771         Fixes #50425.
13772
13773         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
13774         every value type to go through, even if it was void.  Fix that. 
13775
13776         * cs-tokenizer.cs: Use is_identifier_start_character on the start
13777         character of the define, and the is_identifier_part_character for
13778         the rest of the string.
13779
13780 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
13781
13782         * expression.cs (UnaryMutator.EmitCode): When I updated
13783         LocalVariableReference.DoResolve, I overdid it, and dropped an
13784         optimization done on local variable references.
13785
13786 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
13787
13788         * ecore.cs: Convert the return from Ldlen into an int.
13789
13790 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
13791
13792         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
13793         the accessibility, this is a special case for toplevel non-public
13794         classes (internal for instance).
13795
13796 2003-10-20  Nick Drochak <ndrochak@gol.com>
13797
13798         * ecore.cs: Fix typo and build.  Needed another right paren.
13799
13800 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
13801
13802         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
13803         `internal' case regular and protected, but not allowing protected
13804         to be evaluated later.  Bug 49840
13805
13806 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
13807
13808         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
13809         to kb.Nlast, and not the kb.nFirst to isolate the switch
13810         statement.
13811
13812         Extract the underlying type, so enumerations of long/ulong are
13813         treated like long/ulong.
13814
13815 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
13816
13817         * expression.cs (New): Overload the meaning of RequestedType to
13818         track the possible creation of the NewDelegate type, since
13819         DoResolve is invoked more than once for new constructors on field
13820         initialization.
13821
13822         See bugs: #48800 and #37014
13823
13824         * cs-parser.jay (declare_local_constants): Take an arraylist
13825         instead of a single constant.
13826
13827         (local_constant_declaration): It should take a
13828         constant_declarators, not a constant_declarator.  Fixes 49487
13829
13830         * convert.cs: Fix error report.
13831
13832 2003-10-13 Jackson Harper <jackson@ximian.com>
13833
13834         * typemanager.cs (TypeToCoreType): Add float and double this fixes
13835         bug #49611
13836         
13837 2003-11-03  Martin Baulig  <martin@ximian.com>
13838
13839         * expression.cs (ArrayAccess.GetStoreOpcode): Added
13840         `out bool has_type_arg'; if set, we need to pass the type to
13841         ig.Emit().
13842         (ArrayAccess.GetStoreOpcode, ArrayAccess.EmitLoadOpcode): Use
13843         Stelem_Any/Ldelem_Any for generic parameters.   
13844
13845 2003-11-02  Martin Baulig  <martin@ximian.com>
13846
13847         * expression.cs (Invocation.EmitCall): Use
13848         `TypeManager.IsValueType()' to check whether it's a value type.
13849         Don't set `struct_call' when calling a method on a type parameter.
13850
13851 2003-11-02  Martin Baulig  <martin@ximian.com>
13852
13853         * generics.cs (ConstructedType.Resolve): Renamed to ResolveType()
13854         and removed the TypeBuilder argument.
13855
13856         * typemanager.cs (TypeManager.IsValueType): Return
13857         `t.IsGenericParameter || t.IsValueType'.
13858
13859 2003-10-25  Martin Baulig  <martin@ximian.com>
13860
13861         * decl.cs (DeclSpace.ResolveType): If we're a ConstructedType,
13862         call ConstructedType.Resolve() on it.
13863
13864         * generic.cs (ConstructedType.Resolve): Set `type' on success.
13865
13866 2003-10-25  Martin Baulig  <martin@ximian.com>
13867
13868         * class.cs (TypeContainer.GetClassBases): Changed
13869         `out Type parent' into `out TypeExpr parent'.  Moved CS0644 and
13870         CS8214 reporting here.
13871         (TypeContainer.DefineType): GetClassBases() gives us a `TypeExpr'
13872         instead of a `Type' for our parent.  In case of a recursive
13873         declaration (see tests/gen-23.cs for an example), our parent is a
13874         ConstructedType and it doesn't have its type set.  So, first
13875         create our own TypeBuilder, then call constructed.Resolve() to get
13876         the parent's type and finally TypeBuilder.SetParent() it.
13877
13878         * ecore.cs (TypeExpr.Name): New public virtual property.
13879
13880         * generic.cs
13881         (ConstructedType): We're now a TypeExpr and not just an Expression.
13882         (ConstructedType.ResolveAsTypeStep): Don't resolve our type
13883         arguments here; this is done later.
13884         (ConstructedType.Resolve): New public method to resolve the type
13885         arguments and bind them.
13886
13887 2003-10-21  Martin Baulig  <martin@ximian.com>
13888
13889         * convert.cs: Use `TypeManager.IsValueType' instead of
13890         'type.IsValueType' everywhere.
13891
13892         * typemanager.cs (TypeManager.IsValueType): Return true for type
13893         parameters.  The reason for this is that we need to box a type
13894         parameter when converting it to a reference type.
13895
13896         * cs-parser.jay: Added support for default value expressions.
13897
13898         * generics.cs (DefaultValueExpression): New public class.       
13899
13900 2003-10-17  Martin Baulig  <martin@ximian.com>
13901
13902         * generic.cs (Constraints.Resolve): Take a DecpSpace instead of a
13903         TypeContainer so we can also use this for Interfaces.
13904         (TypeParameter.Resolve): Likewise.
13905
13906         * interface.cs (Interface.DefineType): Added support for generic
13907         interfaces.
13908
13909         * cs-parser.jay: Added support for generic structs and interfaces.
13910
13911 2003-10-17  Martin Baulig  <martin@ximian.com>
13912
13913         * generic.cs (GenericMemberAccess.DoResolve): We can now actually
13914         call generic methods :-)
13915
13916 2003-10-16  Martin Baulig  <martin@ximian.com>
13917
13918         * cs-parser.jay (namespace_or_type_name): Only create a
13919         GenericMemberAccess if we actually have type arguments.
13920
13921 2003-10-13  Martin Baulig  <martin@ximian.com>
13922
13923         * class.cs (Method.Define): If we're a generic method, call
13924         TypeBuilder.DefineGenericMethod () before resolving
13925         the parameters.
13926         (MethodData): Added .ctor which takes an additional MethodBuilder
13927         argument; this is used for generic methods.
13928         (MethodData.Define): Call `builder.SetGenericMethodSignature()' if
13929         we already have a MethodBuilder.
13930
13931 2003-10-10  Martin Baulig  <martin@ximian.com>
13932
13933         * class.cs (Method): Added .ctor which takes a `GenericMethod'
13934         instead of a `DeclSpace'.  This is used for generic methods.
13935
13936         * cs-parser.jay (method_header): Added support for generic
13937         methods; create a `GenericMethod' instance and pass it to the
13938         `Method's .ctor; it'll be used as the `DeclSpace' to lookup
13939         parameters and locals.
13940
13941         * decl.cs (DeclSpace.SetParameterInfo): Removed Location argument
13942         since we already have the location.  Check whether we're a generic
13943         type declaration or a generic method and create the correct type
13944         parameter.
13945
13946         * generic.cs (TypeParameter.DefineMethod): New public method.
13947         (GenericMethod): New public class; derives from DeclSpace and is
13948         used for generic methods.       
13949
13950 2003-10-09  Martin Baulig  <martin@ximian.com>
13951
13952         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
13953         to the .ctor.
13954         (MethodCore.DoDefineParameters): Removed the TypeContainer
13955         argument; use the DeclSpace which was passed to the .ctor instead.
13956         (MethodCore.CheckParameter): Take a DeclSpace instead of a
13957         TypeContainer; we only need a DeclSpace here.
13958
13959 2003-10-09  Martin Baulig  <martin@ximian.com>
13960
13961         * class.cs (MethodData): Added additional `DeclSpace ds' argument
13962         to the .ctor.
13963         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
13964         EmitContext's .ctor.    
13965
13966 2003-10-09  Martin Baulig  <martin@ximian.com>
13967
13968         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
13969         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
13970         AsAccessible(), moved them as well.
13971
13972         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
13973
13974 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
13975
13976         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
13977         generation for >=, as spotted by Paolo, bug 48679.  
13978         Patch from David Waite.
13979
13980         * cs-tokenizer.cs: Add handling for #pragma.
13981
13982         * cs-parser.jay: Allow for both yield and yield return in the
13983         syntax.  The anti-cobolization of C# fight will go on!
13984
13985         * class.cs (TypeBuilder.DefineType): Catch error condition here
13986         (Parent.DefineType erroring out and returning null).
13987
13988         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
13989         coping with enumerations variables, we were mistakenly processing
13990         them as a regular value type instead of built-in types.  Fixes the
13991         bug #48063
13992
13993         * typemanager.cs (IsBuiltinOrEnum): New method.
13994
13995 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
13996
13997         * cs-parser.jay: Upgrade: yield now needs the return clause.
13998
13999 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
14000
14001         * cs-parser.jay : Renamed yyName to yyNames related to jay.
14002
14003 2003-09-29  Martin Baulig  <martin@ximian.com>
14004
14005         * typemanager.cs (TypeManager.GetMethodFlags): Added support for
14006         inflated generic methods.
14007
14008         * generics.cs (ConstructedType): Distinguish between open and
14009         closed constructed types; correctly resolve the arguments.
14010
14011 2003-09-22  Martin Baulig  <martin@ximian.com>
14012
14013         * generic.cs (ConstructedType.ResolveAsTypeCheck): Check whether
14014         all type arguments meet their constraints.
14015
14016 2003-09-19  Martin Baulig  <martin@ximian.com>
14017
14018         * decl.cs (MemberCache.SetupCacheForInterface): Take a
14019         `MemberCache parent' argument.  Normally, an interface doesn't
14020         have a parent type except System.Object, but we use this in gmcs
14021         for generic type parameters.
14022
14023 2003-09-18  Martin Baulig  <martin@ximian.com>
14024
14025         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
14026         on `type.IsInterface'; don't check whether the type has a parent
14027         to determine whether it's an interface.
14028
14029 2003-09-17  Martin Baulig  <martin@ximian.com>
14030
14031         * generic.cs (ConstructedType.ToString): Always use `name' as the
14032         type name.
14033
14034 2003-09-15  Martin Baulig  <martin@ximian.com>
14035
14036         * cs-parser.jay: Fix grammar wrt. type_parameter_constraints.
14037
14038         * generic.cs (Constraints.Resolve): New public method; this is
14039         called to resolve the constraint types and to check whether all
14040         the constraints are correct.
14041         (Constraints.Types): New public property.
14042         (TypeParameter.Resolve): New public method; resolves all the
14043         type's constraints.
14044
14045         * class.cs (TypeContainer.DefineType): Call
14046         TypeParameter.Resolve() before actually defining the type.
14047
14048 2003-09-15  Martin Baulig  <martin@ximian.com>
14049
14050         * class.cs (TypeContainer.DefineType): Added an error flag to
14051         avoid reporting duplicate CS0146's ("class definition is
14052         circular.").
14053
14054         * driver.cs (Driver.MainDriver): Abort if
14055         RootContext.ResolveTree() reported any errors.
14056
14057 2003-09-07  Martin Baulig  <martin@ximian.com>
14058
14059         * report.cs (Error, Warning): Added overloaded versions which take
14060         a `params object[] args' and call String.Format().
14061
14062 2003-09-07  Martin Baulig  <martin@ximian.com>
14063
14064         * decl.cs (DeclSpace..ctor): Don't call
14065         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
14066         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
14067         (DeclSpace.RecordDecl): New method.
14068
14069         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
14070
14071 2003-09-02  Ravi Pratap  <ravi@ximian.com>
14072
14073         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
14074         value attributes to be applied to ParameterBuilders.
14075
14076         * class.cs (MethodCore.LabelParameters): Make static and more
14077         generic so that it can be used from other places - like interface
14078         methods, for instance.
14079
14080         * interface.cs (Interface.Emit): Call LabelParameters before
14081         emitting attributes on the InterfaceMethod.
14082
14083 2003-09-07  Martin Baulig  <martin@ximian.com>
14084
14085         * generic.cs (ConstructedType.ResolveAsTypeStep): Report a CS8217
14086         if the number of type parameters doesn't match.
14087
14088 2003-09-04  Martin Baulig  <martin@ximian.com>
14089
14090         * expression.cs (ComposedCast.ResolveAsTypeStep): Added support
14091         for arrays of generic type params (ie. `!0[]').
14092
14093 2003-09-04  Martin Baulig  <martin@ximian.com>
14094
14095         * class.cs (TypeContainer.AsAccessible): Ignore generic parameters
14096         for the moment.
14097
14098 2003-09-04  Martin Baulig  <martin@ximian.com>
14099
14100         * decl.cs (DeclSpace.LookupGeneric): New method.
14101         (DeclSpace.CheckAccessLevel): Ignore generic parameters for the
14102         moment.
14103
14104         * generic.cs (TypeParameterExpr): Take a TypeParameter as
14105         argument, not just a string.
14106         (TypeParameter.Define): New public method; this is called to
14107         actually define the generic parameter; after this, you can use the
14108         new `Type' property to get the type.
14109
14110 2003-09-04  Martin Baulig  <martin@ximian.com>
14111
14112         * decl.cs (DeclSpace.SetParameterInfo): The `constraints' argument
14113         is now an ArrayList; initialize the result of the `TypeParameters'
14114         property here.
14115         (DeclSpace.GetGenericData): Removed.
14116         (DeclSpace.LookupGeneric): Temporarily removed; we need to
14117         implement this in a different way.
14118         (DeclSpace.GetTypeParameters): Removed; there's now a
14119         `TypeParameters' property.
14120         (DeclSpace.TypeParameters): New public property.
14121
14122         * generic.cs (Constraints): Make this class public.
14123         (TypeParameter): New public class.
14124
14125 2003-09-04  Martin Baulig  <martin@ximian.com>
14126
14127         * decl.cs (DeclSpace.GetTypeParameters): New method to return the
14128         generic parameters.
14129
14130         * class.cs (TypeContainer.DefineType): Call
14131         TypeBuilder.DefineGenericParameter () on all generic parameters if
14132         this is a generic type.
14133
14134 2003-08-28  Martin Baulig  <martin@ximian.com>
14135
14136         * sample-stack.il: Compile this with ilasm: "ilasm /dll
14137         sample-stack.il".
14138
14139         * sample-hello.cs: Compile this with gmcs: "gmcs
14140         /r:sample-stack.dll sample-hello.cs".
14141
14142 2003-08-28  Martin Baulig  <martin@ximian.com>
14143
14144         * generic.cs (ConstructedType.ResolveAsTypeStep): Actually bind
14145         the parameters to the generic type.
14146
14147 2003-08-28  Martin Baulig  <martin@ximian.com>
14148
14149         * cs-tokenizer.cs (parse_less_than): Also allow all builtin types.
14150
14151 2003-08-28  Martin Baulig  <martin@ximian.com>
14152
14153         * cs-parser.jay (opt_type_argument_list): Use
14154         `OP_GENERICS_LT type_arguments OP_GENERICS_GT'.
14155         (primary_expression): Replace `qualified_identifier' with `type_name'.
14156         (type_parameter_list): Use `OP_GENERICS_LT type_parameters OP_GENERICS_GT'.
14157
14158         * cs-tokenizer.cs (is_punct): When reading a `<', invoke a custom
14159         parser to check whether it is syntactically a type parameter list;
14160         return OP_GENERICS_LT/OP_GENERICS_GT instead of OP_LT/OP_GT in
14161         this case.
14162
14163 2003-08-26  Martin Baulig  <martin@ximian.com>
14164
14165         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
14166         resolving aliases; fixes #47927.
14167
14168 2003-08-26  Martin Baulig  <martin@ximian.com>
14169
14170         * statement.cs (Using.DoResolve): This is internally emitting a
14171         try/finally clause, so we need to set ec.NeedExplicitReturn if we
14172         do not always return.  Fixes #47681.
14173
14174 2003-08-26  Martin Baulig  <martin@ximian.com>
14175
14176         * decl.cs (MemberCore): Moved WarningNotHiding(),
14177         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
14178         into MemberBase.
14179         (AdditionResult): Make this nested in DeclSpace.
14180         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
14181         argument; call NamespaceEntry.Define() unless we're nested in a
14182         class or struct.
14183
14184         * namespace.cs (Namespace.DefineName): New public function.  This
14185         is called from DeclSpace's .ctor to add 
14186         (Namespace.Lookup): Include DeclSpaces in the lookup.
14187
14188         * class.cs (Operator): Derive from MemberBase, not MemberCore.
14189
14190         * const.cs (Const): Derive from MemberBase, not MemberCore.     
14191
14192 2003-08-25  Martin Baulig  <martin@ximian.com>
14193
14194         * convert.cs (Convert.ExplicitReferenceConversion): When
14195         converting from an interface type to a class, unbox if the target
14196         type is a struct type.  Fixes #47822.
14197
14198 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14199
14200         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
14201         #47854.
14202
14203 2003-08-22  Martin Baulig  <martin@ximian.com>
14204
14205         * class.cs (TypeManager.DefineType): When defining a nested type,
14206         call DefineType() on our parent; fixes #47801.
14207
14208 2003-08-22  Martin Baulig  <martin@ximian.com>
14209
14210         * class.cs (MethodData.Define): While checking if a method is an
14211         interface implementation, improve the test a bit more to fix #47654.
14212
14213 2003-08-22  Martin Baulig  <martin@ximian.com>
14214
14215         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
14216         correctly; fixes #47722.
14217
14218 2003-08-22  Martin Baulig  <martin@ximian.com>
14219
14220         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
14221         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
14222
14223         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
14224
14225 2003-08-22  Martin Baulig  <martin@ximian.com>
14226
14227         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
14228         can only be assigned in static constructors.  Fixes #47161.
14229
14230 2003-08-22  Martin Baulig  <martin@ximian.com>
14231
14232         Rewrote and improved the flow analysis code.
14233
14234         * flowbranching.cs (FlowBranching): Make this class abstract.
14235         (FlowBranching.CreateBranching): New static function to create a
14236         new flow branching.
14237         (FlowBranchingBlock, FlowBranchingException): New classes.
14238         (FlowBranching.UsageVector.Type): New public readonly field.
14239         (FlowBranching.UsageVector.Breaks): Removed the setter.
14240         (FlowBranching.UsageVector.Returns): Removed the setter.
14241         (FlowBranching.UsageVector): Added Break(), Return(),
14242         NeverReachable() and Throw() methods to modify the reachability.
14243         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
14244         done by FlowBranching.Merge().
14245         (FlowBranching.UsageVector.MergeChild): New method; merges the
14246         merge result into the current vector.
14247         (FlowBranching.Merge): New abstract method to merge a branching.
14248
14249 2003-08-12  Martin Baulig  <martin@ximian.com>
14250
14251         * expression.cs (Indirection.CacheTemporaries): Create the
14252         LocalTemporary with the pointer type, not its element type.
14253
14254 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
14255
14256         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
14257         token was a keyword or not.
14258
14259         Add `error' options where an IDENTIFIER was expected;  Provide
14260         CheckToken and CheckIdentifierToken convenience error reporting
14261         functions. 
14262
14263         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
14264
14265         * decl.cs: Rename `NamespaceEntry Namespace' public field into
14266         NameSpaceEntry NameSpaceEntry.
14267
14268         (LookupInterfaceOrClass): Avoid creating a full qualified name
14269         from namespace and name: avoid doing lookups when we know the
14270         namespace is non-existant.   Use new Tree.LookupByNamespace which
14271         looks up DeclSpaces based on their namespace, name pair.
14272
14273         * driver.cs: Provide a new `parser verbose' to display the
14274         exception thrown during parsing.  This is turned off by default
14275         now, so the output of a failure from mcs is more graceful.
14276
14277         * namespace.cs: Track all the namespaces defined in a hashtable
14278         for quick lookup.
14279
14280         (IsNamespace): New method
14281
14282 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
14283
14284         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
14285         we know that we need to concatenate (full typename can never be
14286         null). 
14287
14288         * class.cs: ditto.
14289
14290         * statement.cs: Use a bitfield;  Do not initialize to null things
14291         which are done by the constructor by default.
14292
14293         * cs-parser.jay: bug fix, parameter was 4, not 3.
14294
14295         * expression.cs: Just use the property;
14296
14297         * statement.cs: No need for GetVariableInfo method.
14298
14299 2003-08-08  Martin Baulig  <martin@ximian.com>
14300
14301         * flowanalysis.cs (FlowReturns): This is now nested in the
14302         `FlowBranching' class.
14303         (MyBitVector): Moved this here from statement.cs.
14304         (FlowBranching.SiblingType): New enum type.
14305         (FlowBranching.CreateSibling): Added `SiblingType' argument.
14306
14307 2003-08-07  Martin Baulig  <martin@ximian.com>
14308
14309         * flowanalysis.cs (FlowBranchingType): This is now nested in the
14310         `FlowBranching' class and called `BranchingType'.
14311
14312 2003-08-07  Martin Baulig  <martin@ximian.com>
14313
14314         * flowanalysis.cs: Moved all the control flow analysis code into
14315         its own file.
14316
14317 2003-08-07  Martin Baulig  <martin@ximian.com>
14318
14319         * assign.cs (Assign.DoResolve): `target' must either be an
14320         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
14321         #37319.
14322
14323 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
14324
14325         * expression.cs (BinaryMethod): This kind of expression is created by the
14326         Binary class if it determines that the operator has to be handled
14327         by a method.
14328
14329         (BinaryDelegate): This kind of expression is created if we are
14330         dealing with a + or - operator on delegates.
14331
14332         (Binary): remove method, argumetns, and DelegateOperator: when
14333         dealing with methods, 
14334
14335         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
14336
14337         * statement.cs (Block): use bitfields for the three extra booleans
14338         we had in use.   Remove unused topblock parameter.
14339
14340         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
14341
14342         * assign.cs: Drop extra unneeded tests.
14343
14344 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
14345
14346         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
14347
14348         * statement.cs (Foreach): Use VariableStorage instead of
14349         LocalBuilders.   
14350
14351         * codegen.cs (VariableStorage): New class used by clients that
14352         require a variable stored: locals or fields for variables that
14353         need to live across yield.
14354
14355         Maybe provide a convenience api for EmitThis+EmitLoad?
14356
14357         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
14358         these bad boys.
14359
14360 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
14361
14362         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
14363         RemapParameterLValue): New methods that are used to turn a
14364         precomputed FieldInfo into an expression like this:
14365
14366                 instance.FieldInfo
14367
14368         The idea is to use this instead of making LocalVariableReference
14369         have more than one meaning.
14370
14371         * cs-parser.jay: Add error production to BASE.
14372
14373         * ecore.cs: Deal with TypeManager.GetField returning null, which
14374         is now a valid return value.
14375
14376         (FieldExprNoAddress): New expression for Fields whose address can
14377         not be taken.
14378
14379         * expression.cs (LocalVariableReference): During the resolve
14380         phases, create new expressions if we are in a remapping context.
14381         Remove code that dealt with remapping here.
14382
14383         (ParameterReference): same.
14384
14385         (ProxyInstance): New expression, like the `This' expression, but
14386         it is born fully resolved.  We know what we are doing, so remove
14387         the errors that are targeted to user-provided uses of `this'.
14388
14389         * statement.cs (Foreach): our variable is now stored as an
14390         Expression;  During resolution, follow the protocol, dont just
14391         assume it will return this.
14392
14393 2003-08-06  Martin Baulig  <martin@ximian.com>
14394
14395         * support.cs (SeekableStreamReader.cs): New public class.
14396
14397         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
14398         SeekableStreamReader instead of the normal StreamReader.
14399
14400 2003-08-04  Martin Baulig  <martin@ximian.com>
14401
14402         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
14403         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
14404         deambiguate casts and delegate invocations.
14405         (parenthesized_expression): Use the new tokens to ensure this is
14406         not a cast of method invocation.
14407
14408         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
14409         when reading a `)' and Deambiguate_CloseParens () was previously
14410         called.
14411
14412         * expression.cs (ParenthesizedExpression): New class.  This is
14413         just used for the CS0075 test.
14414         (Binary.DoResolve): Check for CS0075.   
14415
14416 2003-07-29  Ravi Pratap  <ravi@ximian.com>
14417
14418         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
14419         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
14420         reference comparison.
14421
14422         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
14423         examine the ReturnType for equality - this is necessary in the
14424         cases of implicit and explicit operators whose signature also
14425         includes the return type.
14426
14427 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
14428
14429         * namespace.cs: Cache the result of the namespace computation,
14430         instead of computing it every time.
14431
14432 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14433
14434         * decl.cs: Use a global arraylist that we reuse over invocations
14435         to avoid excesive memory consumption.  Reduces memory usage on an
14436         mcs compile by one meg (45 average).
14437
14438         * typemanager.cs (LookupTypeReflection): In .NET pointers are
14439         private, work around that.
14440
14441 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
14442
14443         * literal.cs (IntLiteral): Define Zero and One static literals. 
14444
14445         * cs-parser.jay (integer_literal): use static literals to reduce
14446         memory usage for the most used literals (0, 1 and -1).  211kb
14447         reduced in memory usage.
14448
14449         Replace all calls to `new ArrayList' with `new
14450         ArrayList(4)' which is a good average number for most allocations,
14451         and also requires only 16 bytes of memory for its buffer by
14452         default. 
14453
14454         This reduced MCS memory usage in seven megabytes for the RSS after
14455         bootstrapping.
14456
14457 2003-07-28  Ravi Pratap  <ravi@ximian.com>
14458
14459         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
14460         handle params methods the correct way by forming only one
14461         applicable set with params and normal methods in them. Earlier we
14462         were looking at params methods only if we found no normal methods
14463         which was not the correct thing to do.
14464
14465         (Invocation.BetterFunction): Take separate arguments indicating
14466         when candidate and the best method are params methods in their
14467         expanded form.
14468
14469         This fixes bugs #43367 and #46199.
14470
14471         * attribute.cs: Documentation updates.
14472
14473         (CheckAttribute): Rename to CheckAttributeTarget.
14474         (GetValidPlaces): Rename to GetValidTargets.
14475
14476         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
14477         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
14478
14479         Fixes bug #44468.
14480
14481 2003-07-28  Miguel de Icaza  <miguel@ximian.com>
14482
14483         * codegen.cs: Compute IsGeneric correctly.
14484
14485         * cs-parser.jay: Introduce OP_GENERIC_LT for the grammar ambiguity
14486         resolution. 
14487
14488         Bring back (temporarily) OP_LEFT_SHIFT, OP_RIGHT_SHIFT,
14489         OP_SHIFT_RIGHT_ASSIGN, OP_SHIFT_LEFT_ASSIGN.  There were too many
14490         regressions, and I was chasing more bugs than I required.
14491
14492         * interface.cs: Use expressions for base type names (like classes
14493         and structs have been doing for a while now), and resolve that.
14494         This patch should probably go into head as well.
14495
14496         This makes it one less user of FindType.
14497
14498 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
14499
14500         This compiler can not self host currently.  Need to fix that.
14501         
14502         * Makefile: compile to `gmcs.exe'
14503
14504         * driver.cs: Turn on v2 by default on gmcs.
14505
14506         * generic.cs (ConstructedType): Does no longer take a container
14507         type argument;  That will be taken care of later.
14508
14509         (ConstructedType.DoResolve, ConstructedType.ResolveAsTypeStep):
14510         Use SimpleName to resolve for now, so we can continue the work on
14511         the parser, until we get Type.GetType that understands generics.
14512
14513         (ConstructedType.ToString): Implement
14514
14515         (TypeArguments.Resolve): Resolve the child expressions as types. 
14516         
14517         * cs-parser.jay: Rename interface_constraints to
14518         type_parameter_constraints
14519
14520         (namespace_or_type_name): Only use constructed types for the basic
14521         construction, we will deal with identifier<...> later.
14522
14523         (type/type_name): No longer call DecomposeQI, as
14524         namespace_or_type_name is always decoded now.
14525         
14526 2003-07-22  Ravi Pratap  <ravi@ximian.com>
14527
14528         * expression.cs (Invocation.OverloadResolve): Follow the spec more
14529         closely: we eliminate methods in base types when we have an
14530         applicable method in a top-level type.
14531
14532         Please see section 14.5.5.1 for an exact description of what goes
14533         on. 
14534
14535         This fixes bug #45127 and a host of other related to corlib compilation.
14536
14537         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
14538         array is the method corresponding to the top-level type (this is
14539         because of the changes made to icall.c) so we change this
14540         accordingly.
14541
14542         (MethodGroupExpr.Name): This too.
14543
14544         * typemanager.cs (GetElementType): New method which does the right
14545         thing when compiling corlib. 
14546
14547         * everywhere: Make use of the above in the relevant places.
14548
14549 2003-07-22  Martin Baulig  <martin@ximian.com>
14550
14551         * cs-parser.jay (invocation_expression): Moved
14552         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
14553         `cast_expression', but create a InvocationOrCast which later
14554         resolves to either an Invocation or a Cast.
14555
14556         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
14557         method; call this before EmitStatement() to make sure that this
14558         expression can be used as a statement.
14559
14560         * expression.cs (InvocationOrCast): New class; resolves to either
14561         an Invocation or a Cast.
14562
14563         * statement.cs (StatementExpression): Call ResolveStatement() on
14564         the ExpressionStatement before emitting it.
14565
14566 2003-07-21  Martin Baulig  <martin@ximian.com>
14567
14568         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
14569         `ref' and `out' attributes match; fixes #46220.
14570         (MemberAccess.ResolveMemberAccess): You can't reference a type
14571         through an expression; fixes #33180.
14572         (Indexers.GetIndexersForType): Don't return the indexers from
14573         interfaces the class implements; fixes #46502.
14574
14575 2003-07-21  Martin Baulig  <martin@ximian.com>
14576
14577         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
14578         CS0661 checks; fixes bug #30442.
14579
14580 2003-07-21  Martin Baulig  <martin@ximian.com>
14581
14582         * decl.cs (AdditionResult): Added `Error'.
14583
14584         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
14585
14586         * typemanager.cs (TypeManager.ChangeType): Catch exceptions; makes
14587         cs0031.cs actually work.
14588
14589  2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14590  
14591         * cs-parser.jay (namespace_name): do not use
14592         namespace_or_type_name, use qualified_identifier, because
14593         namespace_or_type_name will soon return a composed expression
14594         instead of a string.
14595  
14596         (namespace_or_type_name): Instead of returning a string, now this
14597         production returns an expression.
14598  
14599         * codegen.cs (EmitContext): Setup IsGeneric property based on
14600         whether our DeclSpace is generic, our the method is generic.
14601  
14602         * modifier.cs (Modifiers.METHOD_GENERIC): New definition, use if
14603         the method is generic.
14604  
14605         * cs-parser.jay (type_arguments, opt_type_argument_list,
14606         type_parameters, type_parameter_list, opt_type_parameter_list,
14607         type_parameter,, opt_type_parameter_constraints_clauses,
14608         type_parameter_constraints_clauses,
14609         type_parameter_constraint_clause, type_parameter_constraint,
14610         interface_constraints): Add new production
14611  
14612         * decl.cs (DeclSpace): IsGeneric, flag to track whether this
14613         DeclSpace is generic or not.
14614  
14615         (DeclSpace.SetParameterInfo): New routine, used to set the
14616         parameter info for a type.
14617  
14618         (DeclSpace.LookupGeneric): Lookups a name, and if it is a generic,
14619         returns a GenericTypeExpr
14620  
14621         * ecore.cs (SimpleName.ResolveAsTypeStep): If our container is
14622         generic, lookup the generic argument.
14623  
14624         * attribute.cs: Do not allow TypeParameterExpressions in
14625         Attributes.
14626  
14627         * class.cs: Do not allow the Main method to be defined in a
14628         Generic container.
14629  
14630         * expression.cs (SizeOf): Do not allow generic types to be used as
14631         arguments to sizeof.
14632  
14633         * typemanager.cs (IsGeneric): Wrapper for Reflection when we have
14634         it: whether a type is generic or not.  Only works for types we are
14635         currently building for now.
14636         
14637 2003-07-20  Martin Baulig  <martin@ximian.com>
14638
14639         * namespace.cs: Fixed that bug which caused a crash when compiling
14640         the debugger's GUI.
14641
14642 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
14643
14644         * typemanager.cs (LookupTypeReflection): Never expose types which
14645         are NotPublic, NestedPrivate, NestedAssembly, or
14646         NestedFamANDAssem.  We used to return these, and later do a check
14647         that would report a meaningful error, but the problem is that we
14648         would not get the real match, if there was a name override.
14649
14650 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
14651
14652         * namespace.cs (Namespace, Name): Do not compute the namespace
14653         name dynamically, compute it in the constructor.  This reduced
14654         memory usage by 1697 KB.
14655
14656         * driver.cs: Use --pause to pause at the end.
14657
14658 2003-07-17  Peter Williams  <peter@newton.cx>
14659
14660         * Makefile: Change the name of the test target so that it doesn't
14661         conflict with the recursive test target.
14662
14663 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
14664
14665         * expression.cs (LocalVariableReference.Emit, EmitAssign,
14666         AddressOf): Do not use EmitThis, that was wrong, use the actual
14667         this pointer.
14668
14669 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
14670
14671         * class.cs (MethodData.Define): While checking if a method is an
14672         interface implementation, improve the test: If we are not public
14673         (use new test here: use the computed MethodAttributes directly,
14674         instead of the parsed modifier flags) check if the `implementing'
14675         method comes from an interface or not.
14676
14677         * pending.cs (VerifyPendingMethods): Slightly better error
14678         message.
14679
14680         * makefile: add test target that does the mcs bootstrap.
14681
14682 2003-07-16  Ravi Pratap  <ravi@ximian.com>
14683
14684         * interface.cs (Define): Do nothing here since there are no
14685         members to populate etc. Move the attribute emission out of here
14686         since this was just totally the wrong place to put it. Attribute
14687         application happens during the 'Emit' phase, not in the 'Define'
14688         phase.
14689
14690         (Emit): Add this method and move the attribute emission here
14691
14692         * rootcontext.cs (EmitCode): Call the Emit method on interface
14693         types too.
14694
14695 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14696
14697         * expression.cs (OverloadResolve): Report error only if Location
14698         is not 'Null' which means that there was a probe going on.
14699
14700 2003-07-14  Martin Baulig  <martin@ximian.com>
14701
14702         * expression.cs (ConditionalLogicalOperator): New public class to
14703         implement user defined conditional logical operators.
14704         This is section 14.11.2 in the spec and bug #40505.
14705
14706 2003-07-14  Martin Baulig  <martin@ximian.com>
14707
14708         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
14709
14710 2003-07-14  Martin Baulig  <martin@ximian.com>
14711
14712         * codegen.cs (EmitContext.InFixedInitializer): New public field.
14713
14714         * ecore.cs (IVariable.VerifyFixed): New interface method.
14715
14716         * expression.cs (Unary.ResolveOperator): When resolving the `&'
14717         operator, check whether the variable is actually fixed.  Fixes bug
14718         #36055.  Set a variable definitely assigned when taking its
14719         address as required by the spec.
14720
14721         * statement.cs (LocalInfo.IsFixed): New field.
14722         (LocalInfo.MakePinned): Set `IsFixed' to true.
14723
14724 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
14725
14726         * attribute.cs (Attribute.Resolve): While doing a Member lookup
14727         for .ctors, ensure that we only ask for members declared in the
14728         attribute type (BindingFlags.DeclaredOnly).
14729
14730         Fixes bug #43632.
14731
14732         * expression.cs (Error_WrongNumArguments): Report error 1501
14733         correctly the way CSC does.
14734
14735 2003-07-13  Martin Baulig  <martin@ximian.com>
14736
14737         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
14738         lookup on the fully qualified name, to make things like "X.X" work
14739         where "X.X" is a fully qualified type name, but we also have a
14740         namespace "X" in the using list.  Fixes #41975.
14741
14742 2003-07-13  Martin Baulig  <martin@ximian.com>
14743
14744         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
14745         function. If we're a CompoundAssign, we need to create an embedded
14746         CompoundAssign, not an embedded Assign.
14747         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
14748         Fixes #45854.
14749
14750 2003-07-13  Martin Baulig  <martin@ximian.com>
14751
14752         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
14753         work to fix bug #46088.
14754
14755 2003-07-13  Ravi Pratap <ravi@ximian.com>
14756
14757         * class.cs (Operator.Emit): Do not emit attributes here - it is
14758         taken care of by the Method class that we delegate too. This takes
14759         care of bug #45876.
14760
14761 2003-07-10  Martin Baulig  <martin@ximian.com>
14762
14763         * expression.cs (TypeOfVoid): New class.
14764         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
14765
14766 2003-07-10  Martin Baulig  <martin@ximian.com>
14767
14768         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
14769         bug #35957.
14770
14771 2003-07-10  Martin Baulig  <martin@ximian.com>
14772
14773         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
14774         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
14775
14776         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
14777
14778         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
14779
14780 2003-07-10  Martin Baulig  <martin@ximian.com>
14781
14782         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
14783         of decimal.  Fixes #42850.
14784
14785         NOTE: I also fixed the created byte blob, but this doesn't work on
14786         the MS runtime and csc never produces any byte blobs for decimal
14787         arrays.
14788
14789 2003-07-10  Martin Baulig  <martin@ximian.com>
14790
14791         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
14792         structs; fixes #32068.
14793         (Block.AddChildVariableNames): Fixed #44302.
14794
14795 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14796
14797         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
14798
14799 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14800
14801         * attribute.cs: And this test is onger needed.
14802
14803 2003-07-08  Martin Baulig  <martin@ximian.com>
14804
14805         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
14806         inaccessible types.  Fixes #36313.
14807
14808         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
14809
14810         * namespace.cs (NamespaceEntry): Create implicit entries for all
14811         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
14812         implicit entries for N1.N2 and N1.
14813
14814 2003-07-08  Martin Baulig  <martin@ximian.com>
14815
14816         Rewrote the handling of namespaces to fix a lot of the issues
14817         wrt. `using' aliases etc.
14818
14819         * namespace.cs (Namespace): Splitted this class into a
14820         per-assembly `Namespace' and a per-file `NamespaceEntry'.
14821
14822         * typemanager.cs (TypeManager.IsNamespace): Removed.
14823         (TypeManager.ComputeNamespaces): Only compute namespaces from
14824         loaded assemblies here, not the namespaces from the assembly we're
14825         currently compiling.
14826
14827 2003-07-08  Martin Baulig  <martin@ximian.com>
14828
14829         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
14830
14831 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14832
14833         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
14834         already fixed it.  
14835
14836         I thought about the memory savings here, but LookupTypeReflection
14837         is used under already very constrained scenarios.  Compiling
14838         corlib or mcs only exposes one hit, so it would not really reduce
14839         any memory consumption.
14840
14841 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
14842
14843         * typemanager.cs: fixes bug #45889 by only adding public types from
14844         other assemblies to the list of known types.
14845
14846 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
14847
14848         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
14849         on the type we resolved.
14850
14851 2003-07-05  Martin Baulig  <martin@ximian.com>
14852
14853         * pending.cs (PendingImplementation.ParentImplements): Don't
14854         create the proxy if the parent is abstract.
14855
14856         * class.cs (TypeContainer.DefineIndexers): Process explicit
14857         interface implementations first.  Fixes #37714.
14858
14859 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
14860
14861         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
14862         defined recursively;  but since we modify the input parameters
14863         (left is set to `this' temporarily), we reset this value if the
14864         left_is_explicit is false, which gives the original semantics to
14865         the code.  
14866
14867         * literal.cs (NullPointer): new class used to represent a null
14868         literal in a pointer context.
14869
14870         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
14871         type is a pointer, use a NullPointer object instead of a
14872         NullLiteral.   Closes 43687
14873
14874         (ExplicitConversion): Convert pointer values using
14875         the conv opcode to the proper type.
14876
14877         * ecore.cs (New): change ValueTypeVariable property into a method,
14878         that returns whether the valuetype is suitable for being used.
14879
14880         * expression.cs (Binary.DoNumericPromotions): Only return if we
14881         the int constant was a valid uint, and we can return both left and
14882         right as uints.  If not, we continue processing, to trigger the
14883         type conversion.  This fixes 39018.
14884
14885         * statement.cs (Block.EmitMeta): During constant resolution, set
14886         the CurrentBlock property on the emitcontext, so that we resolve
14887         constants propertly.
14888
14889 2003-07-02  Martin Baulig  <martin@ximian.com>
14890
14891         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
14892         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
14893
14894         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
14895         than emitting it here.
14896
14897         * statement.cs: Fixed some more flow analysis bugs.
14898
14899 2003-07-02  Martin Baulig  <martin@ximian.com>
14900
14901         * class.cs (MethodData.Define): When implementing interface
14902         methods, set Final unless we're Virtual.
14903
14904         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
14905         check work for interface methods.
14906
14907 2003-07-01  Martin Baulig  <martin@ximian.com>
14908
14909         * ecore.cs (EmitContext.This): Replaced this property with a
14910         GetThis() method which takes a Location argument.  This ensures
14911         that we get the correct error location for a CS0188.
14912
14913 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
14914
14915         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
14916         ImplicitStandardConversion.
14917
14918         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
14919
14920 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
14921
14922         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
14923         optimization.
14924
14925 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
14926
14927         * class.cs (Constructor.Define): Turn off initlocals for unsafe
14928         constructors.
14929
14930         (MethodData.Define): Turn off initlocals for unsafe methods.
14931
14932 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
14933
14934         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
14935         complete;  Fixes #37521.
14936
14937         * delegate.cs: Use Modifiers.TypeAttr to compute the
14938         TypeAttributes, instead of rolling our own.  This makes the flags
14939         correct for the delegates.
14940
14941 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
14942
14943         * class.cs (Constructor.Define): Set the private flag for static
14944         constructors as well.
14945
14946         * cs-parser.jay (statement_expression): Set the return value to
14947         null, to avoid a crash when we catch an error.
14948
14949 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
14950
14951         * cs-parser.jay: Applied patch from Jackson that adds support for
14952         extern and unsafe modifiers to destructor declarations.
14953
14954         * expression.cs: Report error 21 if the user is trying to index a
14955         System.Array.
14956
14957         * driver.cs: Add an error message, suggested by the bug report.
14958
14959         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
14960         if we do not have a ": this ()" constructor initializer.  Fixes 45149
14961
14962 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
14963
14964         * namespace.cs: Add some information to reduce FAQs.
14965
14966 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
14967
14968         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
14969         underlying enumeration types.  Fixes #43915.
14970
14971         * expression.cs: Treat ushort/short as legal values to be used in
14972         bitwise operations.
14973
14974 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
14975
14976         * delegate.cs: transfer custom attributes for paramenters from
14977         the delegate declaration to Invoke and BeginInvoke.
14978
14979 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
14980
14981         * attribute.cs: handle custom marshalers and emit marshal info
14982         for fields, too.
14983
14984 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
14985
14986         * makefile.gnu: Added anonymous.cs to the compiler sources.
14987
14988 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
14989
14990         * iterators.cs: Change the name of the proxy class to include two
14991         underscores.
14992
14993         * cs-parser.jay: Update grammar to include anonymous methods.
14994
14995         * anonymous.cs: new file.
14996
14997 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
14998
14999         * class.cs (Field.Define): Add missing test for pointers and
15000         safety. 
15001
15002 2003-05-27  Ravi Pratap  <ravi@ximian.com>
15003
15004         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
15005         we use the stobj opcode.
15006
15007         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
15008         since it wasn't the correct fix. 
15009
15010         It still is puzzling that we are required to use stobj for IntPtr
15011         which seems to be a ValueType.
15012
15013 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
15014
15015         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
15016         during regular simple name resolution.   Now, the trick is that
15017         instead of returning for processing the simplename, we do a
15018         TypeManager.LookupType (ie, a rooted lookup as opposed to a
15019         contextual lookup type).   If a match is found, return that, if
15020         not, return for further composition.
15021
15022         This fixes long-standing 30485.
15023
15024         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
15025         using the address to initialize an object, do an Stobj instead of
15026         using the regular Stelem.
15027
15028         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
15029         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
15030         Because if we are a BaseIndexerAccess that value will be true.
15031         Fixes 43643.
15032
15033         * statement.cs (GotoCase.Resolve): Return after reporting an
15034         error, do not attempt to continue. 
15035
15036         * expression.cs (PointerArithmetic.Emit): If our operand is a
15037         long, convert our constants to match the operand before
15038         multiplying.  Convert to I type before adding.   Fixes 43670.
15039
15040 2003-05-14  Ravi Pratap  <ravi@ximian.com>
15041
15042         * enum.cs (ImplicitConversionExists) : Rename to
15043         ImplicitEnumConversionExists to remove ambiguity. 
15044
15045         * ecore.cs (NullCast): New type of cast expression class which
15046         basically is very similar to EmptyCast with the difference being
15047         it still is a constant since it is used only to cast a null to
15048         something else
15049         (eg. (string) null)
15050
15051         * convert.cs (ImplicitReferenceConversion): When casting a null
15052         literal, we return a NullCast.
15053
15054         * literal.cs (NullLiteralTyped): Remove - I don't see why this
15055         should be around anymore.
15056
15057         The renaming (reported was slightly wrong). Corrections:
15058
15059         ConvertImplicitStandard -> ImplicitConversionStandard
15060         ConvertExplicitStandard -> ExplicitConversionStandard
15061
15062         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
15063         before passing them in !
15064
15065         * convert.cs (ImplicitConversionStandard): When comparing for
15066         equal expr and target types, ensure that expr is not a
15067         NullLiteral.
15068
15069         In general, we must not be checking (expr_type ==
15070         target_type) in the top level conversion methods
15071         (ImplicitConversion, ExplicitConversion etc). This checking is
15072         done in the methods that they delegate to.
15073
15074 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
15075
15076         * convert.cs: Move Error_CannotConvertType,
15077         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
15078         ImplicitNumericConversion, ImplicitConversionExists,
15079         ImplicitUserConversionExists, StandardConversionExists,
15080         FindMostEncompassedType, FindMostSpecificSource,
15081         FindMostSpecificTarget, ImplicitUserConversion,
15082         ExplicitUserConversion, GetConversionOperators,
15083         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
15084         TryImplicitIntConversion, Error_CannotConvertImplicit,
15085         ConvertImplicitRequired, ConvertNumericExplicit,
15086         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
15087         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
15088         its own file.
15089
15090         Perform the following renames:
15091
15092         StandardConversionExists -> ImplicitStandardConversionExists
15093         ConvertImplicit -> ImplicitConversion
15094         ConvertImplicitStandard -> ImplicitStandardConversion
15095         TryImplicitIntConversion -> ImplicitIntConversion
15096         ConvertImplicitRequired -> ImplicitConversionRequired
15097         ConvertNumericExplicit -> ExplicitNumericConversion
15098         ConvertReferenceExplicit -> ExplicitReferenceConversion
15099         ConvertExplicit -> ExplicitConversion
15100         ConvertExplicitStandard -> ExplicitStandardConversion
15101
15102 2003-05-19  Martin Baulig  <martin@ximian.com>
15103
15104         * statement.cs (TypeInfo.StructInfo): Made this type protected.
15105         (TypeInfo): Added support for structs having structs as fields.
15106
15107         * ecore.cs (FieldExpr): Implement IVariable.
15108         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
15109         VariableInfo for the field.
15110
15111 2003-05-18  Martin Baulig  <martin@ximian.com>
15112
15113         * expression.cs (This.DoResolve): Report a CS0027 if we're
15114         emitting a field initializer.
15115
15116 2003-05-18  Martin Baulig  <martin@ximian.com>
15117
15118         * expression.cs (This.ResolveBase): New public function.
15119         (This.DoResolve): Check for CS0188.
15120
15121         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
15122         This.Resolve().
15123
15124         * ecore.cs (MethodGroupExpr.DoResolve): Set the
15125         `instance_expression' to null if we don't have any non-static
15126         methods.
15127
15128 2003-05-18  Martin Baulig  <martin@ximian.com>
15129
15130         Reworked the way how local variables and parameters are handled by
15131         the flow analysis code.
15132
15133         * statement.cs (TypeInfo, VariableMap): New public classes.
15134         (VariableInfo): New public class.  This is now responsible for
15135         checking whether a variable has been assigned.  It is used for
15136         parameters and local variables.
15137         (Block.EmitMeta): Take the InternalParameters as argument; compute
15138         the layout of the flow vectors here.
15139         (Block.LocalMap, Block.ParameterMap): New public properties.
15140         (FlowBranching): The .ctor doesn't get the InternalParameters
15141         anymore since Block.EmitMeta() now computes the layout of the flow
15142         vector.
15143         (MyStructInfo): This class is now known as `StructInfo' and nested
15144         in `TypeInfo'; we don't access this directly anymore.
15145
15146         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
15147         property and removed IsAssigned(), IsFieldAssigned(),
15148         SetAssigned() and SetFieldAssigned(); we now call them on the
15149         VariableInfo so we don't need to duplicate this code everywhere.
15150
15151         * expression.cs (ParameterReference): Added `Block block' argument
15152         to the .ctor.
15153         (LocalVariableReference, ParameterReference, This): The new
15154         VariableInfo class is now responsible for all the definite
15155         assignment stuff.
15156
15157         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
15158         IsParameterAssigned, SetParameterAssigned): Removed.
15159
15160 2003-05-18  Martin Baulig  <martin@ximian.com>
15161
15162         * typemanager.cs (InitCoreTypes): Try calling
15163         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
15164         the 3-args-version.  Corlib now also needs our `void_type'.
15165         (GetMethod): Added overloaded version which takes an optional
15166         `bool report_errors' to allow lookups of optional methods.
15167
15168 2003-05-12  Martin Baulig  <martin@ximian.com>
15169
15170         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
15171         only used for locals and not for parameters.
15172
15173 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
15174
15175         * support.cs (InternalParameters.ParameterType): Return the
15176         ExternalType of the parameter.
15177
15178         * parameter.cs (Parameter.ExternalType): drop the two arguments,
15179         they were unused.
15180
15181 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
15182
15183         * class.cs (MethodData.Define): Do not set the `newslot' on
15184         interface members, if they are also flagged as "override".
15185
15186         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
15187         better code for ++i and i++.  This only works for static fields
15188         and local variables.
15189
15190         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
15191         want to pull the DeclSpace out of the builder_to_declspace instead
15192         of the TypeBuilder (like in TypeContainer.FindMembers).
15193
15194         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
15195         instead of LookupTypeContainer.  Fixes the crash on .NET for
15196         looking up interface members.
15197
15198         * const.cs: Create our own emit context during the Definition
15199         stage, so that constants are evaluated in the proper context, when
15200         a recursive definition happens.
15201
15202 2003-05-11  Martin Baulig  <martin@ximian.com>
15203
15204         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
15205         new block for a switch section.
15206         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
15207         the adding/lookup in the switch block.  Fixes #39828.
15208
15209 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
15210
15211         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
15212         functionality: I needed to convert the data after I had performed
15213         the add/sub operation into the operands type size.
15214
15215         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
15216         pass the type for the box operation, otherwise the resulting
15217         object would have been of type object.
15218
15219         (BoxedCast): Add constructor to specify the type to box as.
15220
15221 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
15222
15223         * iterators.cs: I was reusing the `count' variable inadvertently,
15224         take steps to not allow this to happen.
15225
15226 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
15227
15228         * attribute.cs (Attribute.Resolve): Params attributes are encoded
15229         by creating an array at the point where the params starts and
15230         putting all those arguments there, then adjusting the size of the
15231         array.
15232
15233 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
15234
15235         * expression.cs (New.AddressOf): Implement interface
15236         IMemoryLocation.  This is used when the `new' operator is used in
15237         the context of an invocation to a method on a value type.
15238
15239         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
15240         example. 
15241
15242         * namespace.cs: Also check the using aliases here.
15243
15244         * driver.cs: Move the test for using validity after the types have
15245         been entered, so we do a single pass that also includes the using
15246         aliases. 
15247
15248         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
15249         in the regular case.   CreateSiblingForFinally is doing extra
15250         error checking.
15251
15252         * attribute.cs (GetAttributeArgumentExpression): Store the result
15253         on an out value, and use the return value to indicate failure
15254         instead of using null (which is a valid return for Constant.GetValue).
15255
15256         * statement.cs: Perform the analysis flow for the increment
15257         portion after the statement, because this will be the real flow of
15258         execution.  Fixes #42385
15259
15260         * codegen.cs (EmitContext.EmitArgument,
15261         EmitContext.EmitStoreArgument): New helper functions when the
15262         RemapToProxy flag is set.
15263
15264         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
15265         function.
15266
15267         Add support for remapping parameters. 
15268
15269         * iterators.cs: Propagate parameter values;  Store parameter
15270         values in the proxy classes.
15271
15272 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
15273
15274         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
15275         need a proxy reference;  I do not know what I was thinking
15276
15277         * cs-parser.jay (constructor_initializer): catch another error,
15278         and display nice message.
15279
15280         (field_declaration): catch void field declaration
15281         to flag a better error. 
15282
15283         * class.cs (MemberBase.CheckBase): Report an error instead of a
15284         warning if a new protected member is declared in a struct. 
15285         (Field.Define): catch the error of readonly/volatile.
15286
15287         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
15288
15289         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
15290         volatile variable is taken
15291
15292 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
15293
15294         * statement.cs (Fixed.Resolve): Report an error if we are not in
15295         an unsafe context.
15296
15297 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
15298
15299         * typemanager.cs: reuse the code that handles type clashes for
15300         delegates and enumerations.
15301
15302         * class.cs (Report28): Always report.
15303
15304         * expression.cs (EncodeAsAttribute): Allow nulls here.
15305
15306 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
15307
15308         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
15309         the functionality for testing whether an expression is valid for
15310         an attribute here.  Also handle the case of arrays of elements
15311         being stored. 
15312
15313         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
15314         encoding a linear array into an array of objects that are suitable
15315         to be passed to an CustomAttributeBuilder.
15316
15317         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
15318
15319         * ecore.cs: (FieldExpr): Handle field remapping here.
15320
15321         * iteratators.cs: Pass the instance variable (if the method is an
15322         instance method) to the constructors, so we can access the field
15323         variables on the class.
15324
15325         TODO: Test this with structs.  I think the THIS variable on
15326         structs might have to be a pointer, and not a refenrece
15327
15328 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
15329
15330         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
15331         local variables to fields in a proxy class.
15332
15333         * iterators.cs (PopulateProxy): Rename our internal fields to
15334         <XXX>.  
15335         Create a <THIS> field if we are an instance method, so we can
15336         reference our parent container variables.
15337         (MapVariable): Called back from the EmitContext code to enter a
15338         new variable to field mapping into the proxy class (we just create
15339         a FieldBuilder).
15340
15341         * expression.cs
15342         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
15343         for using the remapped locals to fields.
15344
15345         I placed the code here, because that gives the same semantics to
15346         local variables, and only changes the Emit code.
15347
15348         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
15349         statements inside iterators.
15350         (VariableInfo): Add a FieldBuilder for the cases when we are
15351         remapping local variables to fields in a proxy class
15352
15353         * ecore.cs (SimpleNameResolve): Avoid testing two times for
15354         current_block != null.
15355
15356         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
15357         not cope with strings, as it has been moved to the
15358         TableSwitchEmit.  Fixed bug in switch generation.
15359
15360         * expression.cs (New.DoResolve): Provide more context for the user
15361         when reporting an error.
15362
15363         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
15364         pointers. 
15365
15366         * expression.cs (MemberAccess.DoResolve): When we get a type back,
15367         check the permissions for it.  Note than in a type-resolution
15368         context the check was already present in DeclSpace.ResolveType,
15369         but was missing from the MemberAccess.
15370
15371         (ArrayCreation.CheckIndices): warn if the user has
15372         more nested levels of expressions, but there are no more
15373         dimensions specified.  Avoids crash on bug 41906.
15374
15375 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
15376
15377         * statement.cs (Block): replace Implicit bool, for a generic
15378         flags.   
15379         New flag: `Unchecked'.  This is used during the EmitMeta phase
15380         (which is out-of-line with the regular Resolve/Emit process for a
15381         statement, as this is done ahead of time, but still gets a chance
15382         to call constant resolve).
15383
15384         (Block.Flags): new enum for adding a new flag.
15385
15386         (Block.EmitMeta): track the state of unchecked.
15387
15388         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
15389         to enable constant resolution to work there as well.
15390
15391 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
15392
15393         * typemanager.cs (ienumerable_type): Also look up
15394         System.Collections.IEnumerable. 
15395
15396 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
15397
15398         TODO: Test more than one conditional per method.
15399
15400         * class.cs (Indexer.Define): Report the location where the user is
15401         referencing the unsupported feature.
15402
15403         (MethodData): Overload the use of `conditionals' to
15404         minimize the creation of needless ArrayLists.   This saves roughly
15405         212kb on my machine.
15406
15407         (Method): Implement the new IIteratorContainer interface.
15408         (Method.SetYields): Implement the method by setting the ModFlags
15409         to contain METHOD_YIELDS.
15410
15411         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
15412         which just got set to null.
15413
15414         * iterators.cs: New file.
15415
15416         (Yield, YieldBreak): New statements.
15417
15418         * statement.cs (Return.Resolve): Flag an error if we are used in
15419         an iterator method.
15420
15421         * codegen.cs (InIterator): New flag set if the code is being
15422         compiled in an iterator method.
15423
15424         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
15425         internal modifier, and we just use it to avoid adding extra
15426         fields, as this is seldom used.  
15427
15428         * cs-parser.jay: Add yield_statement (yield and yield break).
15429
15430         * driver.cs: New flag -v2 to turn on version 2 features. 
15431
15432         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
15433         hashtable when v2 is enabled.
15434
15435 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
15436
15437         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
15438         there is already a namespace defined with this name.
15439
15440         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
15441         people upgraded their corlibs.
15442
15443         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
15444         always use fully qualified types, no need to use the compiler
15445         front end.
15446
15447         (TypeManager.IsNamespace): Use binarysearch.
15448
15449         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
15450         AddDelegate): I did not quite use the new IsValid API properly: I
15451         have to pass the short-name and the fullname.  I was passing only
15452         the basename instead of the fullname sometimes. 
15453
15454         (TypeContainer.DefineType): call NamespaceClash.
15455
15456         * interface.cs (Interface.DefineType): use NamespaceClash before
15457         defining the type.
15458
15459         * delegate.cs (Delegate.DefineType): use NamespaceClash before
15460         defining the type.
15461
15462         * enum.cs: (Enum.DefineType): use NamespaceClash before
15463         defining the type.
15464
15465         * typemanager.cs (: 3-line patch that gives us some tasty 11%
15466         speed increase.  First, use the negative_hits cache when we get a
15467         negative.  Second, add the type with its full original name
15468         instead of the new . and + encoded name (reflection uses + to
15469         separate type from a nested type).  Use LookupTypeReflection
15470         directly which bypasses the type->name hashtable (that we already
15471         know does not contain the type.
15472
15473         * decl.cs (DeclSpace.ResolveTypeExpr): track the
15474         location/container type. 
15475
15476         * driver.cs: When passing utf8, use directly the UTF8Encoding.
15477
15478 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
15479
15480         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
15481
15482         * delegate.cs (NewDelegate.Resolve): Test whether an instance
15483         method is being referenced in the method group from a static
15484         context, and report error 120 if so.
15485
15486         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
15487         Error118. 
15488
15489         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
15490         is created, we create the A namespace).
15491
15492         * cs-parser.jay: A namespace also introduces a DeclarationFound.
15493         Fixes #41591
15494
15495 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
15496
15497         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
15498         invocation to ModuleBuilder.GetType with the same values will
15499         return a new type instance, so we need to cache its return
15500         values. 
15501
15502         * expression.cs (Binary.ResolveOperator): Only allow the compare
15503         operators on enums if they are of the same type.
15504
15505         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
15506         types of ValueType on their own case.  Before we were giving them
15507         the same treatment as objects.
15508
15509         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
15510         fullname.  Short name is used to compare against container name.
15511         Fullname is used to check against defined namespace names.
15512
15513         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
15514         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
15515
15516         (Method.CheckBase): Call parent.
15517         (MemberBase.CheckBase): Check for protected members on sealed
15518         classes.
15519         (PropertyBase.CheckBase): Call parent.
15520         (Field.Define): Call parent.
15521
15522         * report.cs: Negative error codes are now mapped to 8000 - code,
15523         so that the display is render more nicely.
15524
15525         * typemanager.cs: Do not use try/catch, instead report a regular
15526         error. 
15527
15528         (GetPointerType, GetReferenceType): These methods provide
15529         mechanisms to obtain the T* and T& from a T.  We had the code
15530         previously scattered around the code base, and it also used
15531         TypeManager.LookupType that would go through plenty of caches.
15532         This one goes directly to the type source.
15533
15534         In some places we did the Type.GetType followed by
15535         ModuleBuilder.GetType, but not in others, so this unifies the
15536         processing as well.
15537
15538         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
15539         statements now that we have namespace information.
15540
15541         * typemanager.cs (IsNamespace): New method, returns whether the
15542         string presented is a namespace or not.
15543
15544         (ComputeNamespaces): New public entry point, computes the list of
15545         available namespaces, using the GetNamespaces API call in Mono, or
15546         the slower version in MS.NET.   
15547
15548         Now before we start the semantic analysis phase, we have a
15549         complete list of namespaces including everything that the user has
15550         provided.
15551
15552         Deleted old code to cache namespaces in .nsc files.
15553
15554 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
15555
15556         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
15557         class/struct location definition Location for the implicit
15558         constructor location.
15559
15560         (Operator.Define): Use the location of the operator for the
15561         implicit Method definition.
15562
15563         (Constructor.Emit): use the constructor location for the implicit
15564         base initializer constructor.
15565
15566         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
15567         and the Expression class now contains two new methods:
15568
15569         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
15570         isolate type lookup from the rest of the resolution process.
15571
15572         Since we use Expressions to hold type definitions due to the way
15573         we parse the input we have historically overloaded Resolve to
15574         perform the Type lookups if a special flag is passed.  Now this is
15575         eliminated and two methods take their place. 
15576
15577         The differences in the two methods between xStep and xTerminal is
15578         that xStep is involved in our current lookup system that uses
15579         SimpleNames to compose a name, while xTerminal is used just to
15580         catch the case where the simplename lookup failed.
15581
15582 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
15583
15584         * expression.cs (ResolveMemberAccess): Remove redundant code.
15585         TypeExpr expressions are always born fully resolved.
15586
15587         * interface.cs (PopulateMethod): Do not lookup the types twice.
15588         We were doing it once during SemanticAnalysis and once during
15589         PopulateMethod.
15590
15591         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
15592         in local variable type definitions, were being returned as a
15593         SimpleName (we decomposed everything into a string), that is
15594         because primary_expression was being used instead of a type in the
15595         grammar (reduce/reduce conflicts).
15596
15597         The part that was wrong is that we converted the expression into a
15598         string (an oversimplification in one hand, compounded with primary
15599         expressions doing string concatenation).
15600
15601         So things like:
15602
15603         A.B.C [] x;
15604
15605         Would return "A.B.C[]" as a SimpleName.  This stopped things like
15606         using clauses from working on this particular context.  And a type
15607         was being matched directly against "A.B.C[]".
15608
15609         We now use the correct approach, and allow for ComposedCast to be
15610         part of the unary expression.  So the "A.B.C []" become a composed
15611         cast of "A.B.C" (as a nested group of MemberAccess with a
15612         SimpleName at the end) plus the rank composition "[]". 
15613
15614         Also fixes 35567
15615
15616 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
15617
15618         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
15619         for the access level checking.
15620
15621         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
15622         `TypeContainer container', because I kept getting confused when I
15623         was debugging this code.
15624
15625         * expression.cs (Indexers): Instead of tracking getters/setters,
15626         we now track them in parallel.  We create one arraylist less, but
15627         most importantly it is possible now for the LValue code to find a
15628         matching get for a set.
15629
15630         (IndexerAccess.DoResolveLValue): Update the code.
15631         GetIndexersForType has been modified already to extract all the
15632         indexers from a type.  The code assumed it did not.
15633
15634         Also make the code set the correct return type for the indexer.
15635         This was fixed a long time ago for properties, but was missing for
15636         indexers.  It used to be void_type.
15637
15638         (Binary.Emit): Test first for doubles instead of
15639         floats, as they are more common.
15640
15641         (Binary.EmitBranchable): Use the .un version of the branch opcodes
15642         when dealing with floats and the <=, >= operators.  This fixes bug
15643         #39314 
15644
15645         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
15646         to load the array value by emitting a load on the foreach variable
15647         type.  This was incorrect.  
15648
15649         We now emit the code to load an element using the the array
15650         variable type, and then we emit the conversion operator.
15651
15652         Fixed #40176
15653
15654 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
15655
15656         * attribute.cs: Avoid allocation of ArrayLists in the common case.
15657
15658 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
15659
15660         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
15661         test for protection before we test for signatures. 
15662
15663         (MethodSignature.ToString): implement.
15664
15665         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
15666         to the case where we reduced into a LongConstant.
15667
15668         * decl.cs (CheckAccessLevel): If the type is an array, we can not
15669         depend on whether the information is acurrate, because the
15670         Microsoft runtime will always claim that the array type is public,
15671         regardless of the real state.
15672
15673         If the type is a pointer, another problem happens: the type is
15674         reported as non-public in Microsoft.  
15675
15676         In both cases we have to call CheckAccessLevel recursively with
15677         the underlying type as the argument to be tested.
15678
15679 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
15680
15681         * assign.cs (Assign.Emit): If we are dealing with a compound
15682         assignment expression, we should use the code path that stores the
15683         intermediate result in a temporary value.  This fixes #40903.
15684
15685         *expression.cs (Indirection.ToString): Provide ToString method for
15686         debugging. 
15687
15688 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
15689
15690         * class.cs: Null out fields holding references to Block objects so
15691         they can be garbage collected.
15692
15693         * expression.cs (OverloadResolve): Remove unused local.
15694
15695 2003-04-07  Martin Baulig  <martin@ximian.com>
15696
15697         * codegen.cs (EmitContext.CurrentFile): New public field.
15698         (EmitContext.Mark): Use the CurrentFile to check whether the
15699         location is in the correct file.
15700         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
15701
15702 2003-04-07  Martin Baulig  <martin@ximian.com>
15703
15704         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
15705
15706         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
15707         location.  [FIXME: The location argument which gets passed to this
15708         method is sometimes wrong!]
15709
15710 2003-04-07  Nick Drochak <ndrochak@gol.com>
15711
15712         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
15713
15714 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
15715
15716         * expression.cs (Indirection.EmitAssign): We were using the
15717         temporary, but returning immediately instead of continuing the
15718         EmitAssing flow.
15719
15720 2003-04-06  Martin Baulig  <martin@ximian.com>
15721
15722         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
15723         if it's a nested child, but also deriving from the outer class.
15724         See test 190.cs.
15725
15726         * typemanager.cs (IsNestedChildOf): Make this work if it's a
15727         nested child, but also deriving from the outer class.  See
15728         test-190.cs.
15729         (FilterWithClosure): We may access private members of the outer
15730         class if we're a nested child and deriving from the outer class.
15731         (RealMemberLookup): Only set `closure_private_ok' if the
15732         `original_bf' contained BindingFlags.NonPublic.
15733
15734 2003-04-05  Martin Baulig  <martin@ximian.com>
15735
15736         * expression.cs (SizeOf.DoResolve): Use ResolveTypeExpr, so we can
15737         probe if its a type parameter, and if so, flag an error.
15738
15739         * decl.cs: Move here the SetParameterInfo code from class.cs.
15740         Handle IsGeneric here.
15741
15742         Handle a variety of errors in the parameter info definition.
15743
15744         * ecore.cs (SimpleName.DoResolveType): Handle look ups for generic
15745         type parameters here.
15746
15747         * cs-parser.jay (class_declaration): report errors for parameters
15748         here as well.
15749
15750 2003-01-21  Miguel de Icaza  <miguel@ximian.com>
15751
15752         * generic.cs: New file, contains support code for generics.
15753
15754         * cs-parser.jay: Remove OP_SHIFT_LEFT, OP_SHIFT_RIGHT,
15755         OP_SHIFT_LEFT_ASSIGN, OP_SHIFT_RIGHT_ASSIGN.
15756
15757         Update parser for the above removals.
15758
15759         * cs-tokenizer.cs: Do not handle <<= or >>= specially.  This is
15760         now taken care of in the parser.
15761
15762 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
15763
15764         * class.cs (Event.Define): Do not allow abstract events to have
15765         initializers. 
15766
15767 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
15768
15769         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
15770         block in event declarations.
15771
15772         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
15773         value type, get its address.
15774
15775         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
15776         leaving a class on the stack instead of a boolean value (int
15777         0/1).  Change the code so we compare against null, and then the
15778         result against zero.
15779
15780         * class.cs (TypeContainer.GetClassBases): We were checking for the
15781         parent class being sealed too late.
15782
15783         * expression.cs (Binary.Emit): For <= and >= when dealing with
15784         floating point values, use cgt.un and clt.un instead of cgt and
15785         clt alone.
15786
15787 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
15788
15789         * statement.cs: Apply the same optimization as MS: skip the 
15790         GetEnumerator returning an IEnumerator, and use the one returning a 
15791         CharEnumerator instead. This allows us to avoid the try-finally block 
15792         and the boxing.
15793
15794 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
15795
15796         * cs-parser.jay: Attributes cannot be applied to
15797                          namespaces. Fixes #40473
15798
15799 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15800
15801         * class.cs:
15802         (Add*): check if the name is valid using the full name for constants,
15803         fields, properties and events.
15804
15805 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
15806
15807         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
15808         char constants to be part of the enumeration.
15809
15810         * expression.cs (Conditional.DoResolve): Add support for operator
15811         true. Implements the missing functionality from 14.12
15812
15813         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
15814         operator true/false as required by the spec.
15815
15816         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
15817         implicit conversion to boolean.
15818
15819         * statement.cs (Statement.ResolveBoolean): A boolean expression is
15820         also one where the type implements `operator true'. 
15821
15822         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
15823         get an expression that will invoke operator true based on an
15824         expression.  
15825
15826         (GetConversionOperators): Removed the hack that called op_True
15827         here.  
15828
15829         (Expression.ResolveBoolean): Move this from Statement.
15830
15831 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
15832
15833         * ecore.cs (FieldExpr): do not allow initialization of initonly
15834         fields on derived classes
15835
15836 2003-03-13  Martin Baulig  <martin@ximian.com>
15837
15838         * statement.cs (Block.Emit): Call ig.BeginScope() and
15839         ig.EndScope() when compiling with debugging info; call
15840         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
15841
15842 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
15843
15844         * expression.cs (Indexers): Do not construct immediately, allow
15845         for new members to be appended as we go.  Fixes 38143
15846
15847 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15848
15849         * expression.cs: save/restore context when resolving an unchecked
15850         expression.
15851
15852 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
15853
15854         * cfold.cs: Catch division by zero in modulus operator during
15855         constant folding.
15856
15857 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
15858
15859         * interface.cs (Interface.DefineMembers): Avoid defining members
15860         twice. 
15861
15862 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
15863
15864         * driver.cs: handle the +/- options for -noconfig
15865
15866         * statement.cs (Unckeched.Resolve): Also track the state of
15867         unchecked in the Resolve phase.
15868
15869 2003-02-27  Martin Baulig  <martin@ximian.com>
15870
15871         * ecore.cs (Expression.MemberLookup): Don't create a
15872         MethodGroupExpr for something which is not a method.  Fixes #38291.
15873
15874 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
15875
15876         * class.cs (MemberBase.CheckParameters): Also check that the type
15877         is unmanaged if it is a pointer.
15878
15879         * expression.cs (SizeOf.Resolve): Add location information.
15880
15881         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
15882         a managed type is declared.
15883
15884         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
15885         parameter modifiers as well.  Fixes bug 38606
15886
15887         * class.cs: Very sad.  Am backing out the speed up changes
15888         introduced by the ArrayList -> Array in the TypeContainer, as they
15889         were not actually that much faster, and introduced a bug (no error
15890         reports on duplicated methods).
15891
15892         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
15893         source first, this will guarantee that we have a valid expression
15894         before calling in lower levels functions that will require a
15895         resolved object.  Then use this original_source in the
15896         target.ResolveLValue instead of the original source that was
15897         passed to us.
15898
15899         Another change.  Use target.Resolve instead of LValueResolve.
15900         Although we are resolving for LValues, we will let the Assign code
15901         take care of that (it will be called again from Resolve).  This
15902         basically allows code like this:
15903
15904         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
15905         class Y { void A (X x) { x [0] += o; }
15906
15907         The problem was that the indexer was trying to resolve for
15908         set_Item (idx, object o) and never finding one.  The real set_Item
15909         was set_Item (idx, X).  By delaying the process we get the right
15910         semantics. 
15911
15912         Fixes bug 36505
15913
15914 2003-02-23  Martin Baulig  <martin@ximian.com>
15915
15916         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
15917         while calling DoEmit ().
15918
15919         * codegen.cs (EmitContext.Mark): Don't mark locations in other
15920         source files; if you use the #line directive inside a method, the
15921         compiler stops emitting line numbers for the debugger until it
15922         reaches the end of the method or another #line directive which
15923         restores the original file.
15924
15925 2003-02-23  Martin Baulig  <martin@ximian.com>
15926
15927         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
15928
15929 2003-02-23  Martin Baulig  <martin@ximian.com>
15930
15931         * statement.cs (Block.AddChildVariableNames): We need to call this
15932         recursively, not just for our immediate children.
15933
15934 2003-02-23  Martin Baulig  <martin@ximian.com>
15935
15936         * class.cs (Event.Define): Always make the field private, like csc does.
15937
15938         * typemanager.cs (TypeManager.RealMemberLookup): Make events
15939         actually work, fixes bug #37521.
15940
15941 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
15942
15943         * delegate.cs: When creating the various temporary "Parameters"
15944         classes, make sure that we call the ComputeAndDefineParameterTypes
15945         on those new parameters (just like we do with the formal ones), to
15946         allow them to be resolved in the context of the DeclSpace.
15947
15948         This fixes the bug that Dick observed in Bugzilla #38530.
15949
15950 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
15951
15952         * expression.cs (ResolveMemberAccess): When resolving a constant,
15953         do not attempt to pull a constant if the value was not able to
15954         generate a valid constant.
15955
15956         * const.cs (LookupConstantValue): Do not report more errors than required.
15957
15958 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
15959
15960         * expression.cs: fixes bug #38328.
15961
15962 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
15963
15964         * class.cs: Changed all the various members that can be part of a
15965         class from being an ArrayList to be an Array of the right type.
15966         During the DefineType type_list, interface_list, delegate_list and
15967         enum_list are turned into types, interfaces, delegates and enums
15968         arrays.  
15969
15970         And during the member population, indexer_list, event_list,
15971         constant_list, field_list, instance_constructor_list, method_list,
15972         operator_list and property_list are turned into their real arrays.
15973
15974         Although we could probably perform this operation earlier, for
15975         good error reporting we need to keep the lists and remove the
15976         lists for longer than required.
15977
15978         This optimization was triggered by Paolo profiling the compiler
15979         speed on the output of `gen-sample-program.pl' perl script. 
15980
15981         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
15982         not crash in methods like MemberLookupFailed that use this field.  
15983
15984         This problem arises when the compiler fails to resolve a type
15985         during interface type definition for example.
15986
15987 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
15988
15989         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
15990         inherit from System.Object, so we have to stop at null, not only
15991         when reaching System.Object.
15992
15993 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
15994
15995         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
15996         DeclaredOnly because the parent indexer might have had a different
15997         name, but did not loop until the top of the hierarchy was reached.
15998
15999         The problem this one fixes is 35492: when a class implemented an
16000         indexer from an interface, we were getting the interface method
16001         (which was abstract) and we were flagging an error (can not invoke
16002         abstract method).
16003
16004         This also keeps bug 33089 functioning, and test-148 functioning.
16005
16006         * typemanager.cs (IsSpecialMethod): The correct way of figuring
16007         out if a method is special is to see if it is declared in a
16008         property or event, or whether it is one of the predefined operator
16009         names.   This should fix correctly #36804.
16010
16011 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
16012
16013         The goal here is to remove the dependency on EmptyCast.Peel ().
16014         Killing it completely.
16015
16016         The problem is that currently in a number of places where
16017         constants are expected, we have to "probe" for an EmptyCast, and
16018         Peel, which is not the correct thing to do, as this will be
16019         repetitive and will likely lead to errors. 
16020
16021         The idea is to remove any EmptyCasts that are used in casts that
16022         can be reduced to constants, so we only have to cope with
16023         constants. 
16024
16025         This bug hunt was triggered by Bug 37363 and the desire to remove
16026         the duplicate pattern where we were "peeling" emptycasts to check
16027         whether they were constants.  Now constants will always be
16028         constants.
16029
16030         * ecore.cs: Use an enumconstant here instead of wrapping with
16031         EmptyCast.  
16032
16033         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
16034         throwing me off.  By handling this we can get rid of a few hacks.
16035
16036         * statement.cs (Switch): Removed Peel() code.
16037
16038 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
16039
16040         * class.cs: Location information for error 508
16041
16042         * expression.cs (New.DoResolve): Add a guard against double
16043         resolution of an expression.  
16044
16045         The New DoResolve might be called twice when initializing field
16046         expressions (see EmitFieldInitializers, the call to
16047         GetInitializerExpression will perform a resolve on the expression,
16048         and later the assign will trigger another resolution
16049
16050         This leads to bugs (#37014)
16051
16052         * delegate.cs: The signature for EndInvoke should contain any ref
16053         or out parameters as well.  We were not doing this in the past. 
16054
16055         * class.cs (Field.Define): Do not overwrite the type definition
16056         inside the `volatile' group.  Turns out that volatile enumerations
16057         were changing the type here to perform a validity test, which
16058         broke conversions. 
16059
16060 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
16061
16062         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
16063         and structs, we do not want to load the instance variable
16064
16065         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
16066         enum_type has to be handled like an object reference (implicit
16067         conversions exists from this to object), but the regular IsClass
16068         and IsValueType tests will never return true for this one.
16069
16070         Also we use TypeManager.IsValueType instead of type.IsValueType,
16071         just for consistency with the rest of the code (this is only
16072         needed if we ever use the construct exposed by test-180.cs inside
16073         corlib, which we dont today).
16074
16075 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
16076
16077         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
16078         just InternalCall.
16079
16080 2003-02-09  Martin Baulig  <martin@ximian.com>
16081
16082         * namespace.cs (Namespace..ctor): Added SourceFile argument.
16083         (Namespace.DefineNamespaces): New static public method; this is
16084         called when we're compiling with debugging to add all namespaces
16085         to the symbol file.
16086
16087         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
16088         pass it to the Namespace's .ctor.
16089
16090         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
16091         and MethodBase arguments; pass the namespace ID to the symwriter;
16092         pass the MethodBase instead of the token to the symwriter.
16093         (SymbolWriter.DefineNamespace): New method to add a namespace to
16094         the symbol file.
16095
16096 2003-02-09  Martin Baulig  <martin@ximian.com>
16097
16098         * symbolwriter.cs: New file.  This is a wrapper around
16099         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
16100         methods here in near future.
16101
16102 2003-02-09  Martin Baulig  <martin@ximian.com>
16103
16104         * codegen.cs (EmitContext.Mark): Just pass the arguments to
16105         ILGenerator.MarkSequencePoint() which are actually used by the
16106         symbol writer.
16107
16108 2003-02-09  Martin Baulig  <martin@ximian.com>
16109
16110         * location.cs (SourceFile): New public sealed class.  This
16111         contains the name and an index which is used in the location's token.
16112         (Location): Reserve an appropriate number of bits in the token for
16113         the source file instead of walking over that list, this gives us a
16114         really huge performance improvement when compiling with debugging.
16115
16116         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
16117         `SourceFile' argument instead of a string.
16118         (Driver.ProcessFile): Add all the files via Location.AddFile(),
16119         but don't parse/tokenize here, we need to generate the list of all
16120         source files before we do that.
16121         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
16122         the files.
16123
16124         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
16125         instead of a string.
16126
16127         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
16128         of a string.
16129
16130 2003-02-09  Martin Baulig  <martin@ximian.com>
16131
16132         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
16133         filename on `#line default'.
16134
16135 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
16136
16137         * statement.cs: don't clear the pinned var when the fixed statement
16138         returns from the method (fixes bug#37752).
16139
16140 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
16141
16142         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
16143         to IsValueType.
16144
16145 2003-02-07  Martin Baulig  <martin@ximian.com>
16146
16147         * driver.cs: Removed the `--debug-args' command line argument.
16148
16149         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
16150         automatically by the AsssemblyBuilder.
16151         (CodeGen.InitializeSymbolWriter): We don't need to call any
16152         initialization function on the symbol writer anymore.  This method
16153         doesn't take any arguments.
16154
16155 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
16156
16157         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
16158         from referenced assemblies as well.
16159
16160 2003-02-02  Martin Baulig  <martin@ximian.com>
16161
16162         * class.cs (MethodData.Emit): Generate debugging info for external methods.
16163
16164 2003-02-02  Martin Baulig  <martin@ximian.com>
16165
16166         * class.cs (Constructor.Emit): Open the symbol writer before
16167         emitting the constructor initializer.
16168         (ConstructorInitializer.Emit): Call ec.Mark() to allow
16169         single-stepping through constructor initializers.
16170
16171 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
16172
16173         * class.cs: Handle error 549: do not allow virtual methods in
16174         sealed classes. 
16175
16176 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
16177
16178         * decl.cs: Check access levels when resolving types
16179
16180 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
16181
16182         * statement.cs: Add parameters and locals set in catch blocks that might 
16183         return to set vector
16184
16185 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
16186
16187         * class.cs (Operator): Set the SpecialName flags for operators.
16188
16189         * expression.cs (Invocation.DoResolve): Only block calls to
16190         accessors and operators on SpecialName methods.
16191
16192         (Cast.TryReduce): Handle conversions from char constants.
16193
16194
16195 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
16196
16197         * statement.cs: small memory and time optimization in FlowBranching.
16198
16199 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
16200
16201         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
16202         problem that the last fix but in the other sid (Set).
16203
16204         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
16205         access when there is no indexer in the hierarchy.
16206
16207 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
16208
16209         * class.cs: Combine some if statements.
16210
16211 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16212
16213         * driver.cs: fixed bug #37187.
16214
16215 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
16216
16217         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
16218         any indexer, it's needed to build a list with all the indexers in the
16219         hierarchy (AllGetters), else we have problems. Fixes #35653.
16220
16221 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
16222
16223         * class.cs (MethodData.Define): It is wrong for an interface
16224         implementation to be static in both cases: explicit and implicit.
16225         We were only handling this in one case.
16226
16227         Improve the if situation there to not have negations.
16228
16229         * class.cs (Field.Define): Turns out that we do not need to check
16230         the unsafe bit on field definition, only on usage.  Remove the test.
16231
16232 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16233
16234         * driver.cs: use assembly.Location instead of Codebase (the latest
16235         patch made mcs fail when using MS assemblies).
16236
16237 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
16238
16239         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
16240         get the path to *corlib.dll.
16241
16242 2003-01-21  Nick Drochak <ndrochak@gol.com>
16243
16244         * cs-tokenizer.cs:
16245         * pending.cs:
16246         * typemanager.cs: Remove compiler warnings
16247
16248 2003-01-20  Duncan Mak  <duncan@ximian.com>
16249
16250         * AssemblyInfo.cs: Bump the version number to 0.19.
16251
16252 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16253
16254         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
16255
16256 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
16257
16258         * class.cs (Constructor::Emit): Emit debugging info for constructors.
16259
16260 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
16261
16262         * cs-parser.jay: Small fix: we were not comparing the constructor
16263         name correctly.   Thanks to Zoltan for the initial pointer.
16264
16265 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
16266
16267         * cs-tokenizer.cs: Set file name when specified with #line
16268
16269 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
16270
16271         * cs-parser.jay: Only perform the constructor checks here if we
16272         are named like the class;  This will help provider a better
16273         error.  The constructor path is taken when a type definition is
16274         not found, but most likely the user forgot to add the type, so
16275         report that rather than the constructor error.
16276
16277 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
16278
16279         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
16280         allocations.
16281
16282 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16283
16284         * cs-parser.jay: Add cleanup call.
16285
16286 2003-01-13  Duncan Mak  <duncan@ximian.com>
16287
16288         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
16289         consistent with other methods.
16290
16291 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
16292
16293         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
16294
16295 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
16296
16297         * attribute.cs: only set GuidAttr to true when we have a
16298         GuidAttribute.
16299
16300 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16301
16302         * ecore.cs:
16303         * expression.cs:
16304         * typemanager.cs: fixes to allow mcs compile corlib with the new
16305         Type.IsSubclassOf fix.
16306
16307 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
16308
16309         * expression.cs (LocalVariableReference.DoResolve): Classify a
16310         constant as a value, not as a variable.   Also, set the type for
16311         the variable.
16312
16313         * cs-parser.jay (fixed_statement): take a type instead of a
16314         pointer_type, so we can produce a better error message later.
16315
16316         * statement.cs (Fixed.Resolve): Flag types that are not pointers
16317         as an error.  
16318
16319         (For.DoEmit): Make inifinite loops have a
16320         non-conditional branch back.
16321
16322         (Fixed.DoEmit): First populate the pinned variables, then emit the
16323         statement, then clear the variables.  Before I was emitting the
16324         code once for each fixed piece.
16325
16326
16327 2003-01-08  Martin Baulig  <martin@ximian.com>
16328
16329         * statement.cs (FlowBranching.MergeChild): A break in a
16330         SWITCH_SECTION does not leave a loop.  Fixes #36155.
16331
16332 2003-01-08  Martin Baulig  <martin@ximian.com>
16333
16334         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
16335         lives in the same number space than `param_map'.  Fixes #36154.
16336
16337 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
16338
16339         * cs-parser.jay (constructor_declaration): Set the
16340         Constructor.ModFlags before probing for it.  This makes the
16341         compiler report 514, 515 and 132 (the code was there, but got
16342         broken). 
16343
16344         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
16345         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
16346         (GotoCase.Resolve): Set `Returns' to ALWAYS.
16347
16348 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
16349
16350         * enum.cs: create the enum static fields using the enum type.
16351
16352 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
16353
16354         * class.cs: don't try to create the ParamBuilder for the return
16355         type if it's not needed (and handle it breaking for the ms runtime
16356         anyway).
16357
16358 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
16359
16360         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
16361
16362 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
16363
16364         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
16365         the command.   This showed up while compiling the JANET source
16366         code, which used \r as its only newline separator.
16367
16368 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
16369
16370         * class.cs (Method.Define): If we are an operator (because it
16371         reuses our code), then set the SpecialName and HideBySig.  #36128
16372
16373 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
16374
16375         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
16376         exception, report error 120 `object reference required'.
16377
16378         * driver.cs: Add --pause option, used during to measure the size
16379         of the process as it goes with --timestamp.
16380
16381         * expression.cs (Invocation.DoResolve): Do not allow methods with
16382         SpecialName to be invoked.
16383
16384 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
16385
16386         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
16387         number before adding it.
16388
16389 2002-12-21  Ravi Pratap  <ravi@ximian.com>
16390
16391         * ecore.cs (StandardImplicitConversion): When in an unsafe
16392         context, we allow conversion between void * to any other pointer
16393         type. This fixes bug #35973.
16394
16395 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
16396
16397         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
16398         is not thrown when extensionless outputs are used 
16399
16400 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16401
16402         * rootcontext.cs: fixed compilation of corlib.
16403
16404 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
16405
16406         * attribute.cs (Attributes.Contains): Add new method.
16407
16408         * class.cs (MethodCore.LabelParameters): if the parameter is an
16409         `out' parameter, check that no attribute `[In]' has been passed.
16410
16411         * enum.cs: Handle the `value__' name in an enumeration.
16412
16413 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
16414
16415         * decl.cs: Added special case to allow overrides on "protected
16416         internal" methods
16417
16418 2002-12-18  Ravi Pratap  <ravi@ximian.com>
16419
16420         * attribute.cs (Attributes.AddAttributeSection): Rename to this
16421         since it makes much more sense.
16422
16423         (Attributes.ctor): Don't require a Location parameter.
16424
16425         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
16426
16427         * attribute.cs (ApplyAttributes): Remove extra Location parameters
16428         since we already have that information per attribute.
16429
16430         * everywhere : make appropriate changes.
16431
16432         * class.cs (LabelParameters): Write the code which actually
16433         applies attributes to the return type. We can't do this on the MS
16434         .NET runtime so we flag a warning in the case an exception is
16435         thrown.
16436
16437 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
16438
16439         * const.cs: Handle implicit null conversions here too.
16440
16441 2002-12-17  Ravi Pratap  <ravi@ximian.com>
16442
16443         * class.cs (MethodCore.LabelParameters): Remove the extra
16444         Type [] parameter since it is completely unnecessary. Instead
16445         pass in the method's attributes so that we can extract
16446         the "return" attribute.
16447
16448 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
16449
16450         * cs-parser.jay (parse): Use Report.Error to flag errors instead
16451         of ignoring it and letting the compile continue.
16452
16453         * typemanager.cs (ChangeType): use an extra argument to return an
16454         error condition instead of throwing an exception.
16455
16456 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
16457
16458         * expression.cs (Unary.TryReduce): mimic the code for the regular
16459         code path.  Perform an implicit cast in the cases where we can
16460         implicitly convert to one of the integral types, and then reduce
16461         based on that constant.   This fixes bug #35483.
16462
16463 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16464
16465         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
16466
16467 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16468
16469         * namespace.cs: fixed bug #35489.
16470
16471 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
16472
16473         * class.cs: Remove some dead code.
16474
16475         * cs-parser.jay: Estimate the number of methods needed
16476         (RootContext.MethodCount);
16477
16478         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
16479         numbers instead of StringBuilders.
16480
16481         * support.cs (PtrHashtable): Add constructor with initial size;
16482         We can now reduce reallocations of the method table.
16483
16484 2002-12-10  Ravi Pratap  <ravi@ximian.com>
16485
16486         * attribute.cs (ApplyAttributes): Keep track of the emitted
16487         attributes on a per-target basis. This fixes bug #35413.
16488
16489 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
16490
16491         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
16492         default to the Windows 1252 encoding.
16493
16494         (UnixParseOption): Support version, thanks to Alp for the missing
16495         pointer. 
16496
16497         * AssemblyInfo.cs: Add nice assembly information.
16498
16499         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
16500         (bug 35169).
16501
16502         * cs-parser.jay: Allow a trailing comma before the close bracked
16503         in the attribute_section production.
16504
16505         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
16506         address of the instance was being taken, I will take this out,
16507         because we take the address of the object immediately here.
16508
16509 2002-12-09  Ravi Pratap  <ravi@ximian.com>
16510
16511         * typemanager.cs (AreMultipleAllowed): Take care of the most
16512         obvious case where attribute type is not in the current assembly -
16513         stupid me ;-)
16514
16515 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
16516
16517         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
16518         definitions, instead of doing that afterwards.  
16519
16520         Also we use a nice little hack, depending on the constructor, we
16521         know if we are a "composed" name or a simple name.  Hence, we
16522         avoid the IndexOf test, and we avoid 
16523
16524         * codegen.cs: Add code to assist in a bug reporter to track down
16525         the source of a compiler crash. 
16526
16527 2002-12-07  Ravi Pratap  <ravi@ximian.com>
16528
16529         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
16530         types have been emitted for a given element and flag an error
16531         if something which does not have AllowMultiple set is used more
16532         than once.
16533
16534         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
16535         attribute types and their corresponding AllowMultiple properties
16536
16537         (AreMultipleAllowed): Check the property for a given type.
16538
16539         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
16540         property in the case we have a TypeContainer.
16541
16542         (Attributes.AddAttribute): Detect duplicates and just skip on
16543         adding them. This trivial fix catches a pretty gross error in our
16544         attribute emission - global attributes were being emitted twice!
16545
16546         Bugzilla bug #33187 is now fixed.
16547
16548 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
16549
16550         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
16551         instead of pp_and).
16552
16553         * expression.cs (Binary.ResolveOperator): I can only use the
16554         Concat (string, string, string) and Concat (string, string,
16555         string, string) if the child is actually a concatenation of
16556         strings. 
16557
16558 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
16559
16560         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
16561         context where we need a 2-character lookahead.
16562
16563         * pending.cs (PendingImplementation): Rework so we can keep track
16564         of interface types all the time, and flag those which were
16565         implemented by parents as optional.
16566
16567 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
16568
16569         * expression.cs (Binary.ResolveOperator): Use
16570         String.Concat(string,string,string) or
16571         String.Concat(string,string,string,string) when possible. 
16572
16573         * typemanager: More helper methods.
16574
16575
16576 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
16577
16578         * pending.cs: remove the bogus return from GetMissingInterfaces()
16579         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
16580
16581 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
16582
16583         * namespace.cs: avoid duplicated 'using xxx' being added to
16584         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
16585         when we get more than one 'using' statement for the same namespace.
16586         Report a CS0105 warning for it.
16587
16588 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
16589
16590         * cs-tokenizer.cs (consume_identifier): use read directly, instead
16591         of calling getChar/putback, uses internal knowledge of it.    
16592
16593         (xtoken): Reorder tokenizer so most common patterns are checked
16594         first.  This reduces the compilation time in another 5% (from 8.11s
16595         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
16596
16597         The parsing time is 22% of the compilation in mcs, and from that
16598         64% is spent on the tokenization process.  
16599
16600         I tried using a binary search for keywords, but this is slower
16601         than the hashtable.  Another option would be to do a couple of
16602         things:
16603
16604                 * Not use a StringBuilder, instead use an array of chars,
16605                   with a set value.  Notice that this way we could catch
16606                   the 645 error without having to do it *afterwards*.
16607
16608                 * We could write a hand-parser to avoid the hashtable
16609                   compares altogether.
16610
16611         The identifier consumption process takes 37% of the tokenization
16612         time.  Another 15% is spent on is_number.  56% of the time spent
16613         on is_number is spent on Int64.Parse:
16614
16615                 * We could probably choose based on the string length to
16616                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
16617                   computations. 
16618
16619         Another 3% is spend on wrapping `xtoken' in the `token' function.
16620
16621         Handle 0xa0 as whitespace (#34752)
16622
16623 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
16624
16625         * typemanager.cs (IsCLRType): New routine to tell whether a type
16626         is one of the builtin types.  
16627
16628         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
16629         typecode in more places instead of doing pointer comparissions.
16630         We could leverage some knowledge about the way the typecodes are
16631         laid out.
16632
16633         New code to cache namespaces in assemblies, it is currently not
16634         invoked, to be used soon.
16635
16636         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
16637
16638         * expression.cs (Binary.ResolveOperator): specially handle
16639         strings, and do not perform user-defined operator overloading for
16640         built-in types.
16641
16642 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
16643
16644         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
16645         internalcall as it is a pretty simple operation;  Avoid whenever
16646         possible to call Char.IsLetter.
16647
16648         (consume_identifier): Cut by half the number of
16649         hashtable calls by merging the is_keyword and GetKeyword behavior.
16650
16651         Do not short-circuit, because if we do, we
16652         report errors (ie, #if false && true would produce an invalid
16653         directive error);
16654
16655
16656 2002-11-24  Martin Baulig  <martin@ximian.com>
16657
16658         * expression.cs (Cast.TryReduce): If we're in checked syntax,
16659         check constant ranges and report a CS0221.  Fixes #33186.
16660
16661 2002-11-24  Martin Baulig  <martin@ximian.com>
16662
16663         * cs-parser.jay: Make this work for uninitialized variable
16664         declarations in the `for' initializer.  Fixes #32416.
16665
16666 2002-11-24  Martin Baulig  <martin@ximian.com>
16667
16668         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
16669         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
16670
16671 2002-11-24  Martin Baulig  <martin@ximian.com>
16672
16673         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
16674         argument; if true, we also check for user-defined conversions.
16675         This is only needed if both arguments are of a user-defined type.
16676         Fixes #30443, added test-175.cs.
16677         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
16678
16679         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
16680
16681 2002-11-24  Martin Baulig  <martin@ximian.com>
16682
16683         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
16684         function to get the store opcode.
16685         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
16686         only emit the Ldelema if the store opcode is Stobj.  You must run
16687         both test-34 and test-167 to test this.  Fixes #34529.
16688
16689 2002-11-23  Martin Baulig  <martin@ximian.com>
16690
16691         * ecore.cs (Expression.MemberLookup): Added additional
16692         `qualifier_type' argument which is used when we're being called
16693         from MemberAccess.DoResolve() and null if we're called from a
16694         SimpleName lookup.
16695         (Expression.MemberLookupFailed): New method to report errors; this
16696         does the CS1540 check and reports the correct error message.
16697
16698         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
16699         argument for the CS1540 check and redone the way how we're dealing
16700         with private members.  See the comment in the source code for details.
16701         (FilterWithClosure): Reverted this back to revision 1.197; renamed
16702         `closure_start_type' to `closure_qualifier_type' and check whether
16703         it's not null.  It was not this filter being broken, it was just
16704         being called with the wrong arguments.
16705
16706         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
16707         and pass it the correct `qualifier_type'; this also does the error
16708         handling for us.
16709
16710 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
16711
16712         * expression.cs (Invocation.EmitParams): If the we are dealing
16713         with a non-built-in value type, load its address as well.
16714
16715         (ArrayCreation): Use a a pretty constant instead
16716         of the hardcoded value 2.   Use 6 instead of 2 for the number of
16717         static initializers.  
16718
16719         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
16720         because they are not really value types, just glorified integers. 
16721
16722         * driver.cs: Do not append .exe, the CSC compiler does not do it.
16723
16724         * ecore.cs: Remove redundant code for enumerations, make them use
16725         the same code path as everything else, fixes the casting issue
16726         with enumerations in Windows.Forms.
16727
16728         * attribute.cs: Do only cast to string if it is a string, the
16729         validation happens later.
16730
16731         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
16732         people upgrade their corlibs.
16733
16734         * ecore.cs: Oops, enumerations were not following the entire code path
16735
16736 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
16737
16738         * typemanager.cs (FilterWithClosure): Commented out the test for
16739         1540 in typemanager.cs, as it has problems when accessing
16740         protected methods from a parent class (see test-174.cs). 
16741
16742         * attribute.cs (Attribute.ValidateGuid): new method.
16743         (Attribute.Resolve): Use above.
16744
16745 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
16746
16747         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
16748
16749         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
16750         handling for enumerations, as we only needed the TypeContainer
16751         functionality to begin with (this is required for the fix below to
16752         work for enums that reference constants in a container class for
16753         example). 
16754
16755         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
16756
16757         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
16758         a valid TypeBuilder to perform lookups on.o
16759
16760         * class.cs (InheritableMemberSignatureCompare): Use true in the
16761         call to GetGetMethod and GetSetMethod, because we are comparing
16762         the signature, and we need to get the methods *even* if they are
16763         private. 
16764
16765         (PropertyBase.CheckBase): ditto.
16766
16767         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
16768         GotoCase.Resolve): Use Peel on EmpytCasts.
16769
16770         * ecore.cs (EmptyCast): drop child, add Peel method.
16771
16772 2002-11-17  Martin Baulig  <martin@ximian.com>
16773
16774         * ecore.cs (EmptyCast.Child): New public property.
16775
16776         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
16777         label resolved to an EmptyCast.  Fixes #34162.
16778         (GotoCase.Resolve): Likewise.
16779         (Block.EmitMeta): Likewise.
16780
16781 2002-11-17  Martin Baulig  <martin@ximian.com>
16782
16783         * expression.cs (Invocation.BetterConversion): Prefer int over
16784         uint; short over ushort; long over ulong for integer literals.
16785         Use ImplicitConversionExists instead of StandardConversionExists
16786         since we also need to check for user-defined implicit conversions.
16787         Fixes #34165.  Added test-173.cs.
16788
16789 2002-11-16  Martin Baulig  <martin@ximian.com>
16790
16791         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
16792         with the `true' and `false' literals.  Fixes #33151.
16793
16794 2002-11-16  Martin Baulig  <martin@ximian.com>
16795
16796         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
16797         October 22nd; don't do the cs1540 check for static members.
16798
16799         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
16800         now using our own filter here and doing the cs1540 check again.
16801
16802 2002-11-16  Martin Baulig  <martin@ximian.com>
16803
16804         * support.cs (InternalParameters): Don't crash if we don't have
16805         any fixed parameters.  Fixes #33532.
16806
16807 2002-11-16  Martin Baulig  <martin@ximian.com>
16808
16809         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
16810         when looking up static methods to make this work on Windows.
16811         Fixes #33773.
16812
16813 2002-11-16  Martin Baulig  <martin@ximian.com>
16814
16815         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
16816         a setter rather than using PropertyInfo.CanWrite.
16817
16818 2002-11-15  Nick Drochak  <ndrochak@gol.com>
16819
16820         * class.cs: Allow acces to block member by subclasses. Fixes build
16821         breaker.
16822
16823 2002-11-14  Martin Baulig  <martin@ximian.com>
16824
16825         * class.cs (Constructor.Emit): Added the extern/block check.
16826         Fixes bug #33678.
16827
16828 2002-11-14  Martin Baulig  <martin@ximian.com>
16829
16830         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
16831         iteration while looking for indexers, this is needed because the
16832         indexer may have a different name in our base classes.  Fixed the
16833         error reporting (no indexers at all, not get accessor, no
16834         overloaded match).  Fixes bug #33089.
16835         (IndexerAccess.DoResolveLValue): Likewise.
16836
16837 2002-11-14  Martin Baulig  <martin@ximian.com>
16838
16839         * class.cs (PropertyBase.CheckBase): Make this work for multiple
16840         indexers.  Fixes the first part of bug #33089.
16841         (MethodSignature.InheritableMemberSignatureCompare): Added support
16842         for properties.
16843
16844 2002-11-13  Ravi Pratap  <ravi@ximian.com>
16845
16846         * attribute.cs (Attribute.Resolve): Catch the
16847         NullReferenceException and report it since it isn't supposed to
16848         happen. 
16849
16850 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
16851
16852         * expression.cs (Binary.EmitBranchable): Also handle the cases for
16853         LogicalOr and LogicalAnd that can benefit from recursively
16854         handling EmitBranchable.  The code now should be nice for Paolo.
16855
16856 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
16857
16858         * typemanager.cs (LookupType): Added a negative-hit hashtable for
16859         the Type lookups, as we perform quite a number of lookups on
16860         non-Types.  This can be removed once we can deterministically tell
16861         whether we have a type or a namespace in advance.
16862
16863         But this might require special hacks from our corlib.
16864
16865         * TODO: updated.
16866
16867         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
16868         and double which avoids a conversion from an integer to a double.
16869
16870         * expression.cs: tiny optimization, avoid calling IsConstant,
16871         because it effectively performs the lookup twice.
16872
16873 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
16874
16875         But a bogus return here to keep the semantics of the old code
16876         until the Mono runtime is fixed.
16877
16878         * pending.cs (GetMissingInterfaces): New method used to remove all
16879         the interfaces that are already implemented by our parent
16880         classes from the list of pending methods. 
16881
16882         * interface.cs: Add checks for calls after ResolveTypeExpr.
16883
16884 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
16885
16886         * class.cs (Class.Emit): Report warning 67: event not used if the
16887         warning level is beyond 3.
16888
16889         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
16890         being a NullLiteral.
16891
16892         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
16893         specifiers. 
16894
16895         * class.cs (TypeContainer.GetClassBases): Cover a missing code
16896         path that might fail if a type can not be resolved.
16897
16898         * expression.cs (Binary.Emit): Emit unsigned versions of the
16899         operators. 
16900
16901         * driver.cs: use error 5.
16902
16903 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
16904
16905         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
16906
16907 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
16908
16909         * cs-parser.jay (switch_section): A beautiful patch from Martin
16910         Baulig that fixed 33094.
16911
16912 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
16913
16914         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
16915         Check whether the base is abstract and report an error if so.
16916
16917         * expression.cs (IndexerAccess.DoResolveLValue,
16918         IndexerAccess.DoResolve): ditto. 
16919
16920         (Invocation.DoResolve): ditto.
16921
16922         (Invocation.FullMethodDesc): Improve the report string.
16923
16924         * statement.cs (Block): Eliminate IsVariableDefined as it is
16925         basically just a wrapper for GetVariableInfo.
16926
16927         * ecore.cs (SimpleName): Use new 
16928
16929         * support.cs (ReflectionParamter.ParameterType): We unwrap the
16930         type, as we return the actual parameter ref/unref state on a
16931         different call.
16932
16933 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
16934
16935         * support.cs: Return proper flags REF/OUT fixing the previous
16936         commit.  
16937
16938         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
16939         not used to mean `ref' but `ref or out' in ParameterReference
16940
16941         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
16942         full type signature instead of calling TypeManger.CSharpName
16943         ourselves. 
16944
16945         * support.cs (InternalParameters.ParameterDesc): Do not compare
16946         directly to the modflags, because REF/OUT will actually be bitsets
16947         if set. 
16948
16949         * delegate.cs (VerifyMethod): Check also the modifiers.
16950
16951         * cs-tokenizer.cs: Fix bug where floating point values with an
16952         exponent where a sign was missing was ignored.
16953
16954         * driver.cs: Allow multiple assemblies to be specified in a single
16955         /r: argument
16956
16957 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
16958
16959         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
16960         because identifiers after a parenthesis would end up in this kind
16961         of production, and we needed to desamiguate it for having casts
16962         like:
16963
16964                 (UserDefinedType *) xxx
16965
16966 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
16967
16968         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
16969         we should set on the Bindingflags.NonPublic, but not turn on
16970         private_ok.  private_ok controls whether a Private member is
16971         returned (this is chekced on the filter routine), while the
16972         BindingFlags.NonPublic just controls whether private/protected
16973         will be allowed.   This fixes the problem part of the problem of
16974         private properties being allowed to be used in derived classes.
16975
16976         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
16977         so we can call the children DoResolveLValue method (this will
16978         properly signal errors on lvalue assignments to base properties)
16979
16980         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
16981         getter are null, and we have a property info, we know that this
16982         happened because the lookup failed, so we report an error 122 for
16983         protection level violation.
16984
16985         We also silently return if setter and getter are null in the
16986         resolve functions, this condition only happens if we have flagged
16987         the error before.  This is the other half of the problem. 
16988
16989         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
16990         not have accessibility information, that is why we were returning
16991         true in the filter function in typemanager.cs.
16992
16993         To properly report 122 (property is inaccessible because of its
16994         protection level) correctly, we report this error in ResolveAccess
16995         by failing if both the setter and the getter are lacking (ie, the
16996         lookup failed). 
16997
16998         DoResolve and DoLResolve have been modified to check for both
16999         setter/getter being null and returning silently, the reason being
17000         that I did not want to put the knowledge about this error in upper
17001         layers, like:
17002
17003         int old = Report.Errors;
17004         x = new PropertyExpr (...);
17005         if (old != Report.Errors)
17006                 return null;
17007         else
17008                 return x;
17009
17010         So the property expr is returned, but it is invalid, so the error
17011         will be flagged during the resolve process. 
17012
17013         * class.cs: Remove InheritablePropertySignatureCompare from the
17014         class, as we no longer depend on the property signature to compute
17015         whether it is possible to implement a method or not.
17016
17017         The reason is that calling PropertyInfo.GetGetMethod will return
17018         null (in .NET, in Mono it works, and we should change this), in
17019         cases where the Get Method does not exist in that particular
17020         class.
17021
17022         So this code:
17023
17024         class X { public virtual int A { get { return 1; } } }
17025         class Y : X { }
17026         class Z : Y { public override int A { get { return 2; } } }
17027
17028         Would fail in Z because the parent (Y) would not have the property
17029         defined.  So we avoid this completely now (because the alternative
17030         fix was ugly and slow), and we now depend exclusively on the
17031         method names.
17032
17033         (PropertyBase.CheckBase): Use a method-base mechanism to find our
17034         reference method, instead of using the property.
17035
17036         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
17037         routines are gone now.
17038
17039         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
17040         names, they were incorrectly named.
17041
17042         * cs-tokenizer.cs: Return are more gentle token on failure. 
17043
17044         * pending.cs (PendingImplementation.InterfaceMethod): This routine
17045         had an out-of-sync index variable, which caused it to remove from
17046         the list of pending methods the wrong method sometimes.
17047
17048 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
17049
17050         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
17051         CanWrite, because those refer to this particular instance of the
17052         property, and do not take into account the fact that we can
17053         override single members of a property.
17054
17055         Constructor requires an EmitContext.  The resolution process does
17056         not happen here, but we need to compute the accessors before,
17057         because the resolution does not always happen for properties.
17058
17059         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
17060         subclass, before we did not update this flag, but we did update
17061         bindingflags. 
17062
17063         (GetAccessors): Drop this routine, as it did not work in the
17064         presence of partially overwritten set/get methods. 
17065
17066         Notice that this broke the cs1540 detection, but that will require
17067         more thinking. 
17068
17069 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17070
17071         * class.cs:
17072         * codegen.cs:
17073         * driver.cs: issue a warning instead of an error if we don't support
17074         debugging for the platform. Also ignore a couple of errors that may
17075         arise when trying to write the symbols. Undo my previous patch.
17076
17077 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17078
17079         * driver.cs: ignore /debug switch except for Unix platforms.
17080
17081 2002-10-23  Nick Drochak  <ndrochak@gol.com>
17082
17083         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
17084
17085 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
17086
17087         * driver.cs: Do not make mcs-debug conditional, so we do not break
17088         builds that use it.
17089
17090         * statement.cs (UsageVector.MergeChildren): I would like Martin to
17091         review this patch.  But basically after all the children variables
17092         have been merged, the value of "Breaks" was not being set to
17093         new_breaks for Switch blocks.  I think that it should be set after
17094         it has executed.  Currently I set this to the value of new_breaks,
17095         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
17096         conservative, but I do not understand this code very well.
17097
17098         I did not break anything in the build, so that is good ;-)
17099
17100         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
17101
17102 2002-10-20  Mark Crichton  <crichton@gimp.org>
17103
17104         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
17105
17106 2002-10-20  Nick Drochak  <ndrochak@gol.com>
17107
17108         * cfold.cs: Fixed compile blocker.
17109
17110 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
17111
17112         * driver.cs: I was chekcing the key, not the file.
17113
17114 2002-10-19  Ravi Pratap  <ravi@ximian.com>
17115
17116         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
17117         message that we were generating - we just need to silently return
17118         a null.
17119
17120 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
17121
17122         * class.cs (Event.Define): Change my previous commit, as this
17123         breaks the debugger.  This is a temporary hack, as it seems like
17124         the compiler is generating events incorrectly to begin with.
17125
17126         * expression.cs (Binary.ResolveOperator): Added support for 
17127         "U operator - (E x, E y)"
17128
17129         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
17130         y)".
17131
17132         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
17133         init-only variables, but this path did not take into account that
17134         there might be also instance readonly variables.  Correct this
17135         problem. 
17136
17137         This fixes bug 32253
17138
17139         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
17140         delegates as well.
17141
17142         * driver.cs: Change the extension for modules to `netmodule'
17143
17144         * cs-parser.jay: Improved slightly the location tracking for
17145         the debugger symbols.
17146
17147         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
17148         modifiers that were specified instead of the hardcoded value
17149         (FamAndAssem).  This was basically ignoring the static modifier,
17150         and others.  Fixes 32429.
17151
17152         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
17153         fixed a bug in the process (32476)
17154
17155         * expression.cs (ArrayAccess.EmitAssign): Patch from
17156         hwang_rob@yahoo.ca that fixes bug 31834.3
17157
17158 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
17159
17160         * driver.cs: Make the module extension .netmodule.
17161
17162 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
17163
17164         * driver.cs: Report an error if the resource file is not found
17165         instead of crashing.
17166
17167         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
17168         false, like Emit does.
17169
17170 2002-10-16  Nick Drochak  <ndrochak@gol.com>
17171
17172         * typemanager.cs: Remove unused private member.  Also reported mcs
17173         bug to report this as a warning like csc.
17174
17175 2002-10-15  Martin Baulig  <martin@gnome.org>
17176
17177         * statement.cs (Statement.Emit): Made this a virtual method; emits
17178         the line number info and calls DoEmit().
17179         (Statement.DoEmit): New protected abstract method, formerly knows
17180         as Statement.Emit().
17181
17182         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
17183
17184 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
17185
17186         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
17187         have fixed a remaining problem: not every AddXXXX was adding a
17188         fully qualified name.  
17189
17190         Now everyone registers a fully qualified name in the DeclSpace as
17191         being defined instead of the partial name.  
17192
17193         Downsides: we are slower than we need to be due to the excess
17194         copies and the names being registered this way.  
17195
17196         The reason for this is that we currently depend (on the corlib
17197         bootstrap for instance) that types are fully qualified, because
17198         we dump all the types in the namespace, and we should really have
17199         types inserted into the proper namespace, so we can only store the
17200         basenames in the defined_names array.
17201
17202 2002-10-10  Martin Baulig  <martin@gnome.org>
17203
17204         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
17205         from bug #31834, see the bug report for a testcase which is
17206         miscompiled.
17207
17208 2002-10-10  Martin Baulig  <martin@gnome.org>
17209
17210         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
17211         flow analysis code for this.
17212
17213         * statement.cs (Do, While, For): Tell the flow analysis code about
17214         infinite loops.
17215         (FlowBranching.UsageVector): Added support for infinite loops.
17216         (Block.Resolve): Moved the dead code elimination here and use flow
17217         analysis to do it.
17218
17219 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
17220
17221         * class.cs (Field.Define): Catch cycles on struct type
17222         definitions. 
17223
17224         * typemanager.cs (IsUnmanagedtype): Do not recursively check
17225         fields if the fields are static.  We only need to check instance
17226         fields. 
17227
17228         * expression.cs (As.DoResolve): Test for reference type.
17229
17230         * statement.cs (Using.ResolveExpression): Use
17231         ConvertImplicitRequired, not ConvertImplicit which reports an
17232         error on failture
17233         (Using.ResolveLocalVariableDecls): ditto.
17234
17235         * expression.cs (Binary.ResolveOperator): Report errors in a few
17236         places where we had to.
17237
17238         * typemanager.cs (IsUnmanagedtype): Finish implementation.
17239
17240 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
17241
17242         * expression.cs: Use StoreFromPtr instead of extracting the type
17243         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
17244
17245         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
17246         an enumeration value to a System.Enum, but System.Enum is not a
17247         value type, but an class type, so we need to box.
17248
17249         (Expression.ConvertExplicit): One codepath could return
17250         errors but not flag them.  Fix this.  Fixes #31853
17251
17252         * parameter.cs (Resolve): Do not allow void as a parameter type.
17253
17254 2002-10-06  Martin Baulig  <martin@gnome.org>
17255
17256         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
17257         if it's a class type and not a struct.  Fixes #31815.
17258
17259 2002-10-06  Martin Baulig  <martin@gnome.org>
17260
17261         * statement.cs: Reworked the flow analysis code a bit to make it
17262         usable for dead code elimination.
17263
17264 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17265
17266         * cs-parser.jay: allow empty source files. Fixes bug #31781.
17267
17268 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17269
17270         * expression.cs (ComposedCast.DoResolveType): A quick workaround
17271         to fix the test 165, will investigate deeper.
17272
17273 2002-10-04  Martin Baulig  <martin@gnome.org>
17274
17275         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
17276         finally blocks actually work.
17277         (Try.Resolve): We don't need to create a sibling for `finally' if
17278         there is no finally block.
17279
17280 2002-10-04  Martin Baulig  <martin@gnome.org>
17281
17282         * class.cs (Constructor.Define): The default accessibility for a
17283         non-default constructor is private, not public.
17284
17285 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
17286
17287         * class.cs (Constructor): Make AllowedModifiers public, add
17288         EXTERN.
17289
17290         * cs-parser.jay: Perform the modifiers test here, as the
17291         constructor for the Constructor class usually receives a zero
17292         because of the way we create it (first we create, later we
17293         customize, and we were never checking the modifiers).
17294
17295         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
17296         is a version of LookupTypeReflection that includes the type-name
17297         cache.  This can be used as a fast path for functions that know
17298         the fully qualified name and are only calling into *.GetType() to
17299         obtain a composed type.
17300
17301         This is also used by TypeManager.LookupType during its type
17302         composition.
17303
17304         (LookupType): We now also track the real type name, as sometimes
17305         we can get a quey for the real type name from things like
17306         ComposedCast.  This fixes bug 31422.
17307
17308         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
17309         complete type fullname, it does not have to go through the type
17310         resolution system to obtain the composed version of the type (for
17311         obtaining arrays or pointers).
17312
17313         (Conditional.Emit): Use the EmitBoolExpression to
17314         generate nicer code, as requested by Paolo.
17315
17316         (ArrayCreation.CheckIndices): Use the patch from
17317         hwang_rob@yahoo.ca to validate the array initializers. 
17318
17319 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
17320
17321         * class.cs (ConstructorInitializer.Emit): simplify code by using
17322         Invocation.EmitCall, and at the same time, fix the bugs in calling
17323         parent constructors that took variable arguments. 
17324
17325         * ecore.cs (Expression.ConvertNumericExplicit,
17326         Expression.ImplicitNumericConversion): Remove the code that
17327         manually wrapped decimal (InternalTypeConstructor call is now gone
17328         as well).
17329
17330         * expression.cs (Cast.TryReduce): Also handle decimal types when
17331         trying to perform a constant fold on the type.
17332
17333         * typemanager.cs (IsUnmanagedtype): Partially implemented.
17334
17335         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
17336         that only turned off an error report, and did nothing else. 
17337
17338 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
17339
17340         * driver.cs: Handle and ignore /fullpaths
17341
17342 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
17343
17344         * expression.cs (Binary.ResolveOperator): Catch the case where
17345         DoNumericPromotions returns true, 
17346
17347         (Binary.DoNumericPromotions): Simplify the code, and the tests.
17348
17349 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
17350
17351         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
17352         report error 70.
17353
17354 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
17355
17356         * ecore.cs (ConvertNumericExplicit): It is not enough that the
17357         conversion exists, but it is also required that the conversion be
17358         performed.  This manifested in "(Type64Enum) 2".  
17359
17360         * class.cs (TypeManager.AddMethod): The fix is not to change
17361         AddEnum, because that one was using a fully qualified name (every
17362         DeclSpace derivative does), but to change the AddMethod routine
17363         that was using an un-namespaced name.  This now correctly reports
17364         the duplicated name.
17365
17366         Revert patch until I can properly fix it.  The issue
17367         is that we have a shared Type space across all namespaces
17368         currently, which is wrong.
17369
17370         Options include making the Namespace a DeclSpace, and merge
17371         current_namespace/current_container in the parser.
17372
17373 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
17374
17375         * cs-parser.jay: Improve error reporting when we get a different
17376         kind of expression in local_variable_type and
17377         local_variable_pointer_type. 
17378
17379         Propagate this to avoid missleading errors being reported.
17380
17381         * ecore.cs (ImplicitReferenceConversion): treat
17382         TypeManager.value_type as a target just like object_type.   As
17383         code like this:
17384
17385         ValueType v = 1;
17386
17387         Is valid, and needs to result in the int 1 being boxed before it
17388         is assigned to the value type v.
17389
17390         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
17391         to validate the enumeration name.
17392
17393         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
17394         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
17395         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
17396
17397         * ecore.cs (TryImplicitIntConversion): When doing an
17398         implicit-enumeration-conversion, check if the type is 64-bits and
17399         perform a conversion before passing to EnumConstant.
17400
17401 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
17402
17403         * decl.cs (Error_AmbiguousTypeReference); New routine used to
17404         report ambiguous type references.  Unlike the MS version, we
17405         report what the ambiguity is.   Innovation at work ;-)
17406
17407         (DeclSpace.FindType): Require a location argument to
17408         display when we display an ambiguous error.
17409
17410         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
17411
17412         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
17413
17414         * expression.cs (EmitDynamicInitializers): Apply patch from
17415         hwang_rob@yahoo.ca that fixes the order in which we emit our
17416         initializers. 
17417
17418 2002-09-21  Martin Baulig  <martin@gnome.org>
17419
17420         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
17421         delegate takes no arguments.
17422
17423 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
17424
17425         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
17426         from integers.
17427
17428         * expression.cs: Extract the underlying type.
17429
17430         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
17431
17432         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
17433
17434 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
17435
17436         * class.cs (TypeContainer.DefineType): We can not use the nice
17437         PackingSize with the size set to 1 DefineType method, because it
17438         will not allow us to define the interfaces that the struct
17439         implements.
17440
17441         This completes the fixing of bug 27287
17442
17443         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
17444         means also structs.  This fixes part of the problem. 
17445         (Expresion.ImplicitReferenceConversionExists): ditto.
17446
17447         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
17448         error if there were no errors reported during the type lookup
17449         process, to avoid duplicates or redundant errors.  Without this
17450         you would get an ambiguous errors plus a type not found.  We have
17451         beaten the user enough with the first error.  
17452
17453         (DeclSparce.FindType): Emit a warning if we have an ambiguous
17454         reference. 
17455
17456         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
17457         during the resolution process, stop the lookup, this avoids
17458         repeated error reports (same error twice).
17459
17460         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
17461
17462         * typemanager.cs (LookupType): Redo the type lookup code to match
17463         the needs of System.Reflection.  
17464
17465         The issue is that System.Reflection requires references to nested
17466         types to begin with a "+" sign instead of a dot.  So toplevel
17467         types look like: "NameSpace.TopLevelClass", and nested ones look
17468         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
17469         levels. 
17470
17471 2002-09-19  Martin Baulig  <martin@gnome.org>
17472
17473         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
17474         says that a method always returns or always throws an exception,
17475         don't report the CS0161.
17476
17477         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
17478         set `Returns = new_returns'.
17479
17480 2002-09-19  Martin Baulig  <martin@gnome.org>
17481
17482         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
17483         to an enum constant, check for a CS0176.
17484
17485 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
17486
17487         * class.cs (TypeContainer.CheckPairedOperators): Now we check
17488         for operators that must be in pairs and report errors.
17489
17490         * ecore.cs (SimpleName.DoResolveType): During the initial type
17491         resolution process, when we define types recursively, we must
17492         check first for types in our current scope before we perform
17493         lookups in the enclosing scopes.
17494
17495         * expression.cs (MakeByteBlob): Handle Decimal blobs.
17496
17497         (Invocation.VerifyArgumentsCompat): Call
17498         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
17499         I thought we were supposed to always call this, but there are a
17500         few places in the code where we dont do it.
17501
17502 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
17503
17504         * driver.cs: Add support in -linkres and -resource to specify the
17505         name of the identifier.
17506
17507 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17508
17509         * ecore.cs (StandardConversionExists): Sync with the conversion
17510         code: allow anything-* to void* conversions.
17511
17512         (FindMostSpecificSource): Use an Expression argument
17513         instead of a Type, because we might be handed over a Literal which
17514         gets a few more implicit conversions that plain types do not.  So
17515         this information was being lost.
17516
17517         Also, we drop the temporary type-holder expression when not
17518         required.
17519
17520 2002-09-17  Martin Baulig  <martin@gnome.org>
17521
17522         * class.cs (PropertyBase.CheckBase): Don't check the base class if
17523         this is an explicit interface implementation.
17524
17525 2002-09-17  Martin Baulig  <martin@gnome.org>
17526
17527         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
17528         different `IndexerName' attributes.
17529
17530         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
17531         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
17532         virtual CommonResolve().
17533
17534 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
17535
17536         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
17537         and convert that to the UnderlyingType.
17538
17539         * statement.cs (Foreach.Resolve): Indexers are just like variables
17540         or PropertyAccesses.
17541
17542         * cs-tokenizer.cs (consume_string): Track line numbers and columns
17543         inside quoted strings, we were not doing this before.
17544
17545 2002-09-16  Martin Baulig  <martin@gnome.org>
17546
17547         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
17548         resolve it.  This is needed for the definite assignment check of the
17549         instance expression, fixes bug #29846.
17550         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
17551
17552 2002-09-16  Nick Drochak  <ndrochak@gol.com>
17553
17554         * parameter.cs: Fix compile error.  Cannot reference static member
17555         from an instance object.  Is this an mcs bug?
17556
17557 2002-09-14  Martin Baulig  <martin@gnome.org>
17558
17559         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
17560         multiple times.  Fixes bug #30295, added test-166.cs.
17561
17562 2002-09-14  Martin Baulig  <martin@gnome.org>
17563
17564         * statement.cs (Block.Emit): Don't emit unreachable code.
17565         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
17566         `break' statements.
17567         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
17568
17569 2002-09-14  Martin Baulig  <martin@gnome.org>
17570
17571         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
17572         is set.
17573
17574 2002-09-14  Martin Baulig  <martin@gnome.org>
17575
17576         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
17577         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
17578         be false on the ms runtime.
17579
17580 2002-09-13  Martin Baulig  <martin@gnome.org>
17581
17582         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
17583         the CS0038 error message.
17584
17585 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
17586
17587         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
17588         constant inside, return it.
17589
17590 2002-09-12  Martin Baulig  <martin@gnome.org>
17591
17592         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
17593         implicit conversion can be done between enum types.
17594
17595         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
17596         check whether an implicit conversion to the current enum's UnderlyingType
17597         exists and report an error if not.
17598
17599         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
17600         without debugging support.
17601
17602         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
17603         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
17604
17605 2002-09-12  Martin Baulig  <martin@gnome.org>
17606
17607         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
17608
17609         * ecore.cs (IMemberExpr.DeclaringType): New property.
17610         (SimpleName.SimpleNameResolve): Check whether we're accessing a
17611         nonstatic member of an outer type (CS0038).
17612
17613 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
17614
17615         * driver.cs: Activate the using-error detector at warning level
17616         4 (at least for MS-compatible APIs).
17617
17618         * namespace.cs (VerifyUsing): Small buglett fix.
17619
17620         * pending.cs (PendingImplementation): pass the container pointer. 
17621
17622         * interface.cs (GetMethods): Allow for recursive definition.  Long
17623         term, I would like to move every type to support recursive
17624         definitions, not the current ordering mechanism that we have right
17625         now.
17626
17627         The situation is this: Attributes are handled before interfaces,
17628         so we can apply attributes to interfaces.  But some attributes
17629         implement interfaces, we will now handle the simple cases
17630         (recursive definitions will just get an error).  
17631
17632         * parameter.cs: Only invalidate types at the end if we fail to
17633         lookup all types.  
17634
17635 2002-09-09  Martin Baulig  <martin@gnome.org>
17636
17637         * ecore.cs (PropertyExpr.Emit): Also check for
17638         TypeManager.system_int_array_get_length so this'll also work when
17639         compiling corlib.  Fixes #30003.
17640
17641 2002-09-09  Martin Baulig  <martin@gnome.org>
17642
17643         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
17644         and throw an exception if we can't get the type's size.  Fixed #30040,
17645         added test-165.cs.
17646
17647 2002-09-09  Martin Baulig  <martin@gnome.org>
17648
17649         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
17650
17651         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
17652         context.  Fixes bug #30027.
17653
17654         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
17655         virtual functions.  Fixes bug #30043, added test-164.cs.
17656
17657 2002-09-08  Ravi Pratap  <ravi@ximian.com>
17658
17659         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
17660
17661 2002-09-08  Nick Drochak  <ndrochak@gol.com>
17662
17663         * driver.cs: Use an object to get the windows codepage since it's not a
17664         static property.
17665
17666 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
17667
17668         * statement.cs (For.Emit): for infinite loops (test == null)
17669         return whether there is a break inside, not always "true".
17670
17671         * namespace.cs (UsingEntry): New struct to hold the name of the
17672         using definition, the location where it is defined, and whether it
17673         has been used in a successful type lookup.
17674
17675         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
17676         strings.
17677
17678         * decl.cs: ditto.
17679
17680 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17681
17682         * attribute.cs : Fix incorrect code which relied on catching
17683         a NullReferenceException to detect a null being passed in
17684         where an object was expected.
17685
17686 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
17687
17688         * statement.cs (Try): flag the catch variable as assigned
17689
17690         * expression.cs (Cast): Simplified by using ResolveType instead of
17691         manually resolving.
17692
17693         * statement.cs (Catch): Fix bug by using ResolveType.
17694
17695 2002-09-06  Ravi Pratap  <ravi@ximian.com>
17696
17697         * expression.cs (BetterConversion): Special case for when we have
17698         a NullLiteral as the argument and we have to choose between string
17699         and object types - we choose string the way csc does.
17700
17701         * attribute.cs (Attribute.Resolve): Catch the
17702         NullReferenceException and report error #182 since the Mono
17703         runtime no more has the bug and having this exception raised means
17704         we tried to select a constructor which takes an object and is
17705         passed a null.
17706
17707 2002-09-05  Ravi Pratap  <ravi@ximian.com>
17708
17709         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
17710         message (1502, 1503) when we can't locate a method after overload
17711         resolution. This is much more informative and closes the bug
17712         Miguel reported.
17713
17714         * interface.cs (PopulateMethod): Return if there are no argument
17715         types. Fixes a NullReferenceException bug.
17716
17717         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
17718         expressions too. Previously we were checking only in one place for
17719         positional arguments leaving out named arguments.
17720
17721         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
17722         type to the enum type is not allowed. Remove code corresponding to
17723         that.
17724
17725         (ConvertNumericExplicit): Allow explicit conversions from
17726         the underlying type to enum type. This precisely follows the spec
17727         and closes a bug filed by Gonzalo.
17728
17729 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17730
17731         * compiler.csproj:
17732         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
17733
17734 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
17735
17736         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
17737         it was important that we stored the right value after the
17738         reduction in `converted'.
17739
17740 2002-09-04  Martin Baulig  <martin@gnome.org>
17741
17742         * location.cs (Location.SymbolDocument): Use full pathnames for the
17743         source files.
17744
17745 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
17746
17747         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
17748         of the expression resolve mechanism, because that will catch the
17749         SimpleName error failures.
17750
17751         (Conditional): If we can not resolve the
17752         expression, return, do not crash.
17753
17754 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17755
17756         * cs-tokenizer.cs:
17757         (location): display token name instead of its number.
17758
17759 2002-08-28  Martin Baulig  <martin@gnome.org>
17760
17761         * expression.cs (Binary.ResolveOperator): Don't silently return
17762         but return an error if an operator cannot be applied between two
17763         enum types.
17764
17765 2002-08-28  Martin Baulig  <martin@gnome.org>
17766
17767         * class.cs (Constructor.Define): Set the permission attributes
17768         correctly instead of making all constructors public.
17769
17770 2002-08-28  Martin Baulig  <martin@gnome.org>
17771
17772         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
17773         for private members before reporting a CS0103; if we find anything,
17774         it's a CS0122.
17775
17776 2002-08-28  Martin Baulig  <martin@gnome.org>
17777
17778         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
17779         to check whether `closure_start_type == closure_invocation_type',
17780         we also need to check whether `m.DeclaringType == closure_invocation_type'
17781         before bypassing the permission checks.  We might be accessing
17782         protected/private members from the base class.
17783         (TypeManager.RealMemberLookup): Only set private_ok if private
17784         members were requested via BindingFlags.NonPublic.
17785
17786         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
17787
17788         * expression.cs (MemberAccess.ResolveMemberAccess): Set
17789         MethodGroupExpr.IsExplicitImpl if appropriate.
17790         (Invocation.DoResolve): Don't report the CS0120 for explicit
17791         interface implementations.
17792
17793 2002-08-27  Martin Baulig  <martin@gnome.org>
17794
17795         * expression.cs (Invocation.DoResolve): If this is a static
17796         method and we don't have an InstanceExpression, we must report
17797         a CS0120.
17798
17799 2002-08-25  Martin Baulig  <martin@gnome.org>
17800
17801         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
17802         `==' between a valuetype and an object.
17803
17804 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
17805
17806         * ecore.cs (TypeExpr): Provide a ToString method.
17807
17808 2002-08-24  Martin Baulig  <martin@gnome.org>
17809
17810         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
17811         now called proggie.dbg and it's a binary file.
17812
17813 2002-08-23  Martin Baulig  <martin@gnome.org>
17814
17815         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
17816
17817 2002-08-23  Martin Baulig  <martin@gnome.org>
17818
17819         * struct.cs (MyStructInfo.ctor): Make this work with empty
17820         structs; it's not allowed to use foreach() on null.
17821
17822 2002-08-23  Martin Baulig  <martin@gnome.org>
17823
17824         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
17825         writer the full pathname of the generated assembly.
17826
17827 2002-08-23  Martin Baulig  <martin@gnome.org>
17828
17829         * statements.cs (FlowBranching.UsageVector.MergeChildren):
17830         A `finally' block never returns or breaks; improved handling of
17831         unreachable code.
17832
17833 2002-08-23  Martin Baulig  <martin@gnome.org>
17834
17835         * statement.cs (Throw.Resolve): Allow `throw null'.
17836
17837 2002-08-23  Martin Baulig  <martin@gnome.org>
17838
17839         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
17840         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
17841         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
17842         MemberLookup would return a wrong event if this is an explicit
17843         interface implementation and the class has an event with the same
17844         name.
17845
17846 2002-08-23  Martin Baulig  <martin@gnome.org>
17847
17848         * statement.cs (Block.AddChildVariableNames): New public method.
17849         (Block.AddChildVariableName): Likewise.
17850         (Block.IsVariableNameUsedInChildBlock): Likewise.
17851         (Block.AddVariable): Check whether a variable name has already
17852         been used in a child block.
17853
17854         * cs-parser.jay (declare_local_variables): Mark all variable names
17855         from the current block as being used in a child block in the
17856         implicit block.
17857
17858 2002-08-23  Martin Baulig  <martin@gnome.org>
17859
17860         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
17861         find the symbol writer.
17862
17863         * driver.cs: csc also allows the arguments to /define being
17864         separated by commas, not only by semicolons.
17865
17866 2002-08-23  Martin Baulig  <martin@gnome.org>
17867
17868         * interface.cs (Interface.GetMembers): Added static check for events.
17869
17870 2002-08-15  Martin Baulig  <martin@gnome.org>
17871
17872         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
17873         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
17874
17875         * ecore.cs (Expression.MemberLookup): Added documentation and explained
17876         why the MethodData.EmitDestructor() change was necessary.
17877
17878 2002-08-20  Martin Baulig  <martin@gnome.org>
17879
17880         * class.cs (TypeContainer.FindMembers): Added static check for events.
17881
17882         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
17883
17884         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
17885         use Type.GetEvents(), not Type.FindMembers().
17886
17887 2002-08-20  Martin Baulig  <martin@gnome.org>
17888
17889         * decl.cs (MemberCache): Added a special method cache which will
17890         be used for method-only searched.  This ensures that a method
17891         search will return a MethodInfo with the correct ReflectedType for
17892         inherited methods.      
17893
17894 2002-08-20  Martin Baulig  <martin@gnome.org>
17895
17896         * decl.cs (DeclSpace.FindMembers): Made this public.
17897
17898 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
17899
17900         * delegate.cs: fixed build on windows.
17901         [FIXME:  Filed as bug #29150: MCS must report these errors.]
17902
17903 2002-08-19  Ravi Pratap  <ravi@ximian.com>
17904
17905         * ecore.cs (StandardConversionExists): Return a false
17906         if we are trying to convert the void type to anything else
17907         since that is not allowed.
17908
17909         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
17910         we flag error 70 in the event an event is trying to be accessed
17911         directly from outside the declaring type.
17912
17913 2002-08-20  Martin Baulig  <martin@gnome.org>
17914
17915         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
17916         MemberCache from typemanager.cs to decl.cs.
17917
17918 2002-08-19  Martin Baulig  <martin@gnome.org>
17919
17920         * class.cs (TypeContainer): Implement IMemberContainer.
17921         (TypeContainer.DefineMembers): Create the MemberCache.
17922         (TypeContainer.FindMembers): Do better BindingFlags checking; only
17923         return public members if BindingFlags.Public was given, check
17924         whether members are static.
17925
17926 2002-08-16  Martin Baulig  <martin@gnome.org>
17927
17928         * decl.cs (DeclSpace.Define): Splitted this in Define and
17929         DefineMembers.  DefineMembers is called first and initializes the
17930         MemberCache.
17931
17932         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
17933         DefineMembers() on all our DeclSpaces.
17934
17935         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
17936         but call DefineMembers() on all nested interfaces.  We call their
17937         Define() in our new Define() function.
17938
17939         * interface.cs (Interface): Implement IMemberContainer.
17940         (Interface.Define): Moved all code except the attribute stuf to
17941         DefineMembers().
17942         (Interface.DefineMembers): Initialize the member cache.
17943
17944         * typemanager.cs (IMemberFinder): Removed this interface, we don't
17945         need this anymore since we can use MemberCache.FindMembers directly.
17946
17947 2002-08-19  Martin Baulig  <martin@gnome.org>
17948
17949         * typemanager.cs (MemberCache): When creating the cache for an
17950         interface type, add all inherited members.
17951         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
17952         to `out bool used_cache' and documented it.
17953         (TypeManager.MemberLookup): If we already used the cache in the first
17954         iteration, we don't need to do the interfaces check.
17955
17956 2002-08-19  Martin Baulig  <martin@gnome.org>
17957
17958         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
17959         here from IMemberFinder and don't implement this interface anymore.
17960         (DeclSpace.MemberCache): Moved here from IMemberFinder.
17961
17962         * typemanager.cs (IMemberFinder): This interface is now only used by
17963         classes which actually support the member cache.
17964         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
17965         since we only put DeclSpaces into this Hashtable.
17966         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
17967         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
17968
17969 2002-08-16  Martin Baulig  <martin@gnome.org>
17970
17971         * typemanager.cs (ICachingMemberFinder): Removed.
17972         (IMemberFinder.MemberCache): New property.
17973         (TypeManager.FindMembers): Merged this with RealFindMembers().
17974         This function will never be called from TypeManager.MemberLookup()
17975         so we can't use the cache here, just the IMemberFinder.
17976         (TypeManager.MemberLookup_FindMembers): Check whether the
17977         IMemberFinder has a MemberCache and call the cache's FindMembers
17978         function.
17979         (MemberCache): Rewrote larger parts of this yet another time and
17980         cleaned it up a bit.
17981
17982 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
17983
17984         * driver.cs (LoadArgs): Support quoting.
17985
17986         (Usage): Show the CSC-like command line arguments.
17987
17988         Improved a few error messages.
17989
17990 2002-08-15  Martin Baulig  <martin@gnome.org>
17991
17992         * typemanager.cs (IMemberContainer.Type): New property.
17993         (IMemberContainer.IsInterface): New property.
17994
17995         The following changes are conditional to BROKEN_RUNTIME, which is
17996         defined at the top of the file.
17997
17998         * typemanager.cs (MemberCache.MemberCache): Don't add the base
17999         class'es members, but add all members from TypeHandle.ObjectType
18000         if we're an interface.
18001         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
18002         is the current type.
18003         (MemberCache.CacheEntry.Container): Removed this field.
18004         (TypeHandle.GetMembers): Include inherited members.
18005
18006 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18007
18008         * typemanager.cs: fixed compilation and added a comment on a field that
18009         is never used.
18010
18011 2002-08-15  Martin Baulig  <martin@gnome.org>
18012
18013         * class.cs (ConstructorInitializer.Resolve): In the
18014         Expression.MemberLookup call, use the queried_type as
18015         invocation_type.
18016
18017         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
18018         declared' attribute, it's always true.
18019         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
18020         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
18021         temporary wrapper for FindMembers which tells MemberLookup whether
18022         members from the base classes are included in the return value.
18023         This will go away soon.
18024         (TypeManager.MemberLookup): Use this temporary hack here; once the
18025         new MemberCache is completed, we don't need to do the DeclaredOnly
18026         looping here anymore since the MemberCache will take care of this.
18027         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
18028         (MemberCache): When creating the MemberCache for a class, get
18029         members from the current class and all its base classes.
18030         (MemberCache.CacheEntry.Container): New field.  This is a
18031         temporary hack until the Mono runtime is fixed to distinguish
18032         between ReflectedType and DeclaringType.  It allows us to use MCS
18033         with both the MS runtime and the unfixed Mono runtime without
18034         problems and without accecting performance.
18035         (MemberCache.SearchMembers): The DeclaredOnly looping from
18036         TypeManager.MemberLookup is now done here.      
18037
18038 2002-08-14  Martin Baulig  <martin@gnome.org>
18039
18040         * statement.cs (MyStructInfo.MyStructInfo): Don't call
18041         Type.GetFields on dynamic types but get the fields from the
18042         corresponding TypeContainer.
18043         (MyStructInfo.GetStructInfo): Added check for enum types.
18044
18045         * typemanager.cs (MemberList.IsSynchronized): Implemented.
18046         (MemberList.SyncRoot): Implemented.
18047         (TypeManager.FilterWithClosure): No need to check permissions if
18048         closure_start_type == closure_invocation_type, don't crash if
18049         closure_invocation_type is null.
18050
18051 2002-08-13  Martin Baulig  <martin@gnome.org>
18052
18053         Rewrote TypeContainer.FindMembers to use a member cache.  This
18054         gives us a speed increase of about 35% for the self-hosting MCS
18055         build and of about 15-20% for the class libs (both on GNU/Linux).
18056
18057         * report.cs (Timer): New class to get enhanced profiling.  This
18058         whole class is "TIMER" conditional since it remarkably slows down
18059         compilation speed.
18060
18061         * class.cs (MemberList): New class.  This is an IList wrapper
18062         which we're now using instead of passing MemberInfo[]'s around to
18063         avoid copying this array unnecessarily.
18064         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
18065         (ICachingMemberFinder, IMemberContainer): New interface.
18066         (TypeManager.FilterWithClosure): If `criteria' is null, the name
18067         has already been checked, otherwise use it for the name comparision.
18068         (TypeManager.FindMembers): Renamed to RealMemberFinder and
18069         provided wrapper which tries to use ICachingMemberFinder.FindMembers
18070         if possible.  Returns a MemberList, not a MemberInfo [].
18071         (TypeHandle): New class, implements IMemberContainer.  We create
18072         one instance of this class per type, it contains a MemberCache
18073         which is used to do the member lookups.
18074         (MemberCache): New class.  Each instance of this class contains
18075         all members of a type and a name-based hash table.
18076         (MemberCache.FindMembers): This is our new member lookup
18077         function.  First, it looks up all members of the requested name in
18078         the hash table.  Then, it walks this list and sorts out all
18079         applicable members and returns them.
18080
18081 2002-08-13  Martin Baulig  <martin@gnome.org>
18082
18083         In addition to a nice code cleanup, this gives us a performance
18084         increase of about 1.4% on GNU/Linux - not much, but it's already
18085         half a second for the self-hosting MCS compilation.
18086
18087         * typemanager.cs (IMemberFinder): New interface.  It is used by
18088         TypeManager.FindMembers to call FindMembers on a TypeContainer,
18089         Enum, Delegate or Interface.
18090         (TypeManager.finder_to_member_finder): New PtrHashtable.
18091         (TypeManager.finder_to_container): Removed.
18092         (TypeManager.finder_to_delegate): Removed.
18093         (TypeManager.finder_to_interface): Removed.
18094         (TypeManager.finder_to_enum): Removed.
18095
18096         * interface.cs (Interface): Implement IMemberFinder.
18097
18098         * delegate.cs (Delegate): Implement IMemberFinder.
18099
18100         * enum.cs (Enum): Implement IMemberFinder.
18101
18102         * class.cs (TypeContainer): Implement IMemberFinder.
18103
18104 2002-08-12  Martin Baulig  <martin@gnome.org>
18105
18106         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
18107
18108 2002-08-12  Martin Baulig  <martin@gnome.org>
18109
18110         * ecore.cs (ITypeExpression): New interface for expressions which
18111         resolve to a type.
18112         (TypeExpression): Renamed to TypeLookupExpression.
18113         (Expression.DoResolve): If we're doing a types-only lookup, the
18114         expression must implement the ITypeExpression interface and we
18115         call DoResolveType() on it.
18116         (SimpleName): Implement the new ITypeExpression interface.
18117         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
18118         hack, the situation that we're only looking up types can't happen
18119         anymore when this method is called.  Moved the type lookup code to
18120         DoResolveType() and call it.
18121         (SimpleName.DoResolveType): This ITypeExpression interface method
18122         is now doing the types-only lookup.
18123         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
18124         (ResolveFlags): Added MaskExprClass.
18125
18126         * expression.cs (MemberAccess): Implement the ITypeExpression
18127         interface.
18128         (MemberAccess.DoResolve): Added support for a types-only lookup
18129         when we're called via ITypeExpression.DoResolveType().
18130         (ComposedCast): Implement the ITypeExpression interface.
18131
18132         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
18133         Expression.Resolve() with ResolveFlags.Type instead.
18134
18135 2002-08-12  Martin Baulig  <martin@gnome.org>
18136
18137         * interface.cs (Interface.Define): Apply attributes.
18138
18139         * attribute.cs (Attribute.ApplyAttributes): Added support for
18140         interface attributes.
18141
18142 2002-08-11  Martin Baulig  <martin@gnome.org>
18143
18144         * statement.cs (Block.Emit): Only check the "this" variable if we
18145         do not always throw an exception.
18146
18147         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
18148         whether the property has a set accessor.
18149
18150 2002-08-11  Martin Baulig  <martin@gnome.org>
18151
18152         Added control flow analysis support for structs.
18153
18154         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
18155         with control flow analysis turned off.
18156         (IVariable): New interface.
18157         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
18158         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
18159         (FieldExpr.DoResolve): Resolve the instance expression with flow
18160         analysis turned off and do the definite assignment check after the
18161         resolving when we know what the expression will resolve to.
18162
18163         * expression.cs (LocalVariableReference, ParameterReference):
18164         Implement the new IVariable interface, only call the flow analysis
18165         code if ec.DoFlowAnalysis is true.
18166         (This): Added constructor which takes a Block argument.  Implement
18167         the new IVariable interface.
18168         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
18169         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
18170         This does the definite assignment checks for struct members.
18171
18172         * class.cs (Constructor.Emit): If this is a non-static `struct'
18173         constructor which doesn't have any initializer, call
18174         Block.AddThisVariable() to tell the flow analysis code that all
18175         struct elements must be initialized before control returns from
18176         the constructor.
18177
18178         * statement.cs (MyStructInfo): New public class.
18179         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
18180         argument to this indexer.  If non-zero, check an individual struct
18181         member, not the whole struct.
18182         (FlowBranching.CheckOutParameters): Check struct members.
18183         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
18184         overloaded versions of these methods which take an additional
18185         `int field_idx' argument to check struct members.
18186         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
18187         overloaded versions of these methods which take an additional
18188         `string field_name' argument to check struct member.s
18189         (VariableInfo): Implement the IVariable interface.
18190         (VariableInfo.StructInfo): New public property.  Returns the
18191         MyStructInfo instance of the variable if it's a struct or null.
18192         (Block.AddThisVariable): New public method.  This is called from
18193         Constructor.Emit() for non-static `struct' constructor which do
18194         not have any initializer.  It creates a special variable for the
18195         "this" instance variable which will be checked by the flow
18196         analysis code to ensure that all of the struct's fields are
18197         initialized before control returns from the constructor.
18198         (UsageVector): Added support for struct members.  If a
18199         variable/parameter is a struct with N members, we reserve a slot
18200         in the usage vector for each member.  A struct is considered fully
18201         initialized if either the struct itself (slot 0) or all its
18202         members are initialized.
18203
18204 2002-08-08  Martin Baulig  <martin@gnome.org>
18205
18206         * driver.cs (Driver.MainDriver): Only report an error CS5001
18207         if there were no compilation errors.
18208
18209         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
18210         `UnsafeContext' property to determine whether the parent is in
18211         unsafe context rather than checking the parent's ModFlags:
18212         classes nested in an unsafe class are unsafe as well.
18213
18214 2002-08-08  Martin Baulig  <martin@gnome.org>
18215
18216         * statement.cs (UsageVector.MergeChildren): Distinguish between
18217         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
18218         we return.  Added test17() and test18() to test-154.cs.
18219
18220 2002-08-08  Martin Baulig  <martin@gnome.org>
18221
18222         * typemanager.cs (TypeManager.FilterWithClosure): If we have
18223         Family access, make sure the invoking type isn't a subclass of the
18224         queried type (that'd be a CS1540).
18225
18226         * ecore.cs (Expression.MemberLookup): Added overloaded version of
18227         this method which takes an additional `Type invocation_type'.
18228
18229         * expression.cs (BaseAccess.DoResolve): Use the base type as
18230         invocation and query type.
18231         (MemberAccess.DoResolve): If the lookup failed and we're about to
18232         report a CS0122, try a lookup with the ec.ContainerType - if this
18233         succeeds, we must report a CS1540.
18234
18235 2002-08-08  Martin Baulig  <martin@gnome.org>
18236
18237         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
18238         (MethodGroupExpr): Implement the IMemberExpr interface.
18239
18240         * expression (MemberAccess.ResolveMemberAccess): No need to have
18241         any special code for MethodGroupExprs anymore, they're now
18242         IMemberExprs.   
18243
18244 2002-08-08  Martin Baulig  <martin@gnome.org>
18245
18246         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
18247         Family, FamANDAssem and FamORAssem permissions.
18248         (TypeManager.IsSubclassOrNestedChildOf): New public method.
18249
18250 2002-08-08  Martin Baulig  <martin@gnome.org>
18251
18252         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
18253         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
18254         or loop block.
18255
18256 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
18257
18258         * driver.cs: implemented /resource option to embed managed resources.
18259
18260 2002-08-07  Martin Baulig  <martin@gnome.org>
18261
18262         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
18263         (FieldBase.HasFieldInitializer): New public property.
18264         (FieldBase.GetInitializerExpression): New public method.  Resolves and
18265         returns the field initializer and makes sure it is only resolved once.
18266         (TypeContainer.EmitFieldInitializers): Call
18267         FieldBase.GetInitializerExpression to get the initializer, this ensures
18268         that it isn't resolved multiple times.
18269
18270         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
18271         the resolving process (SimpleName/MemberLookup) that we're currently
18272         emitting a field initializer (which must not access any instance members,
18273         this is an error CS0236).
18274
18275         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
18276         argument, if the `IsFieldInitializer' flag is set, we must report and
18277         error CS0236 and not an error CS0120.   
18278
18279 2002-08-07  Martin Baulig  <martin@gnome.org>
18280
18281         * ecore.cs (IMemberExpr): New public interface.
18282         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
18283         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
18284         if the expression is an IMemberExpr.
18285
18286         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
18287         to be null, implicitly default to `this' if we're non-static in
18288         this case.  Simplified the code a lot by using the new IMemberExpr
18289         interface.  Also fixed bug #28176 here.
18290
18291 2002-08-06  Martin Baulig  <martin@gnome.org>
18292
18293         * cs-parser.jay (SimpleLookup): Removed.  We need to create
18294         ParameterReferences during semantic analysis so that we can do a
18295         type-only search when resolving Cast, TypeOf and SizeOf.
18296         (block): Pass the `current_local_parameters' to the Block's
18297         constructor.
18298
18299         * class.cs (ConstructorInitializer): Added `Parameters parameters'
18300         argument to the constructor.
18301         (ConstructorInitializer.Resolve): Create a temporary implicit
18302         block with the parameters.
18303
18304         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
18305         references here if we aren't doing a type-only search.
18306
18307         * statement.cs (Block): Added constructor which takes a
18308         `Parameters parameters' argument.
18309         (Block.Parameters): New public property.
18310
18311         * support.cs (InternalParameters.Parameters): Renamed `parameters'
18312         to `Parameters' and made it public readonly.
18313
18314 2002-08-06  Martin Baulig  <martin@gnome.org>
18315
18316         * ecore.cs (Expression.Warning): Made this public as well.
18317
18318         * report.cs (Report.Debug): Print the contents of collections.
18319
18320 2002-08-06  Martin Baulig  <martin@gnome.org>
18321
18322         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
18323         used to tell Resolve() which kinds of expressions it may return.
18324         (Expression.Resolve): Added overloaded version of this method which
18325         takes a `ResolveFlags flags' argument.  This can be used to tell
18326         Resolve() which kinds of expressions it may return.  Reports a
18327         CS0118 on error.
18328         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
18329         ResolveFlags.SimpleName.
18330         (Expression.Error118): Added overloaded version of this method which
18331         takes a `ResolveFlags flags' argument.  It uses the flags to determine
18332         which kinds of expressions are allowed.
18333
18334         * expression.cs (Argument.ResolveMethodGroup): New public method.
18335         Resolves an argument, but allows a MethodGroup to be returned.
18336         This is used when invoking a delegate.
18337
18338         * TODO: Updated a bit.
18339
18340 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18341
18342         Fixed compilation with csc.
18343
18344         * ecore.cs: Expression.Error made public. Is this correct? Should
18345         Warning be made public too?
18346
18347         * expression.cs: use ea.Location instead of ea.loc.
18348         [FIXME:  Filed as bug #28607: MCS must report these errors.]
18349
18350 2002-08-06  Martin Baulig  <martin@gnome.org>
18351
18352         * ecore.cs (Expression.loc): Moved the location here instead of
18353         duplicating it in all derived classes.
18354         (Expression.Location): New public property.
18355         (Expression.Error, Expression.Warning): Made them non-static and
18356         removed the location argument.
18357         (Expression.Warning): Added overloaded version which takes an
18358         `int level' argument.
18359         (Expression.Error118): Make this non-static and removed the
18360         expression and location arguments.
18361         (TypeExpr): Added location argument to the constructor.
18362
18363         * expression.cs (StaticCallExpr): Added location argument to
18364         the constructor.
18365         (Indirection, PointerArithmetic): Likewise.
18366         (CheckedExpr, UnCheckedExpr): Likewise.
18367         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
18368         (StringPtr): Likewise.
18369
18370
18371 2002-08-05  Martin Baulig  <martin@gnome.org>
18372
18373         * expression.cs (BaseAccess.DoResolve): Actually report errors.
18374
18375         * assign.cs (Assign.DoResolve): Check whether the source
18376         expression is a value or variable.
18377
18378         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
18379         while resolving the corresponding blocks.
18380
18381         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
18382         an error, don't silently return null.
18383
18384         * statement.cs (Block.AddVariable): Do the error reporting here
18385         and distinguish between CS0128 and CS0136.
18386         (Block.DoResolve): Report all unused labels (warning CS0164).
18387         (LabeledStatement): Pass the location to the constructor.
18388         (LabeledStatement.HasBeenReferenced): New property.
18389         (LabeledStatement.Resolve): Set it to true here.
18390
18391         * statement.cs (Return.Emit): Return success even after reporting
18392         a type mismatch error (CS0126 or CS0127), this is what csc does and
18393         it avoids confusing the users with any consecutive errors.
18394
18395 2002-08-05  Martin Baulig  <martin@gnome.org>
18396
18397         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
18398
18399         * const.cs (Const.LookupConstantValue): Catch circular definitions.
18400
18401         * expression.cs (MemberAccess.DoResolve): Silently return if an
18402         error has already been reported.
18403
18404         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
18405         error has already been reported.
18406
18407 2002-08-05  Martin Baulig  <martin@gnome.org>
18408
18409         * statement.cs (UsageVector): Only initialize the `parameters'
18410         vector if we actually have any "out" parameters.
18411
18412 2002-08-05  Martin Baulig  <martin@gnome.org>
18413
18414         * expression.cs (Binary.ResolveOperator): When combining delegates,
18415         they must have the same type.
18416
18417 2002-08-05  Martin Baulig  <martin@gnome.org>
18418
18419         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
18420         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
18421         work with the ms runtime and we also don't need it: if we're a
18422         PropertyBuilder and not in the `indexer_arguments' hash, then we
18423         are a property and not an indexer.
18424
18425         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
18426         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
18427         since the latter one doesn't work with the ms runtime.
18428
18429 2002-08-03  Martin Baulig  <martin@gnome.org>
18430
18431         Fixed bugs #27998 and #22735.
18432
18433         * class.cs (Method.IsOperator): New public field.
18434         (Method.CheckBase): Report CS0111 if there's already a method
18435         with the same parameters in the current class.  Report CS0508 when
18436         attempting to change the return type of an inherited method.
18437         (MethodData.Emit): Report CS0179 if a method doesn't have a body
18438         and it's not marked abstract or extern.
18439         (PropertyBase): New abstract base class for Property and Indexer.
18440         (PropertyBase.CheckBase): Moved here from Property and made it work
18441         for indexers.
18442         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
18443         the same so we can reuse it there.
18444         (Property, Indexer): Derive from PropertyBase.
18445         (MethodSignature.inheritable_property_signature_filter): New delegate
18446         to find properties and indexers.
18447
18448         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
18449         argument and improved error reporting.
18450
18451         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
18452         EmptyReadOnlyParameters and made it a property.
18453
18454         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
18455         version of this method which takes a `PropertyInfo indexer'.
18456         (TypeManager.RegisterIndexer): New method.
18457
18458         * class.cs: Added myself as author of this file :-)
18459
18460 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18461
18462         * class.cs: fixed compilation on windoze.
18463
18464 2002-08-03  Martin Baulig  <martin@gnome.org>
18465
18466         * interface.cs (Interface.GetInterfaceBases): Check whether all
18467         base interfaces are at least as accessible than the current one.
18468
18469         * class.cs (TypeContainer.GetClassBases): Check whether base types
18470         are at least as accessible than the current type.
18471         (TypeContainer.AsAccessible): Implemented and made non-static.
18472         (MemberBase.CheckParameters): Report errors if the accessibility
18473         checks fail.
18474
18475         * delegate.cs (Delegate.Delegate): The default visibility is
18476         internal for top-level types and private for nested types.
18477         (Delegate.Define): Report errors if the accessibility checks fail.
18478
18479         * enum.cs (Enum.Enum): The default visibility is internal for
18480         top-level types and private for nested types.
18481         (Enum.DefineType): Compute the correct visibility.
18482
18483         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
18484         function which takes a `bool is_toplevel' instead of a TypeContainer.
18485
18486         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
18487         builtin type.
18488
18489 2002-08-02  Martin Baulig  <martin@gnome.org>
18490
18491         * expression.cs (LocalVariableReferenc): Added constructor which
18492         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
18493         (LocalVariableReference.IsReadOnly): New property.
18494         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
18495         variable is readonly, use our own readonly flag to do this; you can
18496         use the new constructor to get a writable reference to a read-only
18497         variable.
18498
18499         * cs-parser.jay (foreach_statement, using_statement): Get a writable
18500         reference to the local variable.
18501
18502 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
18503
18504         * rootcontext.cs (ResolveCore): Also include System.Exception
18505
18506         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
18507         we reach an EmptyStatement.
18508
18509         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
18510         is also fine.
18511
18512         * expression.cs (Binary.ResolveOperator): Check error result in
18513         two places.
18514
18515         use brtrue/brfalse directly and avoid compares to null.
18516
18517 2002-08-02  Martin Baulig  <martin@gnome.org>
18518
18519         * class.cs (TypeContainer.Define): Define all nested interfaces here.
18520         Fixes bug #28407, added test-155.cs.
18521
18522 2002-08-01  Martin Baulig  <martin@gnome.org>
18523
18524         * class.cs (Event.EmitDefaultMethod): Make this work with static
18525         events.  Fixes #28311, added verify-3.cs.
18526
18527 2002-08-01  Martin Baulig  <martin@gnome.org>
18528
18529         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
18530         `is_disposable' fields.
18531         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
18532         `hm.is_disposable' if we're using the collection pattern.
18533         (Foreach.EmitCollectionForeach): Use the correct type for the
18534         enumerator's local variable, only emit the try/finally block if
18535         necessary (fixes #27713).
18536
18537 2002-08-01  Martin Baulig  <martin@gnome.org>
18538
18539         * ecore.cs (Expression.report118): Renamed to Error118 and made
18540         it public static.
18541
18542         * statement.cs (Throw.Resolve): Check whether the expression is of
18543         the correct type (CS0118) and whether the type derives from
18544         System.Exception (CS0155).
18545         (Catch.Resolve): New method.  Do the type lookup here and check
18546         whether it derives from System.Exception (CS0155).
18547         (Catch.CatchType, Catch.IsGeneral): New public properties.
18548
18549         * typemanager.cs (TypeManager.exception_type): Added.
18550
18551 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
18552
18553         * driver.cs: Updated About function.
18554
18555 2002-07-31  Martin Baulig  <martin@gnome.org>
18556
18557         Implemented Control Flow Analysis.
18558
18559         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
18560         (EmitContext.CurrentBranching): Added.
18561         (EmitContext.StartFlowBranching): Added.
18562         (EmitContext.EndFlowBranching): Added.
18563         (EmitContext.KillFlowBranching): Added.
18564         (EmitContext.IsVariableAssigned): Added.
18565         (EmitContext.SetVariableAssigned): Added.
18566         (EmitContext.IsParameterAssigned): Added.
18567         (EmitContext.SetParameterAssigned): Added.
18568         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
18569         Added control flow analysis stuff here.
18570
18571         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
18572         resolve the expression as lvalue.
18573         (LocalVariableReference.DoResolve): Check whether the variable has
18574         already been assigned.
18575         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
18576         the parameter as assigned here.
18577         (ParameterReference.DoResolve): Check whether the parameter has already
18578         been assigned.
18579         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
18580         expression as lvalue.
18581
18582         * statement.cs (FlowBranching): New class for the flow analysis code.
18583         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
18584         (LabeledStatement.IsDefined): New public property.
18585         (LabeledStatement.AddUsageVector): New public method to tell flow
18586         analyis that the label may be reached via a forward jump.
18587         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
18588         flow analysis.
18589         (VariableInfo.Number): New public field.  This is used by flow analysis
18590         to number all locals of a block.
18591         (Block.CountVariables): New public property.  This is the number of
18592         local variables in this block (including the locals from all parent
18593         blocks).
18594         (Block.EmitMeta): Number all the variables.
18595
18596         * statement.cs: Added flow analysis support to all classes.
18597
18598 2002-07-31  Martin Baulig  <martin@gnome.org>
18599
18600         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
18601         To get debugging messages, compile mcs with /define:MCS_DEBUG and
18602         then use this argument.
18603
18604         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
18605
18606         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
18607         use this to specify /define options.
18608
18609 2002-07-29  Martin Baulig  <martin@gnome.org>
18610
18611         * statement.cs (Fixed): Moved all code that does variable lookups
18612         and resolvings from Emit to Resolve.
18613
18614         * statement.cs (For): Moved all code that does variable lookups
18615         and resolvings from Emit to Resolve.
18616
18617         * statement.cs (Using): Moved all code that does variable lookups
18618         and resolvings from Emit to Resolve.
18619
18620 2002-07-29  Martin Baulig  <martin@gnome.org>
18621
18622         * attribute.cs (Attribute.Resolve): Explicitly catch a
18623         System.NullReferenceException when creating the
18624         CustromAttributeBuilder and report a different warning message.
18625
18626 2002-07-29  Martin Baulig  <martin@gnome.org>
18627
18628         * support.cs (ParameterData.ParameterName): Added method to
18629         get the name of a parameter.
18630
18631         * typemanager.cs (TypeManager.IsValueType): New public method.
18632
18633 2002-07-29  Martin Baulig  <martin@gnome.org>
18634
18635         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
18636         is a flag which specifies that it's either ref or out.
18637         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
18638         the out parameter to `out Parameter.Modifier mod', also set the
18639         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
18640
18641         * support.cs (InternalParameters.ParameterModifier): Distinguish
18642         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18643         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18644
18645         * expression.cs (Argument.GetParameterModifier): Distinguish
18646         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
18647         Parameter.Modifier.ISBYREF flag if it's either ref or out.
18648
18649 2002-07-29  Martin Baulig  <martin@gnome.org>
18650
18651         * expression.cs (ParameterReference.ParameterReference): Added
18652         `Location loc' argument to the constructor.
18653
18654         * cs-parser.jay: Pass location to ParameterReference.
18655
18656 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
18657
18658         * statement.cs (Try): Initialize the location.
18659
18660         * cs-parser.jay: pass location to Try.
18661
18662         * expression.cs (Unary.Reduce): Change the prototype to return
18663         whether a constant fold could be performed or not.  The result is
18664         returned in an out parameters.  In the case of Indirection and
18665         AddressOf, we want to perform the full tests.
18666
18667 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
18668
18669         * statement.cs (Statement.Emit): Flag dead code.
18670
18671 2002-07-27  Andrew Birkett  <andy@nobugs.org>
18672
18673         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
18674
18675 2002-07-27  Martin Baulig  <martin@gnome.org>
18676
18677         * class.cs (MethodData.Define): Put back call to
18678         TypeManager.AddMethod(), accidentally commented this out.
18679
18680         * report.cs (Debug): New public method to print debugging information,
18681         this is `[Conditional ("DEBUG")]'.
18682
18683 2002-07-26  Martin Baulig  <martin@gnome.org>
18684
18685         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
18686         (switch_statement): Push the current_block to the switch_stack and
18687         pop it again when we're done with the switch.
18688         (switch_section): The new block is a child of the current_block.
18689         Fixes bug #24007, added test-152.cs.
18690
18691 2002-07-27  Martin Baulig  <martin@gnome.org>
18692
18693         * expression.cs (Invocation.EmitArguments): When calling a varargs
18694         function with only its fixed arguments, we need to pass an empty
18695         array.
18696
18697 2002-07-27  Martin Baulig  <martin@gnome.org>
18698
18699         Mono 0.13 has been released.
18700
18701 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
18702
18703         * driver.cs: Rename --resource to --linkres, because that is what
18704         we do currently, we dont support --resource yet.
18705
18706         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
18707
18708 2002-07-25  Martin Baulig  <martin@gnome.org>
18709
18710         * class.cs (MethodData): New public class.  This is a `method builder'
18711         class for a method or one accessor of a Property/Indexer/Event.
18712         (MethodData.GetMethodFlags): Moved here from MemberBase.
18713         (MethodData.ApplyAttributes): Likewise.
18714         (MethodData.ApplyObsoleteAttribute): Likewise.
18715         (MethodData.ApplyConditionalAttribute): Likewise.
18716         (MethodData.ApplyDllImportAttribute): Likewise.
18717         (MethodData.CheckAbstractAndExternal): Likewise.
18718         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
18719         (MethodData.Emit): Formerly known as Method.Emit().
18720         (MemberBase): Moved everything which was specific to a single
18721         accessor/method to MethodData.
18722         (Method): Create a new MethodData and call Define() and Emit() on it.
18723         (Property, Indexer, Event): Create a new MethodData objects for each
18724         accessor and call Define() and Emit() on them.
18725
18726 2002-07-25  Martin Baulig  <martin@gnome.org>
18727
18728         Made MethodCore derive from MemberBase to reuse the code from there.
18729         MemberBase now also checks for attributes.
18730
18731         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
18732         (MemberBase.GetMethodFlags): Moved here from class Method and marked
18733         as virtual.
18734         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
18735         `CallingConventions cc' and `Attributes opt_attrs' arguments.
18736         (MemberBase.ApplyAttributes): New virtual method; applies the
18737         attributes to a method or accessor.
18738         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
18739         (MemberBase.ApplyConditionalAttribute): Likewise.
18740         (MemberBase.ApplyDllImportAttribute): Likewise.
18741         (MemberBase.CheckAbstractAndExternal): Likewise.
18742         (MethodCore.ParameterTypes): This is now a property instead of a
18743         method, it's initialized from DoDefineParameters().
18744         (MethodCore.ParameterInfo): Removed the set accessor.
18745         (MethodCore.DoDefineParameters): New protected virtual method to
18746         initialize ParameterTypes and ParameterInfo.
18747         (Method.GetReturnType): We can now simply return the MemberType.
18748         (Method.GetMethodFlags): Override the MemberBase version and add
18749         the conditional flags.
18750         (Method.CheckBase): Moved some code from Define() here, call
18751         DoDefineParameters() here.
18752         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
18753         here to avoid some larger code duplication.
18754         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
18755         ensure that abstract and external accessors don't declare a body.
18756
18757         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
18758         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
18759         lookup in the attribute's parent classes, so we need to abort as soon
18760         as we found the first match.
18761         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
18762         the attribute has no arguments.
18763
18764         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
18765         of a Method.
18766
18767 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18768
18769         * cs-parser.jay: reverted previous patch.
18770
18771 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18772
18773         * cs-parser.jay: fixed bug #22119.
18774
18775 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18776
18777         * attribute.cs: fixed compilation. The error was:
18778         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
18779         be assigned to before control leaves the current method."
18780         [FIXME:  Filed as bug #28186: MCS must report this error.]
18781
18782 2002-07-25  Martin Baulig  <martin@gnome.org>
18783
18784         * attribute.cs (Attribute.Conditional_GetConditionName): New static
18785         method to pull the condition name ouf of a Conditional attribute.
18786         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
18787         the obsolete message and error flag out of an Obsolete attribute.
18788
18789         * class.cs (Method.GetMethodFlags): New public method to get the
18790         TypeManager.MethodFlags for this method.
18791         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
18792         private methods.
18793         (Method.Define): Get and apply the Obsolete and Conditional attributes;
18794         if we're overriding a virtual function, set the new private variable
18795         `parent_method'; call the new TypeManager.AddMethod().
18796
18797         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
18798         the MethodBuilder and the Method in a PtrHashtable.
18799         (TypeManager.builder_to_method): Added for this purpose.
18800         (TypeManager.MethodFlags): Added IsObsoleteError.
18801         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
18802         Obsolete and Conditional arguments in MethodBuilders.  If we discover
18803         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
18804         the message from the attribute.
18805
18806 2002-07-24  Martin Baulig  <martin@gnome.org>
18807
18808         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
18809         preprocessor directives, ensure that the argument to #define/#undef is
18810         exactly one identifier and that it's actually an identifier.
18811
18812         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
18813         did not work ....
18814
18815 2002-07-24  Martin Baulig  <martin@gnome.org>
18816
18817         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
18818         initialize it to TypeManager.object_type in the constructor.
18819         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
18820         of the `hm.get_current' method if we're using the collection pattern.
18821         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
18822         for the explicit conversion to make it work when we're using the collection
18823         pattern and the `Current' property has a different return type than `object'.
18824         Fixes #27713.
18825
18826 2002-07-24  Martin Baulig  <martin@gnome.org>
18827
18828         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
18829         does not match, but don't report any errors.  This method is called in
18830         order for all methods in a MethodGroupExpr until a matching method is
18831         found, so we don't want to bail out if the first method doesn't match.
18832         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
18833         matches, report the 123.  Fixes #28070.
18834
18835 2002-07-24  Martin Baulig  <martin@gnome.org>
18836
18837         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
18838         TypeManager.TypeToCoreType() to the top of the method so the
18839         following equality checks will work.  Fixes #28107.
18840
18841 2002-07-24  Martin Baulig  <martin@gnome.org>
18842
18843         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
18844         operand is of type uint, and the other operand is of type sbyte,
18845         short or int, the operands are converted to type long." -
18846         Actually do what this comment already told us.  Fixes bug #28106,
18847         added test-150.cs.
18848
18849 2002-07-24  Martin Baulig  <martin@gnome.org>
18850
18851         * class.cs (MethodBase): New abstract class.  This is now a base
18852         class for Property, Indexer and Event to avoid some code duplication
18853         in their Define() and DefineMethods() methods.
18854         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
18855         generic methods for Define() and DefineMethods().
18856         (FieldBase): Derive from MemberBase, not MemberCore.
18857         (Property): Derive from MemberBase, not MemberCore.
18858         (Property.DefineMethod): Moved all the code from this method to the
18859         new MethodBase.DefineAccessor(), just call it with appropriate
18860         argumetnts.
18861         (Property.Define): Call the new Property.DoDefine(), this does some
18862         sanity checks and we don't need to duplicate the code everywhere.
18863         (Event): Derive from MemberBase, not MemberCore.
18864         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
18865         accessors, this will also make them work with interface events.
18866         (Indexer): Derive from MemberBase, not MemberCore.
18867         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
18868         (Indexer.Define): Use the new MethodBase functions.
18869
18870         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
18871         argument to the constructor.
18872         (Interface.FindMembers): Added support for interface events.
18873         (Interface.PopluateEvent): Implemented.
18874
18875         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
18876
18877 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
18878
18879         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
18880         but this is required to check for a method name being the same as
18881         the containing class.  
18882
18883         Handle this now.
18884
18885 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18886
18887         * interface.cs: initialize variable.
18888
18889 2002-07-23  Martin Baulig  <martin@gnome.org>
18890
18891         Implemented the IndexerName attribute in interfaces.
18892
18893         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
18894         name if this is an explicit interface implementation.
18895         (Indexer.InterfaceIndexerName): New public variable.  If we're
18896         implementing an interface indexer, this is the IndexerName in that
18897         interface.  Otherwise, it's the IndexerName.
18898         (Indexer.DefineMethod): If we're implementing interface indexer,
18899         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
18900         and Pending.ImplementIndexer methods.
18901         (Indexer.Define): Also define the PropertyBuilder if we're
18902         implementing an interface indexer and this is neither an explicit
18903         interface implementation nor do the IndexerName match the one in
18904         the interface.
18905
18906         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
18907         If a method is defined here, then we always need to create a proxy
18908         for it.  This is used when implementing interface indexers.
18909         (Pending.IsInterfaceIndexer): New public method.
18910         (Pending.ImplementIndexer): New public method.
18911         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
18912         This is used when implementing interface indexers to define a proxy
18913         if necessary.
18914         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
18915         define a proxy if necessary.
18916
18917         * interface.cs (Interface.IndexerName): New public variable.
18918         (Interface.PopulateIndexer): Set the IndexerName.
18919         (Interface.DefineIndexers): New private method.  Populate all the
18920         indexers and make sure their IndexerNames match.
18921
18922         * typemanager.cs (IndexerPropertyName): Added support for interface
18923         indexers.
18924
18925 2002-07-22  Martin Baulig  <martin@gnome.org>
18926
18927         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
18928         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
18929         ret if HasReturnLabel.
18930         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
18931         variables.
18932
18933         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
18934         and set the ec.LoopBeginTryCatchLevel.
18935         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
18936         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
18937         the current ec.TryCatchLevel, the branch goes out of an exception
18938         block.  In this case, we need to use Leave and not Br.
18939
18940 2002-07-22  Martin Baulig  <martin@gnome.org>
18941
18942         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
18943         block unless the block does not always return or it is contained in
18944         another try { ... } catch { ... } block.  Fixes bug #26506.
18945         Added verify-1.cs to the test suite.
18946
18947 2002-07-22  Martin Baulig  <martin@gnome.org>
18948
18949         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
18950         then we do not always return.  Fixes bug #24985.
18951
18952 2002-07-22  Martin Baulig  <martin@gnome.org>
18953
18954         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
18955         lookup on a per-class level; ie. walk up the class hierarchy until we
18956         found at least one applicable method, then choose the best among them.
18957         Fixes bug #24463 and test-29.cs.
18958
18959 2002-07-22  Martin Baulig  <martin@gnome.org>
18960
18961         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
18962         return types of the methods.  The return type is not part of the
18963         signature and we must not check it to make the `new' modifier work.
18964         Fixes bug #27999, also added test-147.cs.
18965         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
18966
18967         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
18968         on the method's return type.
18969
18970 2002-07-21  Martin Baulig  <martin@gnome.org>
18971
18972         * assign.cs: Make this work if the rightmost source is a constant and
18973         we need to do an implicit type conversion.  Also adding a few more tests
18974         to test-38.cs which should have caught this.
18975
18976         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
18977         target in the makefile for this.  The makefile.gnu is primarily intended
18978         for end-users who don't want to debug the compiler.
18979
18980 2002-07-21  Martin Baulig  <martin@gnome.org>
18981
18982         * assign.cs: Improved the Assign class so it can now handle embedded
18983         assignments (X = Y = Z = something).  As a side-effect this'll now also
18984         consume less local variables.  test-38.cs now passes with MCS, added
18985         a few new test cases to that test.
18986
18987 2002-07-20  Martin Baulig  <martin@gnome.org>
18988
18989         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
18990         instructions.  Fixes bug #27977, also added test-146.cs.
18991
18992 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18993
18994         * cs-tokenizer.cs: fixed getHex ().
18995
18996 2002-07-19  Martin Baulig  <martin@gnome.org>
18997
18998         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
18999         not Type.GetType() to lookup the array type.  This is needed when
19000         we're constructing an array of a user-defined type.
19001         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
19002         single-dimensional arrays, but also for single-dimensial arrays of
19003         type decimal.
19004
19005 2002-07-19  Martin Baulig  <martin@gnome.org>
19006
19007         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
19008         this function is called, it's not allowed to share LocalBuilders
19009         among ILGenerators.
19010
19011 2002-07-19  Martin Baulig  <martin@gnome.org>
19012
19013         * expression.cs (Argument.Resolve): Report an error 118 when trying
19014         to pass a type as argument.
19015
19016 2002-07-18  Martin Baulig  <martin@gnome.org>
19017
19018         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
19019         Conv_R_Un for the signed `long' type.
19020
19021 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
19022
19023         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
19024         `expr' for the temporary result, as that will fail if we do
19025         multiple resolves on the same expression.
19026
19027 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
19028
19029         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
19030         ec.TypeContainer for looking up aliases. 
19031
19032         * class.cs (TypeContainer): Remove LookupAlias from here.
19033
19034         * decl.cs (DeclSpace); Move here.
19035
19036 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
19037
19038         * class.cs (FindMembers): Only call filter if the constructor
19039         bulider is not null.
19040
19041         Also handle delegates in `NestedTypes' now.  Now we will perform
19042         type lookups using the standard resolution process.  This also
19043         fixes a bug.
19044
19045         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
19046         This uses Expressions (the limited kind that can be parsed by the
19047         tree) instead of strings.
19048
19049         * expression.cs (ComposedCast.ToString): Implement, used to flag
19050         errors since now we have to render expressions.
19051
19052         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
19053         FormArrayType. 
19054
19055         * ecore.cs (SimpleName.ToString): ditto.
19056
19057         * cs-parser.jay: Instead of using strings to assemble types, use
19058         Expressions to assemble the type (using SimpleName, ComposedCast,
19059         MemberAccess).  This should fix the type lookups in declarations,
19060         because we were using a different code path for this.
19061
19062         * statement.cs (Block.Resolve): Continue processing statements
19063         even when there is an error.
19064
19065 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
19066
19067         * class.cs (Event.Define): Also remove the `remove' method from
19068         the list of pending items.
19069
19070         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
19071         generate more compact code. 
19072
19073 2002-07-17  Martin Baulig  <martin@gnome.org>
19074
19075         * const.cs (Const.LookupConstantValue): Add support for constant
19076         `unchecked' and `checked' expressions.
19077         Also adding test case test-140.cs for this.
19078
19079 2002-07-17  Martin Baulig  <martin@gnome.org>
19080
19081         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
19082         check whether mi.ReturnType implements the IEnumerator interface; the
19083         `==' and the IsAssignableFrom() will fail in this situation.
19084
19085 2002-07-16  Ravi Pratap  <ravi@ximian.com>
19086
19087         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
19088         here too.
19089
19090 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19091
19092         * expression.cs: fixed bug #27811.
19093
19094 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
19095
19096         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
19097         Molaro: when we are a ref, the value already contains a pointer
19098         value, do not take the address of it.
19099
19100 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
19101         * removed mb-parser.jay and mb-tokenizer.cs
19102
19103 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19104
19105         * expression.cs: check against the building corlib void type.
19106
19107 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
19108
19109         * ecore.cs: fix for valuetype static readonly fields: when 
19110         initializing them, we need their address, not the address of a copy.
19111
19112 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
19113
19114         * typemanager.cs: register also enum_type in corlib.
19115
19116 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19117
19118         * class.cs: allow calling this (but not base) initializers in structs.
19119
19120 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
19121
19122         * ecore.cs: make sure we compare against the building base types
19123         in GetTypeSize ().
19124
19125 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
19126
19127         * typemanager.cs: fix TypeToCoreType() to handle void and object
19128         (corlib gets no more typerefs after this change).
19129
19130 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
19131
19132         * expression.cs (ArrayCreation.EmitArrayArguments): use
19133         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
19134
19135         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
19136         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
19137         array indexes, the runtime actually forbids them.
19138
19139         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
19140         for array arguments here.
19141
19142         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
19143         instead of the default for ValueTypes.
19144
19145         (New.DoEmit): Use IsValueType instead of
19146         IsSubclassOf (value_type)
19147         (New.DoResolve): ditto.
19148         (Invocation.EmitCall): ditto.
19149
19150         * assign.cs (Assign): ditto.
19151
19152         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
19153         Statements *are* currently doing part of their resolution during
19154         Emit.  
19155
19156         Expressions do always resolve during resolve, but statements are
19157         only required to propagate resolution to their children.
19158
19159 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
19160
19161         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
19162
19163         (LoadAssembly): Do not add the dll if it is already specified
19164
19165         (MainDriver): Add the System directory to the link path at the end,
19166         after all the other -L arguments. 
19167
19168         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
19169         wrong opcode for loading bytes and bools (ldelem.i1 instead of
19170         ldelem.u1) and using the opposite for sbytes.
19171
19172         This fixes Digger, and we can finally run it.
19173
19174         * driver.cs (UnixParseOption): Move the option parsing here.  
19175         (CSCParseOption): Implement CSC-like parsing of options.
19176
19177         We now support both modes of operation, the old Unix way, and the
19178         new CSC-like way.  This should help those who wanted to make cross
19179         platform makefiles.
19180
19181         The only thing broken is that /r:, /reference: and /lib: are not
19182         implemented, because I want to make those have the same semantics
19183         as the CSC compiler has, and kill once and for all the confussion
19184         around this.   Will be doing this tomorrow.
19185
19186         * statement.cs (Unsafe.Resolve): The state is checked during
19187         resolve, not emit, so we have to set the flags for IsUnsfe here.
19188
19189 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19190
19191         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
19192         not catch the Error_ObjectRefRequired in SimpleName (as it is
19193         possible to have a class/instance variable name that later gets
19194         deambiguated), we have to check this here.      
19195
19196 2002-07-10  Ravi Pratap  <ravi@ximian.com>
19197
19198         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
19199         make static and put into Expression.
19200
19201         (Event.Define): Register the private field of the event with the 
19202         TypeManager so that GetFieldFromEvent can get at it.
19203
19204         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
19205         keep track of the private field associated with an event which
19206         has no accessors.
19207
19208         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
19209         private field.
19210
19211         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
19212
19213 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
19214
19215         * expression.cs (Binary.EmitBranchable): this routine emits the
19216         Binary expression in a branchable context.  This basically means:
19217         we need to branch somewhere, not just get the value on the stack.
19218
19219         This works together with Statement.EmitBoolExpression.
19220
19221         * statement.cs (Statement.EmitBoolExpression): Use
19222         EmitBranchable. 
19223
19224 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
19225
19226         * statement.cs (For): Reduce the number of jumps in loops.
19227
19228         (For): Implement loop inversion for the For statement.
19229
19230         (Break): We can be breaking out of a Try/Catch controlled section
19231         (foreach might have an implicit try/catch clause), so we need to
19232         use Leave instead of Br.
19233
19234         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
19235         now).  If the instace expression supports IMemoryLocation, we use
19236         the AddressOf method from the IMemoryLocation to extract the
19237         address instead of emitting the instance.
19238
19239         This showed up with `This', as we were emitting the instance
19240         always (Emit) instead of the Address of This.  Particularly
19241         interesting when This is a value type, as we dont want the Emit
19242         effect (which was to load the object).
19243
19244 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
19245
19246         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
19247
19248         * statement.cs (Checked): Set the CheckedState during the resolve
19249         process too, as the ConvCast operations track the checked state on
19250         the resolve process, and not emit.
19251
19252         * cs-parser.jay (namespace_member_declaration): Flag that we have
19253         found a declaration when we do.  This is used to flag error 1529
19254
19255         * driver.cs: Report ok when we display the help only.
19256
19257 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
19258
19259         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
19260
19261 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
19262
19263         * cs-tokenizer.cs (define): We also have to track locally the
19264         defines.  AllDefines is just used for the Conditional Attribute,
19265         but we also need the local defines for the current source code. 
19266
19267 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
19268
19269         * statement.cs (While, For, Do): These loops can exit through a
19270         Break statement, use this information to tell whether the
19271         statement is the last piece of code.
19272
19273         (Break): Flag that we break.
19274
19275         * codegen.cs (EmitContexts): New `Breaks' state variable.
19276
19277 2002-07-03  Martin Baulig  <martin@gnome.org>
19278
19279         * class.cs (TypeContainer.MethodModifiersValid): Allow override
19280         modifiers in method declarations in structs.  Otherwise, you won't
19281         be able to override things like Object.Equals().
19282
19283 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19284
19285         * class.cs (Method, Property, Indexer): Do not allow the public
19286         modifier to be used in explicit interface implementations.
19287
19288         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
19289         override modifiers in method declarations in structs
19290
19291 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
19292
19293         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
19294         integer or real overflow, report an error
19295
19296 2002-07-02  Martin Baulig  <martin@gnome.org>
19297
19298         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
19299         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
19300         to tell the runtime about our newly created System.Object and
19301         System.ValueType types.
19302
19303 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
19304
19305         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
19306         struct instead of Ldarg/Starg.
19307
19308 2002-07-02  Martin Baulig  <martin@gnome.org>
19309
19310         * expression.cs (Indirection.Indirection): Call
19311         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
19312
19313 2002-07-02  Martin Baulig  <martin@gnome.org>
19314
19315         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
19316         ValueType, call TypeManager.TypeToCoreType() on it.
19317         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
19318         the OpCodes.Newarr argument.
19319
19320 2002-07-02  Martin Baulig  <martin@gnome.org>
19321
19322         * expression.cs (Invocation.EmitCall): When compiling corlib,
19323         replace all calls to the system's System.Array type to calls to
19324         the newly created one.
19325
19326         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
19327         System.Array methods.
19328         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
19329         from the system's System.Array type which must be replaced.
19330
19331 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
19332
19333         * typemanager.cs: load unverifiable_code_ctor so we can build
19334         corlib using the correct type. Avoid using GetTypeCode() with
19335         TypeBuilders.
19336         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
19337         TypeManager.object_type to allow building corlib.
19338
19339 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
19340
19341         * ecore.cs: handle System.Enum separately in LoadFromPtr().
19342
19343 2002-07-01  Martin Baulig  <martin@gnome.org>
19344
19345         * class.cs: Make the last change actually work, we need to check
19346         whether `ifaces != null' to avoid a crash.
19347
19348 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
19349
19350         * class.cs: when we build structs without fields that implement
19351         interfaces, we need to add the interfaces separately, since there is
19352         no API to both set the size and add the interfaces at type creation
19353         time.
19354
19355 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
19356
19357         * expression.cs: the dimension arguments to the array constructors
19358         need to be converted if they are a long.
19359
19360 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
19361
19362         * class.cs: don't emit ldarg.0 if there is no parent constructor
19363         (fixes showstopper for corlib).
19364
19365 2002-06-29  Martin Baulig  <martin@gnome.org>
19366
19367         MCS now compiles corlib on GNU/Linux :-)
19368
19369         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
19370         ie. check for MethodImplOptions.InternalCall.
19371
19372         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
19373         and TypeManager.attribute_type are null, so we must explicitly check
19374         whether parent is not null to find out whether it's an attribute type.
19375         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
19376         and SetBuilder, not only if the property is neither abstract nor external.
19377         This is necessary to set the MethodImplOptions on the accessor methods.
19378         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
19379         SetBuilder, see Property.Emit().
19380
19381         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
19382         populate "System.Object", "System.ValueType" and "System.Attribute" since
19383         they've already been populated from BootCorlib_PopulateCoreTypes().
19384
19385 2002-06-29  Martin Baulig  <martin@gnome.org>
19386
19387         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
19388         is the NullLiteral, we also need to make sure that target_type is not
19389         an enum type.   
19390
19391 2002-06-29  Martin Baulig  <martin@gnome.org>
19392
19393         * rootcontext.cs (RootContext.ResolveCore): We must initialize
19394         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
19395         before calling BootstrapCorlib_ResolveDelegate ().
19396
19397 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19398
19399         * statement.cs: fixed build-breaker. All tests passed ok.
19400
19401 2002-06-27  Martin Baulig  <martin@gnome.org>
19402
19403         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
19404         for System.Decimal when compiling corlib.
19405
19406 2002-06-27  Martin Baulig  <martin@gnome.org>
19407
19408         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
19409         switch blocks which contain nothing but a default clause.
19410
19411 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
19412
19413        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
19414
19415 2002-06-27  Martin Baulig  <martin@gnome.org>
19416
19417         * ecore.cs (PropertyExpr.PropertyExpr): Call
19418         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
19419
19420         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
19421         is already a TypeBuilder.
19422
19423 2002-06-27  Martin Baulig  <martin@gnome.org>
19424
19425         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
19426         `target_type == TypeManager.array_type', not IsAssignableFrom() in
19427         the "from an array-type to System.Array" case.  This makes it work
19428         when compiling corlib.
19429
19430 2002-06-27  Martin Baulig  <martin@gnome.org>
19431
19432         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
19433         non-static PropertyExpr, set its InstanceExpression.  This makes
19434         the `ICollection.Count' property work in System/Array.cs.
19435
19436 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
19437
19438         * driver.cs: Made error handling more consistent.  Errors now
19439         tracked by Report class, so many methods which used to return int
19440         now return void.  Main() now prints success/failure and 
19441         errors/warnings message.
19442
19443         Renamed '--probe' compiler argument to '--expect-error'.  Removed
19444         the magic number return values (123 and 124).  Now, if the
19445         expected error occurs, the compiler exits with success (exit value
19446         0).  If the compilation completes without seeing that particular
19447         error, the compiler exits with failure (exit value 1).  The
19448         makefile in mcs/errors has been changed to handle the new behaviour.
19449
19450         * report.cs: Made 'expected error' number a property and renamed
19451         it from 'Probe' to 'ExpectedError'.
19452
19453         * genericparser.cs: Removed error handling support, since it is
19454         now all done by Report class.
19455
19456         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
19457         class, so parse() no longer returns an int.
19458
19459         * namespace.cs: Use Report.Error instead of GenericParser.error
19460
19461 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
19462
19463         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
19464         TypeContainer.AddOperator): At the front of the list put the
19465         explicit implementations, so they get resolved/defined first. 
19466
19467 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
19468
19469         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
19470         interface type is implemented by this TypeContainer.  Used during
19471         explicit interface implementation.
19472
19473         (Property.Define, Indexer.Define, Method.Define): Validate that
19474         the given interface in the explicit implementation is one of the
19475         base classes for the containing type.
19476
19477         Also if we are explicitly implementing an interface, but there is
19478         no match in the pending implementation table, report an error.
19479
19480         (Property.Define): Only define the property if we are
19481         not explicitly implementing a property from an interface.  Use the
19482         correct name also for those properties (the same CSC uses,
19483         although that is really not needed).
19484
19485         (Property.Emit): Do not emit attributes for explicitly implemented
19486         properties, as there is no TypeBuilder.
19487
19488         (Indexer.Emit): ditto.
19489
19490         Hiding then means that we do not really *implement* a pending
19491         implementation, which makes code fail.
19492
19493 2002-06-22  Martin Baulig  <martin@gnome.org>
19494
19495         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
19496         the return value of Object.GetType().  [FIXME: we need to do this whenever
19497         we get a type back from the reflection library].
19498
19499 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
19500
19501         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
19502
19503 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
19504
19505         * attribute.cs: Return null if we can not look up the type.
19506
19507         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
19508         the interface types found.
19509
19510         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
19511         interface types found.
19512
19513         * typemanager.cs (GetInterfaces): Make this routine returns alll
19514         the interfaces and work around the lame differences between
19515         System.Type and System.Reflection.Emit.TypeBuilder in the results
19516         result for GetInterfaces.
19517
19518         (ExpandInterfaces): Given an array of interface types, expand and
19519         eliminate repeated ocurrences of an interface.  This expands in
19520         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
19521         be IA, IB, IC.
19522
19523 2002-06-21  Martin Baulig  <martin@gnome.org>
19524
19525         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
19526         on System.Enum.
19527
19528 2002-06-21  Martin Baulig  <martin@gnome.org>
19529
19530         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
19531         and called with one of the core types, return the corresponding typebuilder for
19532         that type.
19533
19534         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
19535         element type.
19536
19537 2002-06-21  Martin Baulig  <martin@gnome.org>
19538
19539         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
19540         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
19541         (Expression.ConvertReferenceExplicit): Likewise.
19542
19543         * expression.cs (ElementAccess.DoResolve): Likewise.
19544         (ElementAccess.DoResolveLValue): Likewise.
19545
19546 2002-06-10  Martin Baulig  <martin@gnome.org>
19547
19548         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
19549         add the "value" parameter to the parameter list.
19550
19551         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
19552         to our caller.
19553
19554 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
19555
19556         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
19557         the argument to an int, uint, long or ulong, per the spec.  Also
19558         catch negative constants in array creation.
19559
19560 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
19561
19562         * class.cs: do not allow the same interface to appear twice in
19563         the definition list.
19564
19565 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
19566
19567         * ecore.cs: don't use ldlen with System.Array.
19568
19569 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
19570
19571         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
19572
19573 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
19574
19575         * modifiers.cs: produce correct field attributes for protected
19576         internal. Easy fix so miguel can work on ther harder stuff:-)
19577
19578 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
19579
19580         * pending.cs: New file.  Move the code from class.cs here.
19581         Support clearning the pending flag for all methods (when not doing
19582         explicit interface implementation).
19583
19584 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
19585
19586         * rootcontext.cs: added a couple more types needed to bootstrap.
19587
19588 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
19589
19590         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
19591         constructor in the type, instead of any constructor in the type
19592         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
19593         a bug in the Mono runtime when applying the params attribute). 
19594
19595 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
19596         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
19597
19598 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
19599
19600         * expression.cs (Unary.ResolveOperator): Use TypeManager
19601         to resolve the type.
19602
19603 2002-06-13  Ravi Pratap  <ravi@ximian.com>
19604
19605         * cs-parser.jay (enum_member_declaration): Pass in the attributes
19606         attached.
19607
19608         * enum.cs (AddEnumMember): Add support to store the attributes associated 
19609         with each member too.
19610
19611         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
19612         field builders too - this takes care of the enum member case.
19613
19614 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
19615
19616         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
19617         address-of operator on both value types and pointers.
19618
19619 2002-06-10  Martin Baulig  <martin@gnome.org>
19620
19621         * interface.cs (Interface.PopulateIndexer): Add the indexer's
19622         PropertyBuilder to the `property_builders' list.
19623
19624         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
19625         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
19626         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
19627         find any indexers which are inherited from an interface.
19628
19629 2002-06-09  Martin Baulig  <martin@gnome.org>
19630
19631         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
19632         the same type as the constant if necessary.  There's also a test-130.cs
19633         for this.
19634
19635         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
19636
19637         * typemanager.cs (TypeManager.ChangeType): Previously known as
19638         Enum.ChangeEnumType().
19639
19640 2002-06-09  Martin Baulig  <martin@gnome.org>
19641
19642         * expression.cs (Cast.TryReduce): Added support for consts.
19643
19644 2002-06-08  Ravi Pratap  <ravi@ximian.com>
19645
19646         * class.cs (Accessor): Hold attributes information so we can pass
19647         it along.
19648
19649         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
19650         Modify to pass in attributes attached to the methods.
19651
19652         (add_accessor_declaration, remove_accessor_declaration): Ditto.
19653
19654         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
19655         to handle the Accessor kind :-)
19656
19657         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
19658
19659 2002-06-08  Martin Baulig  <martin@gnome.org>
19660
19661         * expression.cs (Unary.TryReduceNegative): Added support for
19662         ULongConstants.
19663
19664 2002-06-08  Martin Baulig  <martin@gnome.org>
19665
19666         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
19667         name can't be found in the `defined_names' - the caller will do a
19668         MemberLookup in this case and thus find methods in System.Enum
19669         such as Enum.IsDefined().
19670
19671 2002-06-08  Martin Baulig  <martin@gnome.org>
19672
19673         * enum.cs (Enum.ChangeEnumType): This is a custom version of
19674         Convert.ChangeType() which works with TypeBuilder created types.
19675         (Enum.LookupEnumValue, Enum.Define): Use it here.
19676
19677         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
19678         `TypeBuilder.BaseType != null' check.
19679         (TypeContainer.FindMembers): Only lookup parent members if we
19680         actually have a parent.
19681         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
19682         (ConstructorInitializer.Resolve): Likewise.
19683
19684         * interface.cs (Interface.FindMembers): Added
19685         `TypeBuilder.BaseType != null' check.
19686
19687         * rootcontext.cs (RootContext.ResolveCore): Added
19688         "System.Runtime.CompilerServices.IndexerNameAttribute" to
19689         classes_second_stage.
19690
19691         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
19692         debug_type and trace_type when compiling with --nostdlib.       
19693
19694 2002-06-07  Martin Baulig  <martin@gnome.org>
19695
19696         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
19697         (AddField): Set it to true when adding a non-static field.
19698         (DefineType): Use `have_nonstatic_fields' to find out whether we
19699         have non-static fields, not `Fields != null'.
19700
19701 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
19702
19703         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
19704         dereferencing a null on the static-field code path)
19705
19706 2002-05-30  Martin Baulig  <martin@gnome.org>
19707
19708         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
19709         to take command line arguments.  Use reflection to call the new
19710         custom `Initialize' function on the symbol writer and pass it the
19711         command line arguments.
19712
19713         * driver.cs (--debug-args): New command line argument to pass command
19714         line arguments to the symbol writer.
19715
19716 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
19717
19718         * assign.cs (DoResolve): Forgot to do the implicit conversion to
19719         the target type for indexers and properties.  Thanks to Joe for
19720         catching this.
19721
19722 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
19723
19724         * typemanager.cs (MethodFlags): returns the method flags
19725         (Obsolete/ShouldIgnore) that control warning emission and whether
19726         the invocation should be made, or ignored. 
19727
19728         * expression.cs (Invocation.Emit): Remove previous hack, we should
19729         not do this on matching a base type, we should do this based on an attribute
19730
19731         Only emit calls to System.Diagnostics.Debug and
19732         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
19733         on the command line.
19734
19735         * rootcontext.cs: Global settings for tracing and debugging.
19736
19737         * cs-tokenizer.cs (define): New utility function to track
19738         defines.   Set the global settings for TRACE and DEBUG if found.
19739
19740 2002-05-25  Ravi Pratap  <ravi@ximian.com>
19741
19742         * interface.cs (Populate*): Pass in the TypeContainer as well as
19743         the DeclSpace as parameters so that we can create EmitContexts and
19744         then use that to apply attributes etc.
19745
19746         (PopulateMethod, PopulateEvent, PopulateProperty)
19747         (PopulateIndexer): Apply attributes everywhere.
19748
19749         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
19750         etc.
19751
19752         (ApplyAttributes): Update accordingly.
19753
19754         We now apply interface attributes for all members too.
19755
19756 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
19757
19758         * class.cs (Indexer.Define); Correctly check if we are explicit
19759         implementation (instead of checking the Name for a ".", we
19760         directly look up if the InterfaceType was specified).
19761
19762         Delay the creation of the PropertyBuilder.
19763
19764         Only create the PropertyBuilder if we are not an explicit
19765         interface implementation.   This means that explicit interface
19766         implementation members do not participate in regular function
19767         lookups, and hence fixes another major ambiguity problem in
19768         overload resolution (that was the visible effect).
19769
19770         (DefineMethod): Return whether we are doing an interface
19771         implementation. 
19772
19773         * typemanager.cs: Temporary hack until we get attributes in
19774         interfaces (Ravi is working on that) and we get IndexerName
19775         support in interfaces.
19776
19777         * interface.cs: Register the indexers as properties.
19778
19779         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
19780         warning, I have verified that this is a bug in the .NET runtime
19781         (JavaScript suffers of the same problem).
19782
19783         * typemanager.cs (MemberLookup): When looking up members for
19784         interfaces, the parent of an interface is the implicit
19785         System.Object (so we succeed in searches of Object methods in an
19786         interface method invocation.  Example:  IEnumerable x;  x.ToString
19787         ()) 
19788
19789 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
19790
19791         * class.cs (Event): Events should also register if they do
19792         implement the methods that an interface requires.
19793
19794         * typemanager.cs (MemberLookup); use the new GetInterfaces
19795         method. 
19796
19797         (GetInterfaces): The code used to lookup interfaces for a type is
19798         used in more than one place, factor it here. 
19799
19800         * driver.cs: Track the errors at the bottom of the file, we kept
19801         on going.
19802
19803         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
19804         instance if the method we are calling is static!
19805
19806 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
19807
19808         * attribute.cs (ApplyAttributes): Make this function filter out
19809         the IndexerName attribute (as that attribute in reality is never
19810         applied) and return the string constant for the IndexerName
19811         attribute. 
19812
19813         * class.cs (TypeContainer.Emit): Validate that all the indexers
19814         have the same IndexerName attribute, and if so, set the
19815         DefaultName attribute on the class. 
19816
19817         * typemanager.cs: The return value might contain other stuff (not
19818         only methods).  For instance, consider a method with an "Item"
19819         property and an Item method.
19820
19821         * class.cs: If there is a problem with the parameter types,
19822         return. 
19823
19824 2002-05-24  Ravi Pratap  <ravi@ximian.com>
19825
19826         * ecore.cs (ImplicitConversionExists): Wrapper function which also
19827         looks at user defined conversion after making a call to 
19828         StandardConversionExists - we need this for overload resolution.
19829
19830         * expression.cs : Update accordingly the various method calls.
19831
19832         This fixes 2 bugs filed against implicit user defined conversions 
19833
19834 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
19835
19836         * statement.cs: Track the result of the assignment.
19837
19838 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
19839
19840         * expression.cs (MemberAccess): Improved error reporting for
19841         inaccessible members.
19842
19843 2002-05-22  Martin Baulig  <martin@gnome.org>
19844
19845         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
19846         itself with debugging support.
19847
19848 2002-05-22  Martin Baulig  <martin@gnome.org>
19849
19850         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
19851         Removed, this isn't needed anymore.
19852
19853 2002-05-20  Martin Baulig  <martin@gnome.org>
19854
19855         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
19856         be underlying type for an enum.
19857
19858 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
19859
19860         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
19861         that splits out the loading of just the core types.
19862
19863         * rootcontext.cs (ResolveCore): Split the struct resolution in
19864         two, so we can load the enumeration underlying types before any
19865         enums are used.
19866
19867         * expression.cs (Is): Bandaid until we fix properly Switch (see
19868         bug #24985 for details).
19869
19870         * typemanager.cs (ImplementsInterface): The hashtable will contain
19871         a null if there are no interfaces implemented.
19872
19873 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
19874
19875         * cs-parser.jay (indexer_declarator): It is fine to have array
19876         parameters
19877
19878 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19879
19880         * typemanager.cs: (RegisterBuilder): New function used to register
19881         TypeBuilders that implement interfaces.  Since
19882         TypeBuilder.GetInterfaces (as usual) does not work with lame
19883         Reflection.Emit. 
19884         (AddUserType): register interfaces.
19885
19886         (ImplementsInterface): Use the builder_to_ifaces hash if we are
19887         dealing with TypeBuilder.  Also, arrays are showing up as
19888         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
19889         methods can not be invoked on them!
19890
19891         * ecore.cs (ExplicitReferenceConversionExists): Made public.
19892         (ImplicitReferenceConversionExists): Split out from
19893         StandardConversionExists. 
19894
19895         * expression.cs (As): We were only implementing one of the three
19896         cases for the as operator.  We now implement them all.
19897         (Is): Implement the various other cases for Is as well.
19898
19899         * typemanager.cs (CACHE): New define used to control if we want or
19900         not the FindMembers cache.  Seems to have a negative impact on
19901         performance currently
19902
19903         (MemberLookup): Nested types have full acess to
19904         enclosing type members
19905
19906         Remove code that coped with instance/static returns for events, we
19907         now catch this in RealFindMembers.
19908
19909         (RealFindMembers): only perform static lookup if the instance
19910         lookup did not return a type or an event.  
19911
19912 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
19913
19914         * assign.cs (CompoundAssign): We pass more semantic information
19915         now to Compound Assignments than we did before: now we have all
19916         the information at hand, and now we resolve the target *before* we
19917         do the expression expansion, which allows the "CacheValue" method
19918         to have the effect we intended (before, a [x] += 1 would generate
19919         two differen ArrayAccess expressions from the ElementAccess,
19920         during the resolution process).
19921
19922         (CompoundAssign.DoResolve): Resolve target and original_source here.
19923
19924 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
19925
19926         * expression.cs (ArrayAccess): dropped debugging information. 
19927
19928         * typemanager.cs: Small bug fix: I was always returning i_members,
19929         instead of one of i_members or s_members (depending on which had
19930         the content).
19931
19932         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
19933         method is invoked before any code generation takes place, and it
19934         is a mechanism to inform that the expression will be invoked more
19935         than once, and that the method should use temporary values to
19936         avoid having side effects
19937
19938         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
19939
19940         * ecore.cs (Expression.CacheTemporaries): Provide empty default
19941         implementation.
19942
19943         * expression.cs (Indirection, ArrayAccess): Add support for
19944         CacheTemporaries in these two bad boys. 
19945
19946         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
19947         ldobj or ldind_ref.  
19948         (StoreFromPtr): Handle stobj as well.
19949
19950         * expression.cs (UnaryMutator): Share more code.
19951
19952         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
19953         down: I was not tracking the Filter function as well, which
19954         was affecting the results of the cache.
19955
19956 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
19957
19958         * attribute.cs: Remove the hack to handle the CharSet property on
19959         StructLayouts. 
19960
19961 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
19962
19963         * attribute.cs (DoResolve): More uglyness, we now only try to
19964         resolve the attribute partially, to extract the CharSet
19965         information (only if we are a StructLayout attribute).  Otherwise 
19966
19967         (GetExtraTypeInfo): Add some code to conditionally kill in the
19968         future this.   I am more and more convinced that the .NET
19969         framework has special code to handle the attribute setting on
19970         certain elements.
19971
19972         * expression.cs (IsParamsMethodApplicable): Revert my previous
19973         foreach change here, it was wrong.
19974
19975 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
19976
19977         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
19978         (pp_expr): do not abort on unknown input, just return.
19979         (eval): abort if there are pending chars.
19980
19981         * attribute.cs (Attribute.Resolve): Positional parameters are
19982         optional.  Deal with that case.
19983
19984         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
19985         the Ansi/Unicode/Auto information for the type.
19986
19987         (TypeContainer.DefineType): instantiate the EmitContext here, as
19988         we will be using it during the type definition (to resolve
19989         attributes) and during the emit phase.
19990
19991         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
19992         to pull type information out of the attributes
19993
19994         (Attribute.Resolve): track the constructor builder, and allow for
19995         multiple invocations (structs and classes will use this).
19996
19997         * ecore.cs (MemberLookupFinal): new version with all the
19998         parameters customizable.
19999
20000         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
20001         constructors.  Return if the result value is null (as the error
20002         would have been flagged already by MemberLookupFinal)
20003
20004         Do not allow instances of abstract classes or interfaces to be
20005         created.
20006
20007         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
20008         We have to compare the assembly property here when dealing with
20009         FamANDAssem and Assembly access modifiers, because we might be
20010         creating an assembly from *modules* (that means that we are not
20011         getting TypeBuilders for types defined in other modules that are
20012         part of this assembly).
20013
20014         (Method.Emit): If the method is marked abstract and has a body,
20015         emit an error. 
20016
20017         (TypeContainer.DefineMembers): If both the defined member and the
20018         parent name match are methods, then do not emit any warnings: let
20019         the Method.Define routine take care of flagging warnings.  But if
20020         there is a mismatch (method overrides something else, or method is
20021         overriwritten by something, then emit warning).
20022
20023         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
20024         set to null, this means `do not check for the return type on the
20025         signature'. 
20026
20027         (Method.Define): set the return type for the method signature to
20028         null, so that we get methods with the same name and parameters and
20029         different return types.  This is used to flag warning 114 (you are
20030         hiding a method, and you probably want to use the new/override
20031         keywords instead).
20032
20033         * typemanager.cs (MemberLookup): Implemented proper access
20034         control, closing a long standing set of bug reports.  The problem
20035         was that the Framework only has two bits: Public and NonPublic,
20036         and NonPublic includes private and protected methods, but we need
20037         to enforce the FamANDAssem, FamOrAssem and Family. 
20038
20039 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
20040
20041         * statement.cs (GotoCase): Return true: Ammounts to giving up
20042         knowledge on whether we return or not, and letting the other case
20043         be responsible for it.
20044
20045 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
20046
20047         * driver.cs: Do not load directories for each file processed, only
20048         do it if there is a pattern.
20049
20050         * ecore.cs: Report readonly assigns here as well, as we might have
20051         been resolved only by MemberAccess.
20052
20053         (SimpleName.SimpleNameResolve): Also be useful for LValue
20054         resolution.   We need this to propagate assign to local readonly variables
20055
20056         * typemanager.cs: Use a ptrhashtable for the criteria, because we
20057         do not want to reuse potential criteria memory.
20058
20059         * class.cs (MyEventBuilder): Set reflected_type;
20060
20061         * ecore.cs (Constantify): Added support for constifying bools.
20062
20063         (RootContext.LookupType): Added a cache for values looked up in
20064         the declaration space.
20065
20066         * typemanager.cs (FindMembers): Now is a front-end to
20067         RealFindMembers, and provides a two-level hashtable-based cache to
20068         the request.  
20069
20070         15% performance improvement: from 22.5 to 19.2 seconds.
20071
20072         * expression.cs (IsParamsMethodApplicable): use foreach.
20073         (Invocation.DoResolve): ditto.
20074         (New.DoResolve): ditto.
20075         (ArrayCreation.DoResolve): ditto.
20076
20077         * ecore.cs (FindMostEncompassingType): use foreach.
20078
20079         * delegate.cs (NewDelegate.DoResolve): Use foreach
20080
20081         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
20082         (RemoveMethods): use foreach.
20083
20084         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
20085         nested foreach statements instead of for, and also break out of
20086         the inner loop once a match is found.
20087
20088         (Invocation.OverloadResolve): Use foreach, simplify the code. 
20089
20090 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
20091
20092         * cfold.cs (BinaryFold): During an enumeration evaluation context,
20093         we actually unwrap the expression to allow for extra information
20094         to be extracted. 
20095
20096         * expression.cs: Use Shr_Un on unsigned operations. 
20097
20098 2002-05-08  Ravi Pratap  <ravi@ximian.com>
20099
20100         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
20101         applicable operators was not being considered correctly. This closes
20102         the bug Miguel reported.
20103
20104 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
20105
20106         * attribute.cs: check that the type derives from System.Attribute
20107         and report the correct error in that case (moved the duplicate code to
20108         its own method, too).
20109
20110 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
20111
20112         * attribute.cs: lookup attribute type name as the spec says: first the
20113         bare attribute name and then name + "Attribute" (nant compiles with
20114         mcs after this fix).
20115
20116 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
20117
20118         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
20119         Because of the way we parse things, we should try to see if a
20120         UIntConstant can fit in an integer.
20121
20122 2002-05-07  Ravi Pratap  <ravi@ximian.com>
20123
20124         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
20125         when we are in an explicit context.
20126
20127         (ConvertReferenceExplicit): When converting from Iface type S to Class
20128         T make sure the rules are implemented as an OR.
20129
20130         * parameter.cs (ParameterType): Make it a property for now although the
20131         purpose really isn't anything immediate.
20132
20133         * expression.cs (Is*Applicable): Do better checking on the parameter type
20134         of a ref/out parameter. The ones from the system assemblies are already 
20135         marked with the correct type so we don't need to do any correction.
20136
20137         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
20138         the object type is standard too so include that.
20139
20140 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20141
20142         * ecore.cs (StandardConversionExists): Augment with missing code:
20143         deal with IntConstant, LongConstants and Enumerations.
20144
20145         * assign.cs: Report the error, instead of failing silently
20146
20147         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
20148         typecontainer that they are declared, because the
20149         typecontainer/namespace will have the list of using clauses that
20150         need to be applied.
20151
20152         Assembly Attributes were escaping the normal registration
20153         mechanism. 
20154
20155         (EmitCode): Apply attributes within an EmitContext that represents
20156         the container they were declared on.
20157
20158         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
20159
20160 2002-05-06  Ravi Pratap  <ravi@ximian.com>
20161
20162         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
20163         Revamp completely - make much cleaner as we now operate only
20164         on a set of Types.
20165
20166         (FindMostSpecificSource, FindMostSpecificTarget): New methods
20167         to implement the logic detailed in the spec more correctly.
20168
20169         (UserDefinedConversion): Update accordingly.
20170
20171 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20172
20173         * statement.cs: Return flow analysis information up.
20174
20175         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
20176         and the default.
20177
20178         (token): Do not consume an extra character before calling
20179         decimal_digits.
20180
20181 2002-05-06  Piers Haken <piersh@friskit.com>
20182
20183         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
20184
20185 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
20186
20187         * class.cs (Constructor.Emit): Set the IsStatic flag in the
20188         EmitContext during the instance constructor initializer
20189         resolution, to stop access to instance variables.
20190
20191         This is mandated by the spec, last paragraph of the `constructor
20192         initializers' section. 
20193
20194 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
20195
20196         * cs-parser.jay, class.cs (Accessor): new class used to represent
20197         an accessor (get or set).  In the past we used `null' to represent
20198         a missing accessor.  But this is ambiguous because there was no
20199         way to tell in abstract indexers/properties if one of them was
20200         specified.
20201
20202         Now there is a way of addressing that.
20203
20204         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
20205         instead of FindMembers.
20206
20207         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
20208         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
20209
20210         * attribute.cs: Treat indexers and properties as the same in terms
20211         of applying attributes
20212
20213         * ecore.cs (FindMostEncompassedType): Use statically initialized
20214         EmptyExpressions()s like we do elsewhere to avoid creating useless
20215         objects (and we take this out of the tight loop).
20216
20217         (GetConversionOperators): Move the code to extract the actual
20218         operators to a separate routine to clean things up.
20219
20220 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
20221
20222         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
20223         events are always registered FieldBuilders.
20224
20225         * class.cs (FieldBase): New class shared by Fields 
20226
20227         * delegate.cs: If we are a toplevel delegate, use our full name.
20228         If we are a nested delegate, then only use our tail name.
20229
20230 2002-05-02  Ravi Pratap  <ravi@ximian.com>
20231
20232         * expression.cs (IsApplicable): Ensure that we add the "&" to
20233         ref/out types before comparing it with the type of the argument.
20234
20235         (IsParamsMethodApplicable): Ditto.
20236
20237         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
20238         silly me ;-)
20239
20240         * delegate.cs : Handle the case when we have more than one applicable
20241         method. Flag an error only when we finish checking all.
20242
20243 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
20244
20245         * expression.cs: Add support for boolean static initializers.
20246
20247 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
20248
20249         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
20250
20251         * parameter.cs (ComputeParameterTypes,
20252         ComputeAndDefineParameterTypes): Better error handling: now we
20253         clear the `types' cache if we fail during any of the type lookups.
20254         We also return the status code correctly to our caller
20255
20256         * delegate.cs: If we fail to define a delegate, abort the extra
20257         steps. 
20258
20259         * expression.cs (Binary.ResolveOperator): for
20260         operator==(object,object) and operator !=(object, object) we also
20261         have to verify that there is an implicit conversion from one to
20262         the other.
20263
20264         (ArrayAccess.DoResolve): Array Access can operate on
20265         non-variables. 
20266
20267 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
20268
20269         * assign.cs (CompoundAssign): A new class used as a "flag" that
20270         the assignment actually is happening as part of a compound
20271         assignment operator.
20272
20273         During compound assignment, a few new rules exist to enable things
20274         like:
20275
20276         byte b |= 1 + 2
20277
20278         From the spec:
20279
20280         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
20281         to the type of x) if y is implicitly convertible to the type of x,
20282         and the operator is a builtin operator and the return type of the
20283         operator is explicitly convertible to the type of x. 
20284
20285         * rootcontext.cs: Reset warning level to 2.  4 catches various
20286         "interesting" features in mcs, we must clean this up at some
20287         point, but currently am trying to kill other bugs ;-)
20288
20289         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
20290         in container classes as well.  
20291
20292         * expression.cs (Binary.ResolveOperator): Handle string case
20293         before anything else (as operator overloading does emit an error
20294         before doing anything else).
20295
20296         This code could go away when we move to a table driven model, but
20297         i could not come up with a good plan last night.
20298
20299 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
20300
20301         * typemanager.cs (CSharpName): reimplementation using regex.
20302         * class.cs: added null check for fields in Emit
20303         * rootcontext.cs: set warninglevel to 4
20304
20305 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
20306
20307         * typemanager.cs (CSharpName): reimplemented with Lupus
20308         suggestion.
20309
20310 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
20311
20312         * statement.cs (If): correclty implement Resolve, because we were
20313         not catching sem errors in there.  The same process is needed
20314         everywhere else. 
20315         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
20316
20317
20318         (Statement.Warning_DeadCodeFound): Factorize code.
20319         (While): Report dead code here too.
20320
20321         (Statement): Added Resolve virtual method to allow
20322         for resolution split from the emit code.
20323
20324 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20325
20326         * statement.cs (EmitBoolExpression): No longer try to resolve the
20327         expression here.    
20328         (MakeBoolean): New utility function that resolve, implicitly
20329         converts to boolean and tags the expression. 
20330
20331
20332         (If, Do): Implement dead code elimination.
20333         (While): Implement loop inversion
20334
20335         (Do, While, For, If): Resolve the expression prior to calling our
20336         code generation.
20337
20338 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
20339
20340         * class.cs:
20341           - added method Report28 (warning: program has more than one entry point)
20342           - added method IsEntryPoint, implements paragraph 10.1 of the spec
20343           - modified method Method.Define, the part at the end of the method
20344
20345         * rootcontext.cs: added static public Location EntryPointLocation;
20346           
20347         * ../errors/cs0028.cs : Add test case for the above warning.              
20348
20349         * typemanager.cs:
20350           - modified method CSharpName to allow arrays of primitive type to
20351             be printed nicely (e.g. instead of System.Int32[][] it now prints
20352             int[][])
20353           - added method CSharpSignature: returns the signature of a method
20354             in string format to be used in reporting errors, warnings, etc.
20355
20356         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
20357         with String.Empty.
20358
20359 2002-04-26  Ravi Pratap  <ravi@ximian.com>
20360
20361         * delegate.cs (Define): Fix extremely silly bug where I was
20362         setting the type of the 'object' parameter of the BeginInvoke
20363         method to System.IAsyncResult instead of System.Object ;-)
20364
20365 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
20366
20367         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
20368         here. 
20369
20370         (Constructor.Emit): return if we fail to initialize the
20371         constructor.  Another door closed!  
20372
20373         * expression.cs (New.DoResolve): Improve error message (from -6 to
20374         1501).  Use DeclaredOnly lookup to find the exact constructor.
20375
20376         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
20377         loop.  This is useful.
20378
20379         * cs-parser.jay: Adjust the default parameters so that destructors
20380         have the proper signature.
20381
20382 2002-04-26  Martin Baulig  <martin@gnome.org>
20383
20384         * driver.cs (LoadAssembly): If `assembly' contains any characters
20385         which are only valid in path names and not in assembly names
20386         (currently slash, backslash and point), use Assembly.LoadFrom ()
20387         instead of Assembly.Load () on the `assembly' (before iteration
20388         over the link_paths).
20389
20390 2002-04-26  Martin Baulig  <martin@gnome.org>
20391
20392         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
20393
20394 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
20395
20396         * class.cs (Property): use the new typemanager.MemberLookup
20397
20398         (TypeContainer.MemberLookup): Implement using the
20399         TypeManager.MemberLookup now. 
20400
20401         * typemanager.cs: Make MemberLookup a function of the TypeManager,
20402         and return MemberInfos, so that these can be used without an
20403         EmitContext (what we had before).
20404
20405 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
20406
20407         * expression.cs: Fix the case where the argument to params if the
20408         type of the params.  I omitted handling this before.   Fixed
20409
20410 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20411
20412         * driver.cs: Call BootCorlib_PopulateCoreType
20413
20414         * class.cs (Property.CheckBase): Check for properties only, not
20415         for all members. 
20416
20417         * interface.cs: Temporary hack: try/catch around the
20418         CustomAttributeBuilder, because I am getting an exception that I
20419         do not understand.
20420
20421         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
20422         types whose definitions are required to be there (attributes are
20423         defined before standard types).
20424
20425         Compute definitions as we boot the various types, as they are used
20426         immediately (value_type class will need object_type, but if we do
20427         not initialize object_type, we will pass a null, which will let
20428         the runtime pick the System.Object from the existing corlib, which
20429         is not what we want).
20430
20431 2002-04-22  Patrik Torstensson <totte@labs2.com>
20432
20433         * cs-tokenizer.cs: fixed a number of trim() issues.
20434
20435 2002-04-22  Ravi Pratap  <ravi@ximian.com>
20436
20437         * expression.cs (Argument.Type): Ensure that we return the correct
20438         type when we have out or ref parameters [in which case we 
20439         append a "&"].
20440
20441 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
20442
20443         * class.cs (Property, Indexer): Allow extern modifier in there. 
20444
20445         * typemanager.cs (InitBaseTypes): Initializes object_type and
20446         value_type, since those will be used early on during the bootstrap
20447         process to compile corlib.
20448
20449         (InitCoreTypes): Move code from here to InitBaseTypes.
20450
20451 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
20452
20453         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
20454         single-dimension arrays as using the ldlen opcode.  
20455
20456         Daniel Lewis discovered this optimization.  
20457
20458         * typemanager.cs: Add signature for System.Array::get_Length
20459
20460 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20461
20462         * statement.cs: report the error when the foreach does not apply to an
20463         array nor a collection.
20464
20465 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
20466
20467         * expression.cs: Add implicit conversions to the operator ~.
20468
20469         * constant.cs (DecimalConstant.Emit): Emit decimal value.
20470
20471         * typemanager.cs: Locate the decimal constructor.
20472
20473 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20474
20475         * attribute.cs: use the new property of TypeOf.
20476         * expression.cs: added 'get' property around typearg.
20477
20478         These changes fix a build breaker reported by NickD. Is this the
20479         correct way to fix?  If not, please, revert my changes and make it
20480         work :-).
20481
20482 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
20483
20484         * attribute.cs: Add support for typeof in attribute invocations.
20485         I am not sure that this is right though.
20486
20487 2002-04-14  Duncan Mak  <duncan@ximian.com>
20488
20489         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
20490         Binary.Operator.Division case.
20491
20492 2002-04-13  Ravi Pratap  <ravi@ximian.com>
20493
20494         * class.cs (DefineType): Ensure that we do a proper check on
20495         attribute types and also register it with the TypeManager.
20496
20497         (TypeContainer.Targets): The default for attribute types is
20498         AttributeTargets.All.
20499
20500         * attribute.cs (ApplyAttributes): Registering the attribute type
20501         is done elsewhere, not when we discover we have a Usage attribute.
20502
20503 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20504
20505         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
20506         and get rid of is_delegate parameter.
20507
20508         * everywhere : update.
20509
20510 2002-04-12  Ravi Pratap  <ravi@ximian.com>
20511
20512         * cs-parser.jay (compilation_unit): Revamp completely to use
20513         some new ideas that I got from Rhys' grammar to solve the problems
20514         with assembly level attributes.
20515
20516         (outer_declaration): New grammar production.
20517
20518         (attribute_sections): Add.
20519
20520         (opt_attributes): Base on attribute_sections
20521
20522         (namespace_declaration): Allow opt_attributes to tackle the case
20523         when we have assembly level attributes - we are clever in this
20524         regard now ;-)
20525
20526         * attribute.cs (ApplyAttributes): Do not worry about assembly 
20527         attributes in the non-global context.
20528
20529         * rootcontext.cs (AddGlobalAttributes): Go back to using this
20530         instead of SetGlobalAttributes.
20531
20532         * class.cs, rootcontext.cs : Ensure we define and generate 
20533         attribute types before anything else.
20534
20535         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
20536         and flag the new error -20 for the case when the attribute type
20537         does not have valid targets specified. csc does not catch this.
20538
20539         * ../errors/errors.txt : update for error # -20
20540
20541 2002-04-11  Ravi Pratap  <ravi@ximian.com>
20542
20543         * support.cs (InternalParameters.ParameterModifier): Do some null
20544         checking and return sane values.
20545
20546         * class.cs (Method.Define): If we are a PInvoke method, ensure
20547         that we are static and extern. Report error # 601
20548
20549         * ../errors/cs0601.cs : Add test case for the above error.
20550
20551 2002-04-07  Ravi Pratap  <ravi@ximian.com>
20552
20553         * rootcontext.cs (attribute_types): We need to keep type of
20554         all attribute types separately and emit code for them first.
20555
20556         (RegisterAttribute) : Implement.
20557
20558         * class.cs (DefineType): Check if the current Type is a custom
20559         attribute type and register it accordingly.
20560
20561         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
20562         adding the first attribute twice and rename to
20563
20564         (SetGlobalAttributes): this.
20565
20566         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
20567         lookups.
20568
20569         * attribute.cs (ApplyAttributes): Take an additional argument telling us
20570         if we are processing global arguments. Hmm, I am unsure of this.
20571
20572 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20573
20574         * expression.cs: added static array of strings to avoid calling
20575         Enum.ToString () for Operator in Binary. Significant recover of
20576         performance.
20577
20578 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
20579
20580         * class.cs (FindMembers): Allow the Builders of the various
20581         members to be null.  If they are skip them.  This only happens
20582         during the PInvoke declaration.
20583
20584 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
20585
20586         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
20587         failure, so we do not keep going afterwards.
20588
20589         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
20590         wanted to pass `false' as the `is_delegate' argument.  If this is
20591         the case, why not use delegate_type == null to mean `is_delegate =
20592         false' and anything else as is_delegate = true.
20593
20594 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
20595
20596         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
20597         code for the section, not the beginning of the tests.
20598
20599 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
20600
20601         * cfold.cs: Handle operator + (Enum x, Underlying x) 
20602
20603         * expression.cs (Binary): same.  Warn about errors where we have
20604         Enum/Enum in operator + as well.
20605
20606 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
20607
20608         * statement.cs:
20609                 - added support for switch(bool)
20610                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
20611                 - add TableSwitchEmit() to handle table-based switch statements
20612
20613 2002-04-05  Ravi Pratap  <ravi@ximian.com>
20614
20615         * expression.cs (Invocation.OverloadResolve): Factor out code which
20616         does parameter compatibility checking with arguments so that we can 
20617         re-use the code even from Delegate.VerifyApplicability
20618
20619         (VerifyArgumentsCompat): Move above code here.
20620
20621         * delegate.cs (VerifyApplicability): Get rid of duplicate code
20622         and instead make a call to the above method.
20623
20624 2002-03-31  Ravi Pratap  <ravi@ximian.com>
20625
20626         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
20627         We use it to keep track of classes which are attribute types.
20628
20629 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
20630
20631         * delegate.cs (Delegate.Define): Correctly define the types in the
20632         presence of fixed and array parameters.
20633
20634         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
20635         doing FindMembers.
20636
20637         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
20638         include NonPublic after the first iteration.
20639
20640         * class.cs (Indexer.CheckBase): Only check if both parents are
20641         non-null. 
20642
20643         * cs-parser.jay (accessor_body): If empty, set to null.
20644
20645         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
20646         same code path here to resolve constants names that we did have in
20647         MemberAccess.DoResolve.  There is too much code duplicated here.
20648
20649 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
20650
20651         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
20652
20653         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
20654         to MakeUnionSet.
20655
20656         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
20657         tokens, numbers and strings.
20658
20659         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
20660         parenthesis.
20661
20662         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
20663         asyncronous parameters and the regular parameters.  
20664
20665         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
20666         specify the target directory.
20667
20668         * expression.cs: (This.DoResolve): Simplify
20669         (As.Emit): Optimize, do not generate IsInst if the expression is
20670         always of the given type.
20671
20672         (Is.DoResolve): Bug fix, we were reporting both always/never for
20673         the is expression.
20674
20675         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
20676         creating too many unnecessary arrays.
20677
20678 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
20679
20680         * class.cs (EmitFieldInitializer): Use Assign expression to assign
20681         fields instead of rolling our own initializer.   Takes care of all
20682         implicit conversions, and drops unnecessary static checks/argument.
20683
20684 2002-03-31  Dick Porter  <dick@ximian.com>
20685
20686         * driver.cs: use the GetDirectories() return values properly, and
20687         use "/" as path separator.
20688
20689 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
20690
20691         * expression.cs (Unary): Optimize - - expr into expr.
20692         (Binary): Optimize a + (-b) into a -b.
20693
20694         * codegen.cs (CodeGen): Made all methods static.
20695
20696 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
20697
20698         * rootcontext.cs: 
20699
20700         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
20701         TypeBuilder property.
20702
20703         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
20704         instead. 
20705
20706         * tree.cs: Removed the various RecordXXXX, and replaced with a
20707         single RecordDecl.  Removed all the accessor methods, and just
20708         left a single access point Type 
20709
20710         * enum.cs: Rename DefineEnum to DefineType.
20711
20712         * decl.cs: New abstract method `DefineType' used to unify the
20713         Defines for Enumerations, Interfaces, TypeContainers and
20714         Delegates.
20715
20716         (FindType): Moved LookupInterfaceOrClass here.  Moved the
20717         LookupBaseClasses method that used to live in class.cs and
20718         interface.cs here, and renamed to FindType.
20719
20720         * delegate.cs: Implement DefineType.  Take advantage of the
20721         refactored pattern for locating the parent builder without taking
20722         the parent_builder argument (which we know does not work if we are
20723         nested, and triggering a toplevel definition).
20724
20725 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20726
20727         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
20728         accessibility of a member has changed during override and report
20729         an error if so.
20730
20731         * class.cs (Method.Define, Property.Define): Only complain on
20732         overrides if the method is private, any other accessibility is
20733         fine (and since we just checked the permission is the same, we are
20734         good to go).
20735
20736         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
20737         and elif are processed always.  The other pre-processing
20738         directives are only processed if we are "taking" the path
20739
20740 2002-03-29  Martin Baulig  <martin@gnome.org>
20741
20742         * class.cs (Method.Emit): Only emit symbolic debugging info if the
20743         current location is not Null.
20744
20745         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
20746         a separate method so we can profile it.
20747
20748         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
20749         `span.Seconds' are just seconds, but no minutes or hours.
20750         (MainDriver): Profile the CodeGen.SaveSymbols calls.
20751
20752 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20753
20754         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
20755         Remove the gratuitous set of Final:
20756
20757                                 // If an interface implementation, then we can set Final.
20758                                 if (((flags & MethodAttributes.Abstract) == 0) &&
20759                                     implementing.DeclaringType.IsInterface)
20760                                         flags |= MethodAttributes.Final;
20761
20762         I do not know what I was smoking when I used that.
20763
20764
20765         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
20766         step into fixing the name resolution issues for delegates and
20767         unifying the toplevel name resolution.
20768
20769 2002-03-28  Martin Baulig  <martin@gnome.org>
20770
20771         * class.cs (Method.Emit): If we have a symbol writer, call its
20772         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
20773         tell it about the current method.
20774
20775         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
20776         writer that we're going to emit the first byte of IL code for a new
20777         statement (a new source line).
20778         (EmitContext.EmitTopBlock): If we have a symbol writer, call
20779         EmitContext.Mark() before emitting any code.
20780
20781         * location.cs (SymbolDocument): Return null when we're Null.
20782
20783         * statement.cs (Statement): Moved the `Location loc' variable here.
20784         (Statement.EmitBoolExpression): If we have a symbol writer, call
20785         ec.Mark() before emitting any code to tell it that we're at the
20786         beginning of a new statement.
20787         (StatementExpression): Added `Location' argument to the constructor.
20788         (Block): Added public readonly variable `StartLocation' and public
20789         variable `EndLocation'.  The latter is to be set using SetEndLocation().
20790         (Block): Added constructor which takes a start and end location.
20791         (Block.SetEndLocation): New method. This sets the end location.
20792         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
20793         local variables we create.
20794         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
20795         each statement and do also mark the begin and end of the block.
20796
20797         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
20798         tell it the current lexer.Location, use Location.Null for the end of the
20799         block.
20800         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
20801         current block, set its end location using SetEndLocation().
20802         (statement_expression): StatementExpression constructor now takes the
20803         lexer.Location as additional argument.
20804         (for_statement, declare_local_variables): Likewise.
20805         (declare_local_variables): When creating a new implicit block, use the
20806         new Block constructor and pass it the lexer.Location.
20807
20808 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
20809
20810         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
20811         members also on the parent interfaces recursively.
20812
20813 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
20814
20815         * report.cs: Use new formats, since Gonzalo finished the missing
20816         bits. 
20817
20818         * expression.cs (Binary.ResolveOperator): added missing operator|
20819         operator& and operator^ for bool/bool.
20820
20821         * cs-parser.jay: CheckDef now takes a Location argument that is
20822         used to report errors more precisly (instead of reporting the end
20823         of a definition, we try to track something which is a lot closer
20824         to the source of the problem).
20825
20826         * cs-tokenizer.cs: Track global token use, so we can properly flag
20827         the use of #define/#undef after the first token has been seen.
20828
20829         Also, rename the reportXXXX to Error_DescriptiveName
20830
20831         * decl.cs (DeclSpace.IsTopLevel): Move property here from
20832         TypeContainer, so that Enum and Interface can use this too.
20833
20834         * class.cs (TypeContainer.LookupInterfaceOrClass,
20835         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
20836         `builder' argument.  Typically this was used to pass the parent
20837         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
20838         the definition).  
20839
20840         The problem is that a nested class could trigger the definition of
20841         a toplevel class, and the builder would be obviously wrong in that
20842         case. 
20843
20844         So we drop this argument, and we compute dynamically the
20845         TypeBuilder/ModuleBuilder (the correct information was available
20846         to us anyways from DeclSpace.Parent)
20847
20848         * interface.cs (Interface.DefineInterface): Drop builder
20849         parameter cleanup like class.cs
20850
20851         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
20852         like class.cs
20853
20854         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
20855         values. 
20856
20857         (Try.Emit): Propagate the returns value from the statement.
20858
20859         (Return.Emit): Even if we are leavning 
20860
20861         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
20862
20863         * modifiers.cs: Fix the computation of MethodAttributes flags.
20864
20865 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
20866
20867         * driver.cs: allow compilation of files that start with '/'.
20868         Add a default case when checking the argument of --target.
20869
20870 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
20871
20872         * interface.cs: Implement the same search algorithm for types in
20873         the interface code.
20874
20875         * delegate.cs: Do not allow multiple definition.
20876
20877         * Recovered ChangeLog that got accidentally amputated
20878
20879         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
20880
20881         * rootcontext.cs: Load manually enum to allow core classes to
20882         contain enumerations.
20883
20884         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
20885         Update to new static methods in TypeManager.
20886
20887         * typemanager.cs (GetMethod, GetConstructor): Use our
20888         implementation of FindMembers to find the members, since during
20889         corlib compilation, the types are TypeBuilders and GetMethod and
20890         GetConstructor do not work.
20891
20892         Make all methods in TypeManager static.
20893
20894         (InitCodeHelpers): Split the functionality from
20895         the InitCodeTypes function.
20896
20897         * driver.cs: Call InitCodeHelpers after we have populated the
20898         types. 
20899
20900         * cs-parser.jay (delegate_declaration): we did not used to compute
20901         the delegate name correctly for void delegates.
20902
20903 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
20904
20905         * rootcontext.cs (RootContext): Init the interface_resolve_order
20906         and type_container_resolve_order always.
20907
20908         (ResolveCore, BootstrapCorlib_ResolveClass,
20909         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
20910         compiler when compiling with --nostdlib
20911
20912         * class.cs (TypeContainer.DefineType): Check that our parent is
20913         not null.  This test is most important when we are bootstraping
20914         the core types.
20915
20916         * codegen.cs: Split out the symbol writing code.
20917
20918 2002-03-25  Martin Baulig  <martin@gnome.org>
20919
20920         * driver.cs (-g): Made -g an alias for --debug.
20921
20922 2002-03-24  Martin Baulig  <martin@gnome.org>
20923
20924         * codegen.cs (SymbolWriter): New public variable. Returns the
20925         current symbol writer.
20926         (CodeGen): Added `bool want_debugging_support' argument to the
20927          constructor. If true, tell the ModuleBuild that we want debugging
20928         support and ask it for the ISymbolWriter.
20929         (Save): If we have a symbol writer, call it's Close() method after
20930         saving the assembly.
20931
20932         * driver.c (--debug): New command line argument to create a
20933         debugger information file.
20934
20935         * location.cs (SymbolDocument): New public property. Returns an
20936         ISymbolDocumentWriter object for the current source file or null
20937         if we don't have a symbol writer.
20938
20939 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
20940
20941         * driver.cs (LoadAssembly): Correctly return when all the paths
20942         have been tried and not before.
20943
20944         * statement.cs (Switch.Emit): return the actual coverage for this
20945         statement (returns/not-returns)
20946
20947         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
20948         switch of the statement if we are the last switch section.  That
20949         kills two problems: try/catch problems (we used to emit an empty
20950         nop at the end) and switch statements where all branches would
20951         return. 
20952
20953 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
20954
20955         * driver.cs: Add default assemblies (the equivalent to the
20956         Microsoft CSC.RSP file)
20957
20958         * cs-tokenizer.cs: When updating `cols and setting it to zero,
20959         also update tokens_seen and set it to false.
20960
20961         * driver.cs: Implement --recurse for Mike.
20962
20963         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
20964         correctly splitting out the paths.
20965
20966 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
20967
20968         * interface.cs (Interface.PopulateProperty): Instead of using
20969         `parent' as the declaration space for the set parameters, use
20970         `this' 
20971
20972         * support.cs (InternalParameters): InternalParameters constructor
20973         takes a DeclSpace instead of a TypeContainer.
20974
20975         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
20976         types are being initialized, load the address of it before calling
20977         the function.  
20978
20979         (New): Provide a mechanism to disable the generation of local
20980         value type temporaries when the caller will be providing us with
20981         an address to store it.
20982
20983         (ArrayCreation.EmitDynamicInitializers): Use it.
20984
20985 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
20986
20987         * expression.cs (Invocation.EmitArguments): Only probe for array
20988         property if there is more than one argument.  Sorry about that.
20989
20990         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
20991         empty param arrays.
20992
20993         * class.cs (Method.LabelParameters): Fix incorrect code path that
20994         prevented the `ParamArrayAttribute' from being applied to the
20995         params attribute.
20996
20997 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
20998
20999         * support.cs (ReflectionParameters): Correctly compute whether the
21000         last argument is a params array.  Fixes the problem with
21001         string.Split ('a')
21002
21003         * typemanager.cs: Make the assemblies array always be non-null
21004         (empty, but non-null)
21005
21006         * tree.cs (RecordDecl): New function that abstracts the recording
21007         of names.  This reports error 101, and provides a pointer to the
21008         previous declaration.  Fixes a crash in the compiler.
21009
21010         * cs-parser.jay (constructor_declaration): Update to new grammar,
21011         and provide a constructor_body that can be empty.
21012
21013 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
21014
21015         * driver.cs: Add support for --resources.
21016
21017         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
21018         Make all types for the various array helper methods be integer.
21019
21020         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
21021         CheckState to ConvCast.
21022
21023         (ConvCast): Now it takes a `checked' state argument, to avoid
21024         depending on the emit context for the conversion, and just using
21025         the resolve time setting.
21026
21027         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
21028         instead of Invocation.EmitArguments.  We do not emit the original
21029         arguments, instead we emit those which have been converted to
21030         unsigned int expressions.
21031
21032         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
21033
21034         * codegen.cs: ditto.
21035
21036         * expression.cs (LocalVariableReference): Drop the use of the
21037         Store function that depended on the variable index.
21038
21039         * statement.cs (VariableInfo): Drop the `Idx' property from this
21040         class, as this is not taking into account the indexes for
21041         temporaries tat we generate during the execution, getting the
21042         indexes wrong.
21043
21044         * class.cs: First emit class initializers, then call the parent
21045         constructor. 
21046
21047         * expression.cs (Binary): Fix opcode emision.
21048         (UnaryMutator.EmitCode): Support checked code generation
21049
21050         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
21051         matches for events for both the Static and Instance scans,
21052         pointing to the same element.   Fix that.
21053
21054 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
21055
21056         * rootcontext.cs (ResolveTree): Always set the
21057         interface_resolve_order, because nested interfaces will be calling
21058         into us.
21059
21060         * class.cs (GetInterfaceOrClass): Track the same resolution
21061         process used by TypeManager.LookupType.  This fixes the nested
21062         type lookups in class declarations (separate path from
21063         LookupType). 
21064
21065         (TypeContainer.DefineType): Also define nested interfaces.
21066         (TypeContainer.RegisterOrder): New public function used to
21067         register the order in which child interfaces need to be closed.
21068
21069         Nested interfaces need to be closed after their parents have been
21070         created. 
21071
21072         * interface.cs (InterfaceAttr): Put all the logic for computing
21073         the interface attribute here. 
21074
21075         (DefineInterface): Register our interface order with the
21076         RootContext or with the TypeContainer depending on the case.
21077
21078 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21079
21080         * cs-parser.jay: rework foreach statement to work with the new
21081         changes to the policy on SimpleNames.
21082
21083         * report.cs: support Stacktrace on warnings as well.
21084
21085         * makefile: drop --unsafe and /unsafe from the compile.
21086
21087 2002-03-13  Ravi Pratap  <ravi@ximian.com>
21088
21089         * ecore.cs (StandardConversionExists): Modify to take an Expression
21090         as the first parameter. Ensure we do null -> reference type conversion
21091         checking.
21092
21093         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
21094         temporary Expression objects.
21095
21096 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
21097
21098         * interface.cs: workaround bug in method overloading resolution
21099         (there is already a bugzilla bug for it).
21100
21101 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
21102
21103         We could also solve this problem by having a separate path for
21104         performing type lookups, instead of DoResolve, we could have a
21105         ResolveType entry point, and only participating pieces of the
21106         production (simplename, deref, array) would implement this. 
21107
21108         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
21109         signal SimpleName to only resolve type names and not attempt to
21110         resolve anything else.
21111
21112         * expression.cs (Cast): Set the flag.
21113
21114         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
21115
21116         * class.cs: Only report 108 if there is no `new' modifier.
21117
21118         * cs-parser.jay: rework foreach statement to work with the new
21119         changes to the policy on SimpleNames.
21120         
21121         * report.cs: support Stacktrace on warnings as well.
21122
21123         * makefile: drop --unsafe and /unsafe from the compile.
21124
21125 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
21126
21127         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21128         lookups here, instead of doing that at parse time.  This means
21129         that our grammar will not introduce `LocalVariableReferences' as
21130         expressions at this point.  That solves the problem of code like
21131         this:
21132
21133         class X {
21134            static void Main ()
21135            { int X = 1;
21136             { X x = null }}}
21137
21138         This is only half the fix.  The full fix requires parameters to
21139         also be handled in this way.
21140
21141         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
21142         makes the use more obvious of the DeclSpace.  The
21143         ec.TypeContainer.TypeBuilder is now only used to pull the
21144         TypeBuilder for it.
21145
21146         My theory is that I can get rid of the TypeBuilder completely from
21147         the EmitContext, and have typecasts where it is used (from
21148         DeclSpace to where it matters).  
21149
21150         The only pending problem is that the code that implements Aliases
21151         is on TypeContainer, and probably should go in DeclSpace.
21152
21153         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
21154         lookups here, instead of doing that at parse time.  This means
21155         that our grammar will not introduce `LocalVariableReferences' as
21156         expressions at this point.  That solves the problem of code like
21157         this:
21158
21159         class X {
21160            static void Main ()
21161            { int X = 1;
21162             { X x = null }}}
21163
21164         This is only half the fix.  The full fix requires parameters to
21165         also be handled in this way.
21166
21167         * class.cs (Property.DefineMethod): When implementing an interface
21168         method, set newslot, when implementing an abstract method, do not
21169         set the flag (before we tried never setting it, or always setting
21170         it, which is the difference).
21171         (Indexer.DefineMethod): same.
21172         (Method.DefineMethod): same.
21173
21174         * ecore.cs: Only set the status used flag if we get back a Field.
21175
21176         * attribute.cs: Temporary hack, so Paolo can keep working.
21177
21178 2002-03-08  Ravi Pratap  <ravi@ximian.com>
21179
21180         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
21181         the unmanaged type in the case we have a MarshalAs attribute.
21182
21183         (Resolve): Handle the case when we are parsing the special MarshalAs
21184         attribute [we need to store the unmanaged type to use later]
21185
21186         * typemanager.cs (marshal_as_attr_type): Built in type for the 
21187         MarshalAs Attribute.
21188
21189         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
21190         on parameters and accordingly set the marshalling info.
21191
21192 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
21193
21194         * class.cs: Optimizing slightly by removing redundant code after
21195         we switched to the `NoTypes' return value.
21196         (Property.DefineMethod): use NoTypes here too.
21197
21198         This fixes the bug I introduced in my last batch of changes.
21199
21200 2002-03-05  Ravi Pratap  <ravi@ximian.com>
21201
21202         * tree.cs (RecordEnum): Add. We now keep track of enums too.
21203
21204         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
21205         Enums since those are types too. 
21206
21207         * cs-parser.jay (enum_declaration): Record enums as we parse them.
21208
21209         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
21210         thanks to a call during the lookup process.
21211
21212 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
21213
21214         * statement.cs (Foreach): Lots of work to accomodate a particular
21215         kind of foreach statement that I had not kept in mind.  It is
21216         possible to have foreachs on classes that provide a GetEnumerator
21217         method that return objects that implement the "pattern" for using
21218         a foreach, there is no need to support GetEnumerator
21219         specifically. 
21220
21221         This is needed to compile nant.
21222
21223         * decl.cs: Only report 114 if the member is not `Finalize' and if
21224         the warning level is at least 2.
21225
21226         * class.cs: Moved the compare function from Method to
21227         MethodSignature. 
21228
21229         (MethodSignature.InheritableMemberSignatureCompare): Add new
21230         filter function that is used to extract inheritable methods from a
21231         class. 
21232
21233         (Method.Define): Use the new `inheritable_method_signature_filter'
21234         delegate
21235
21236         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
21237         command. 
21238
21239 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
21240
21241         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
21242
21243         * cs-parser.jay: Add opt_semicolon to the interface declaration.
21244
21245         * expression.cs: Pass location information to
21246         ConvertImplicitStandard. 
21247
21248         * class.cs: Added debugging code to track return values from
21249         interfaces. 
21250
21251 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
21252
21253         * expression.cs (Is.DoResolve): If either side of the `is' is an
21254         interface, do not flag the warning.
21255
21256         * ecore.cs (ImplicitReferenceConversion): We need a separate test
21257         for interfaces
21258
21259         * report.cs: Allow for --fatal to be used with --probe.
21260
21261         * typemanager.cs (NoTypes): Move the definition for the empty Type
21262         array here. 
21263
21264         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
21265         properties. 
21266         (TypeContainer.DefineProxy): New function used to proxy to parent
21267         implementations when implementing interfaces.
21268         (TypeContainer.ParentImplements): used to lookup if our parent
21269         implements a public function that is required by an interface.
21270         (TypeContainer.VerifyPendingMethods): Hook this up.
21271
21272         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
21273         `modules' and `assemblies' arraylists into arrays.  We only grow
21274         these are the very early start up of the program, so this improves
21275         the speedof LookupType (nicely measured).
21276
21277         * expression.cs (MakeByteBlob): Replaced unsafe code with
21278         BitConverter, as suggested by Paolo.
21279
21280         * cfold.cs (ConstantFold.Binary): Special case: perform constant
21281         folding of string concatenation, but if either side is a string,
21282         and the other is not, then return null, and let the runtime use
21283         the concatenation on the string plus the object (using
21284         `Object.ToString'). 
21285
21286 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
21287
21288         Constant Folding has been implemented now.
21289
21290         * expression.cs (Unary.Reduce): Do not throw an exception, catch
21291         the error instead on types that are not supported in one's
21292         complement. 
21293
21294         * constant.cs (Constant and all children): New set of functions to
21295         perform implict and explicit conversions.
21296
21297         * ecore.cs (EnumConstant): Implement the new functions to perform
21298         conversion by proxying to the child expression.
21299
21300         * codegen.cs: (ConstantCheckState): Constant evaluation has its
21301         own separate setting that can not be turned off from the command
21302         line using --unchecked or --checked and is only controlled using
21303         the checked/unchecked statements and expressions.  This setting is
21304         used by the constant folder to flag errors.
21305
21306         * expression.cs (CheckedExpr, UncheckedExpr): Set the
21307         ConstantCheckState as well.   
21308
21309         During Resolve, they also have to flag the state, because the
21310         constant folder runs completely in the Resolve phase.
21311
21312         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
21313         well.
21314
21315 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21316
21317         * cfold.cs: New file, this file contains the constant folder.
21318
21319         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
21320         argument to track whether we are using the resulting address to
21321         load or store a value and provide better error messages. 
21322
21323         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
21324         new AddressOf arguments.
21325
21326         * statement.cs (Foreach.EmitCollectionForeach): Update
21327
21328         * expression.cs (Argument.Emit): Call AddressOf with proper
21329         arguments to track usage.
21330
21331         (New.DoEmit): Call AddressOf with new arguments.
21332
21333         (Unary.Emit): Adjust AddressOf call.
21334
21335 2002-03-01  Ravi Pratap  <ravi@ximian.com>
21336
21337         * cs-parser.jay (member_access): Change the case for pre-defined types
21338         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
21339         this suggestion.
21340
21341         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
21342         a method body.
21343
21344         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
21345         essentially like methods and apply attributes like MethodImplOptions to them too.
21346
21347         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
21348         not being null.
21349
21350         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
21351         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
21352         is the DeclSpace.
21353
21354         * Update code everywhere accordingly.
21355
21356         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
21357
21358         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
21359
21360 2002-02-28  Ravi Pratap  <ravi@ximian.com>
21361
21362         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
21363         try performing lookups against those instead of jumping straight into using
21364         the 'using' clauses.
21365
21366         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
21367
21368         (LookupType): Perform lookups in implicit parents too.
21369
21370         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
21371         sequence as RootContext.LookupType. 
21372
21373         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
21374         the various cases of namespace lookups into this method.
21375
21376 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
21377
21378         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
21379         in positional arguments)
21380
21381         * class.cs (Operator): Update the AllowedModifiers to contain
21382         extern. 
21383
21384         * cs-parser.jay: Update operator declaration to allow for the
21385         operator body to be empty.
21386
21387         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
21388         values. 
21389
21390 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
21391
21392         * class.cs (Method.Emit): Label parameters.
21393
21394         * driver.cs: Return 1 or 0 as the program exit code.
21395
21396 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
21397
21398         * expression.cs: Special case the `null' object when trying to
21399         auto-compute the type, as anything can be explicitly converted to
21400         that. 
21401
21402         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
21403         spotting this Paolo.
21404
21405         (Expression.ImplicitNumericConversion): Perform comparissions of
21406         the type using the underlying type in the case of an enumeration
21407         rather than using the enumeration type for the compare.
21408
21409         Cope with the underlying == type case, which is not possible to
21410         catch before. 
21411
21412         (Expression.ConvertNumericExplicit): Perform comparissions of
21413         the type using the underlying type in the case of an enumeration
21414         rather than using the enumeration type for the compare.
21415
21416         * driver.cs: If the user does not supply an extension, assume .exe
21417
21418         * cs-parser.jay (if_statement): Rewrote so that we can track the
21419         location for the if statement.
21420
21421         * expression.cs (Binary.ConstantFold): Only concat strings when
21422         the operation is "+", not everything ;-)
21423
21424         * statement.cs (Statement.EmitBoolExpression): Take a location
21425         argument. 
21426         (If, While, Do): Track location.
21427
21428         * expression.cs (Binary.ResolveOperator): In the object + string
21429         case, I was missing a call to ConvertImplicit
21430
21431 2002-02-25  Ravi Pratap  <ravi@ximian.com>
21432
21433         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
21434         Location arguments. Ensure we use RootContext.LookupType to do our work
21435         and not try to do a direct Type.GetType and ModuleBuilder.GetType
21436
21437         * interface.cs (PopulateMethod): Handle the type of the parameter being
21438         null gracefully.
21439
21440         * expression.cs (Invocation.BetterFunction): Handle the case when we 
21441         have a params method with no fixed arguments and a call is made with no
21442         arguments.
21443
21444 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
21445
21446         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
21447         the verbatim-string-literal
21448
21449         * support.cs (InternalParameters.ParameterModifier): handle null
21450         fixed parameters.
21451         (InternalParameters.ParameterType): ditto.
21452
21453         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
21454         duplicating the name of the variable parameter.
21455         (GetParameterByName): Fix bug where we were not looking up array
21456         paramters if they were the only present (thanks Paolo!).
21457         (GetParameterInfo): We only have an empty set of types if both
21458         fixed and array are set to null.
21459         (GetParameterInfo-idx): Handle FixedParameter == null
21460
21461         * cs-parser.jay: Handle the case where there is no catch
21462         statements (missing null test).
21463
21464 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
21465
21466         * driver.cs (MainDriver): Be conservative on our command line
21467         handling.
21468
21469         Catch DirectoryNotFoundException when calling GetFiles.
21470
21471         (SplitPathAndPattern): Used to split the input specification into
21472         a path and a pattern that we can feed to Directory.GetFiles.
21473
21474 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
21475
21476         * statement.cs (Fixed): Implement the last case of the Fixed
21477         statement (string handling).
21478
21479         * expression.cs (StringPtr): New class used to return a char * to
21480         a string;  Used by the Fixed statement.
21481
21482         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
21483
21484         * expression.cs (Binary.ResolveOperator): Remove redundant
21485         MemberLookup pn parent type.
21486         Optimize union call, we do not need a union if the types are the same.
21487         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
21488         type.
21489
21490         Specialize the use of MemberLookup everywhere, instead of using
21491         the default settings. 
21492
21493         (StackAlloc): Implement stackalloc keyword.
21494
21495         * cs-parser.jay: Add rule to parse stackalloc.
21496
21497         * driver.cs: Handle /h, /help, /?
21498
21499         * expression.cs (MakeByteBlob): Removed the hacks we had in place
21500         before we supported unsafe code.
21501
21502         * makefile: add --unsafe to the self compilation of mcs.
21503
21504 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
21505
21506         * expression.cs (PointerArithmetic): New class that is used to
21507         perform pointer arithmetic.
21508         (Binary.Resolve): Handle pointer arithmetic
21509         Handle pointer comparission.
21510         (ArrayPtr): Utility expression class that is used to take the
21511         address of an array.
21512
21513         (ElementAccess): Implement array access for pointers
21514
21515         * statement.cs (Fixed): Implement fixed statement for arrays, we
21516         are missing one more case before we are done.
21517
21518         * expression.cs (Indirection): Implement EmitAssign and set the
21519         ExprClass to Variable.  This allows pointer dereferences to be
21520         treated as variables, and to have values assigned to them.
21521
21522         * ecore.cs (Expression.StoreFromPtr): New utility function to
21523         store values dereferencing.
21524
21525 2002-02-20  Ravi Pratap  <ravi@ximian.com>
21526
21527         * expression.cs (Binary.ResolveOperator): Ensure that we are
21528         not trying to operate on a void type - this fixes the reported
21529         bug.
21530
21531         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
21532         the parent implementation is sealed.
21533
21534         * ../errors/cs0239.cs : Add.
21535
21536         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
21537
21538         * typemanager.cs (unverifiable_code_type): Corresponds to 
21539         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
21540         which have unsafe code in them.
21541
21542         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
21543         unsafe context.
21544
21545 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
21546
21547         * cs-tokenizer.cs: Add support for @"litreal strings"
21548
21549         Make tokenizer accept pre-processor directives
21550         on any column (remove the old C-like limitation). 
21551
21552         * rootcontext.cs (EmitCode): Emit any global attributes.
21553         (AddGlobalAttributes): Used to keep track of assembly attributes. 
21554
21555         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
21556
21557         * cs-parser.jay: Add support for global attributes.  
21558
21559 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
21560
21561         * expression.cs (Indirection): New helper class.  Unary will
21562         create Indirection classes to be able to implement the
21563         IMemoryLocation interface on it.
21564
21565 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
21566
21567         * cs-parser.jay (fixed_statement): reference the right statement.
21568
21569         * statement.cs (Fixed.Emit): Finish implementing the fixed
21570         statement for the &x case.
21571
21572 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
21573
21574         * class.cs (Property.Define, Method.Define): Remove newslot when
21575         `implementing'.  
21576
21577         * modifiers.cs: My use of NewSlot when `Abstract' was set was
21578         wrong.  NewSlot should only be used if the `new' keyword is present.
21579
21580         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
21581         locating our system dir.  Sorry about this.
21582
21583 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21584
21585         * driver.cs (GetSystemDir): Compute correctly the location of our
21586         system assemblies.  I was using the compiler directory instead of
21587         the library directory.
21588
21589 2002-02-13  Ravi Pratap  <ravi@ximian.com>
21590
21591         * expression.cs (BetterFunction): Put back in what Miguel commented out
21592         since it is the correct fix. The problem is elsewhere ;-)
21593
21594         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
21595         parameters of the parms method are themselves compatible or not !
21596
21597         (StandardConversionExists): Fix very dangerous bug where we were forgetting
21598         to check that a class implements an interface before saying that an implicit
21599         conversion was allowed. Use ImplementsInterface to do the checking.
21600
21601 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
21602
21603         * class.cs (Method.Define): Track whether we are an explicit
21604         implementation or not.  And only call DefineMethodOverride if we
21605         are an explicit implementation.
21606
21607         (Property.DefineMethod): Ditto.
21608
21609 2002-02-11  Ravi Pratap  <ravi@ximian.com>
21610
21611         * expression.cs (BetterFunction): Catch hideous bug which was
21612          preventing us from detecting ambiguous calls due to implicit casts i.e
21613         cs0121.
21614
21615 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
21616
21617         * support.cs (Pair): Remove un-needed method.  I figured why I was
21618         getting the error in cs-parser.jay, the variable in a foreach loop
21619         is readonly, and the compiler does not really treat this as a variable.
21620
21621         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
21622         instead of EQUALS in grammar.  
21623
21624         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
21625
21626         * expression.cs (Unary.DoResolve): Check whether the argument is
21627         managed or not.
21628
21629 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
21630
21631         * support.cs: Api for Pair to set a value.  Despite the fact that
21632         the variables are public the MS C# compiler refuses to compile
21633         code that accesses the field if the variable is part of a foreach
21634         statement. 
21635
21636         * statement.cs (Fixed): Begin implementation of the fixed
21637         statement.
21638
21639         (Block.AddVariable): Return the VariableInfo on success and null
21640         on failure instead of true/false. 
21641
21642         * cs-parser.jay (foreach): Catch errors on variables already
21643         defined (we were ignoring this value before) and properly unwind
21644         the block hierarchy
21645
21646         (fixed_statement): grammar for the fixed statement.
21647
21648 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
21649
21650         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
21651         pointer types to be incretemented.
21652
21653         (SizeOf): Implement.
21654
21655         * cs-parser.jay (pointer_member_access): Implement
21656         expr->IDENTIFIER production.
21657
21658         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
21659         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
21660         on safe contexts.
21661
21662         (Unary): Implement indirection.
21663
21664         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
21665         use in non-unsafe context).
21666
21667         (SimpleName.DoResolve): Check for pointers in field access on safe
21668         contexts. 
21669
21670         (Expression.LoadFromPtr): Factor the load-indirect code in this
21671         function.  This was duplicated in UnboxCast and ParameterReference
21672
21673 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
21674
21675         * expression.cs (ComposedCast): report an error if a pointer cast
21676         is used in a safe region.
21677
21678         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
21679         pointer type casts in unsafe context.
21680
21681         * codegen.cs (EmitContext): Set up IsUnsafe.
21682
21683         * cs-parser.jay (non_expression_type): Add productions for pointer
21684         casts. 
21685
21686         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
21687         code.  We should not use force into static mode if the method is
21688         not virtual.  Fixes bug in MIS
21689
21690         * statement.cs (Do.Emit, While.Emit, For.Emit,
21691         Statement.EmitBoolExpression): Add support to Do and While to
21692         propagate infinite loop as `I do return' semantics.
21693
21694         Improve the For case to also test for boolean constants.
21695
21696         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
21697         to the list of attributes we can add.
21698
21699         Remove `EmitContext' argument.
21700
21701         * class.cs (Method.Define): Apply parameter attributes.
21702         (Constructor.Define): Apply parameter attributes.
21703         (MethodCore.LabelParameters): Move here the core of labeling
21704         parameters. 
21705
21706         * support.cs (ReflectionParameters.ParameterModifier,
21707         InternalParameters.ParameterModifier): Use IsByRef on the type and
21708         only return the OUT bit for these parameters instead of in/out/ref
21709         flags.
21710
21711         This is because I miss-understood things.  The ParameterInfo.IsIn
21712         and IsOut represent whether the parameter has the [In] and [Out]
21713         attributes set.  
21714
21715 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
21716
21717         * ecore.cs (FieldExpr.Emit): Release temporaries.
21718
21719         * assign.cs (LocalTemporary.Release): new function.
21720
21721         * codegen.cs (EmitContext.GetTemporaryStorage,
21722         EmitContext.FreeTemporaryStorage): Rework the way we deal with
21723         temporary storage.  Now we can "put back" localbuilders when we
21724         are done with them
21725
21726 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
21727
21728         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
21729         need to make a copy of the variable to generate verifiable code.
21730
21731 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
21732
21733         * driver.cs: Compute dynamically the system directory.
21734
21735         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
21736         Slower, but more generally useful.  Used by the abstract
21737         registering implementation. 
21738
21739         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
21740         the rules for the special rule on Type/instances.  First check if
21741         we have the same name, and if so, try that special static path
21742         rather than the instance path.
21743
21744 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
21745
21746         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
21747         for, while and if.
21748
21749         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
21750         Enum, ValueType, Delegate or Array for non-corlib compiles.
21751
21752         * cs-tokenizer.cs: Catch long identifiers (645)
21753
21754         * typemanager.cs (IndexerPropetyName): Ravi never tested this
21755         piece of code.
21756
21757         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
21758         fix, we were returning too early, so we were not registering
21759         pending methods from abstract classes.
21760
21761         Do not register pending methods if the class is abstract.
21762
21763         * expression.cs (Conditional.DoResolve): Report circular implicit
21764         conversions when we neecd to compute it for conditional
21765         expressions. 
21766
21767         (Is.DoResolve): If the expression is always of the provided type,
21768         flag warning 183.  If the expression can not ever be of the
21769         provided type flag warning 184.
21770
21771         * class.cs: Catch 169 as well.
21772
21773         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
21774         read. 
21775
21776 2002-01-18  Nick Drochak  <ndrochak@gol.com>
21777
21778         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
21779
21780 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
21781
21782         * interface.cs: (PopulateMethod): Check for pointers being defined
21783         only if the unsafe context is active.
21784         (PopulateProperty): ditto.
21785         (PopulateIndexer): ditto.
21786
21787         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
21788         specified.  If pointers are present, make sure that they are
21789         present in an unsafe context.
21790         (Constructor, Constructor.Define): ditto.
21791         (Field, Field.Define): ditto.
21792         (Property, Property.Define): ditto.
21793         (Event, Event.Define): ditto.
21794
21795         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
21796         hashtable if there are classes or structs defined.
21797
21798         * expression.cs (LocalVariableReference.DoResolve): Simplify this
21799         code, as the constant resolution moved.
21800
21801         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
21802         the metadata, so we can flag error 133. 
21803
21804         * decl.cs (MemberCore.UnsafeOK): New function to test that a
21805         pointer is being declared in an unsafe context.
21806
21807 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
21808
21809         * modifiers.cs (Modifiers.Check): Require a Location argument.
21810         Report error 227 for Unsafe use.
21811
21812         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
21813
21814         * statement.cs (For.Emit): If the test is null, then report that
21815         we do `return', as we wont reach anything afterwards.
21816
21817         (Switch.SwitchGoverningType): Track the expression that matched
21818         the conversion.
21819
21820         * driver.cs: Allow negative numbers as an error code to flag.
21821
21822         * cs-parser.jay: Handle 1551.
21823
21824         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
21825
21826 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21827
21828         * cs-parser.jay: Report 1518 (type declaration can only contain
21829         class, struct, interface, enum or delegate)
21830
21831         (switch_label): Report 1523 (keywords `case' or `default' must
21832         preced code)
21833
21834         (opt_switch_sections): Report 1522 (empty switch)
21835
21836         * driver.cs: Report 1515 (response file specified multiple times)
21837         Report 1516 (Source file specified multiple times).
21838
21839         * expression.cs (Argument.Resolve): Signal 1510
21840
21841         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
21842         access not allowed in static code)
21843
21844 2002-01-11  Ravi Pratap  <ravi@ximian.com>
21845
21846         * typemanager.cs (IsPointerType): Utility method which we are going
21847         to need a lot.
21848
21849         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
21850         the object type, so we take care of that.
21851
21852         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
21853
21854         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
21855         added to non-params parameters :-)
21856
21857         * typemanager.cs (CSharpName): Include 'void' type too. 
21858
21859         (void_ptr_type): Include in the set of core types.
21860
21861         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
21862         duplicating code.
21863
21864         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
21865         an unsafe context.
21866
21867         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
21868         completely forgotten about it.
21869
21870 2002-01-10  Ravi Pratap  <ravi@ximian.com>
21871
21872         * cs-parser.jay (pointer_type): Add. This begins our implementation
21873         of parsing rules for unsafe code.
21874
21875         (unsafe_statement): Implement.
21876
21877         (embedded_statement): Modify to include the above.
21878
21879         * statement.cs (Unsafe): Implement new class for unsafe blocks.
21880
21881         * codegen.cs (EmitContext.InUnsafe): Add. This determines
21882         if the current context is an unsafe one.
21883
21884         * cs-parser.jay (local_variable_pointer_type): Since local variable types
21885         are handled differently, we need separate rules for them.
21886
21887         (local_variable_declaration): Update to use local_variable_pointer_type
21888         to allow variable declarations of unmanaged pointer types.
21889
21890         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
21891         in unsafe contexts.
21892
21893         * ../errors/cs0214.cs : Add.
21894
21895 2002-01-16  Nick Drochak  <ndrochak@gol.com>
21896
21897         * makefile: remove 'response' file when cleaning.
21898
21899 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
21900
21901         * cs-parser.jay: Report 1524.
21902
21903 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
21904
21905         * typemanager.cs (RegisterMethod): drop checking if we have
21906         registered this from here
21907
21908 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
21909
21910         * class.cs (Method.EmitDestructor): Implement calling our base
21911         destructor. 
21912
21913         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
21914         value of InFinally.
21915
21916         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
21917         this routine and will wrap the call in a try/catch block.  Deal
21918         with the case.
21919
21920 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
21921
21922         * ecore.cs (Expression.MemberLookup): instead of taking a
21923         parameter `same_type' that was used to tell whether we could
21924         access private members we compute our containing type from the
21925         EmitContext.
21926
21927         (FieldExpr): Added partial support for volatile fields.  This does
21928         not work for volatile fields exposed from assemblies, as I can not
21929         figure out how to extract the modreq from it.
21930
21931         Updated all the source files to use this.
21932
21933         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
21934         because it is referenced by MemberLookup very often. 
21935
21936 2002-01-09  Ravi Pratap  <ravi@ximian.com>
21937
21938         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
21939         TypeBuilder.GetCustomAttributes to retrieve what we need.
21940
21941         Get rid of redundant default_member_attr_type as this is the same as
21942         default_member_type which already exists.
21943
21944         * interface.cs, attribute.cs : Update accordingly.
21945
21946 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
21947
21948         * typemanager.cs: Enable IndexerPropertyName again.  It does not
21949         work for TYpeBuilders though.  Ravi, can you please fix this?
21950
21951         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
21952
21953         * expression.cs (Argument.Emit): Handle the case of ref objects
21954         being passed to ref functions;  
21955
21956         (ParameterReference.EmitLoad): Loads the content of the pointer
21957         without dereferencing.
21958
21959 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
21960
21961         * cs-tokenizer.cs: Implemented the pre-processing expressions.
21962
21963 2002-01-08  Ravi Pratap  <ravi@ximian.com>
21964
21965         * class.cs (Indexer.DefineMethod): Incorporate the interface
21966         type in the name of the method if we are doing explicit interface
21967         implementation.
21968
21969         * expression.cs (ConversionExists): Remove as it is completely obsolete.
21970
21971         (BetterConversion): Fix extremely trivial bug where we were referring to
21972         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
21973         again !
21974
21975         * ../errors/bug16.cs : Add although we have fixed it.
21976
21977 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
21978
21979         * expression.cs (BaseIndexer): Begin implementation.
21980
21981         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
21982
21983         * cs-parser.jay (indexer_declarator): Use qualified_identifier
21984         production directly to remove a shift/reduce, and implement
21985         explicit interface implementation.
21986
21987         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
21988         after a floating point suffix.
21989
21990         * expression.cs (DoNumericPromotions): Improved the conversion for
21991         uint/uint.  If we have a constant, we avoid doing a typecast to a
21992         larger type.
21993
21994         * class.cs (Indexer): Implement explicit interface implementation
21995         for indexers.
21996
21997 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
21998
21999         * class.cs: make the default instance constructor public and hidebysig.
22000
22001 2001-01-03  Ravi Pratap  <ravi@ximian.com>
22002
22003         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
22004         so we can call it from elsewhere.
22005
22006         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
22007         we emit it internally if the class has a defined indexer; otherwise the user
22008         emits it by decorating the class definition with the DefaultMemberAttribute.
22009
22010         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
22011         attribute is not used on a type which defines an indexer.
22012
22013         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
22014         character when we skip whitespace.
22015
22016         * ../errors/cs0646.cs : Add.
22017
22018 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
22019
22020         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
22021         again. 
22022
22023         * makefile: Add practical target `mcs3.exe' which builds the third
22024         generation compiler. 
22025
22026         * expression.cs (New): Fix structures constructor calling.
22027
22028         * class.cs (Property, Method, Indexer): Emit Final flag on the
22029         method if we are an interface implementation and we are not
22030         abstract. 
22031
22032         * ecore.cs (PropertyExpr): New public field `IsBase', tells
22033         whether this property is referencing a `base' method.
22034
22035         * expression.cs (Invocation.EmitCall): take an extra argument:
22036         is_base, this is used to determine whether the `call' or
22037         `callvirt' opcode should be used.
22038
22039
22040         * delegate.cs: update EmitCall.
22041
22042         * class.cs (Method.Define): Set NewSlot for the cases where we are
22043         not implementing an interface method.
22044
22045         (Property.Define): ditto.
22046
22047 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
22048
22049         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
22050         'r'.  Allows mcs to parse itself fully.
22051
22052 2002-01-02  Ravi Pratap  <ravi@ximian.com>
22053
22054         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
22055         of the number of initializers that require the InitializeArray method.
22056
22057         (CheckIndices): Store the Expression in all cases - not the plain value. Also
22058         update the above field where necessary.
22059
22060         (MakeByteBlob): Update accordingly.
22061
22062         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
22063         greater than 2.
22064
22065         (EmitDynamicInitializers): Update in accordance with the new optimization.
22066
22067         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
22068         same OpCode applies.
22069
22070         * cs-parser.jay : Fix some glaring errors I introduced.
22071
22072 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
22073
22074         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
22075         so that we can check for name clashes there too.
22076
22077         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
22078         for interface indexers.
22079
22080         * interfaces.cs (Define): Emit the default member attribute.
22081
22082         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
22083         variable was being referred to while setting the value ;-)
22084
22085 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
22086
22087         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
22088         byte-by-byte information when we know the data is zero.
22089
22090         Make the block always a multiple of 4, because
22091         DefineInitializedData has a bug.
22092
22093         * assign.cs: Fix, we should assign from the temporary, not from
22094         the source. 
22095
22096         * expression.cs (MakeByteBlob): Fix my incorrect code.
22097
22098 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
22099
22100         * typemanager.cs (EnumToUnderlying): This function is used to get
22101         the underlying type from an enumeration, because it does not
22102         always work. 
22103
22104         * constant.cs: Use the I4_S form for values between -128 and 127.
22105
22106         * statement.cs (Block.LookupLabel): Looks up a label.
22107         (Block): Drop support for labeled blocks.
22108
22109         (LabeledStatement): New kind of statement that represents a label
22110         only.
22111
22112         (Goto): Finally implement this bad boy.
22113
22114         * cs-parser.jay: Update to reflect new mechanism to implement
22115         labels.
22116
22117 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
22118
22119         * codegen.cs (EmitContext.This): a codegen property that keeps the
22120         a single instance of this instead of creating many different this
22121         instances. 
22122
22123         * delegate.cs (Delegate.DoResolve): Update to use the property;
22124
22125         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
22126
22127         * expression.cs (BaseAccess.DoResolve): Ditto.
22128
22129 2001-12-29  Ravi Pratap  <ravi@ximian.com>
22130
22131         * typemanager.cs (methodimpl_attr_type): Add to hold the type
22132         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
22133
22134         (InitCoreTypes): Update accordingly.
22135
22136         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
22137         so we can quickly store the state.
22138
22139         (ApplyAttributes): Set the correct implementation flags
22140         for InternalCall methods.
22141
22142 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
22143
22144         * expression.cs (EmitCall): if a method is not virtual, then do
22145         not use callvirt on it.
22146
22147         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
22148         user defined stuff) requires the use of stobj, which takes an
22149         address on the stack instead of an array and an index.  So emit
22150         the Ldelema operation for it.
22151
22152         (EmitStoreOpcode): Use stobj for valuetypes.
22153
22154         (UnaryMutator.EmitCode): Use the right 1 value depending on
22155         whether we are dealing with int64/uint64, float or doubles.
22156
22157         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
22158         constructors that I implemented last night.
22159
22160         (Constructor.IsDefault): Fix to work properly for static
22161         constructors.
22162
22163         * cs-parser.jay (CheckDef): report method signature errors.
22164         Update error number 103 to be 132.
22165
22166         * decl.cs: New AdditionResult enumeration value: MethodExists.
22167         Although we do this check for methods later on in the semantic
22168         analysis, catching repeated default constructors is so easy that
22169         we catch these here. 
22170
22171         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
22172         promotions code.
22173
22174         (ParameterReference.EmitAssign, Emit): handle
22175         bools as bytes.
22176
22177         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
22178         (ArrayAccess.EmitStoreOpcode): ditto.
22179
22180         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
22181
22182         * expression.cs (MakeByteBlob): Complete all the missing types
22183         (uint, short, ushort, byte, sbyte)
22184
22185         * class.cs: Only init instance field initializers on instance
22186         constructors. 
22187
22188         Rename `constructors' to instance_constructors. 
22189
22190         (TypeContainer.AddConstructor): Only add constructors to the list
22191         if it is not static.
22192
22193         Make sure that we handle default_static_constructor independently
22194         everywhere where we handle instance_constructors
22195
22196 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
22197
22198         * class.cs: Do not lookup or create a base initializer for a
22199         static constructor.
22200
22201         (ConstructorInitializer.Resolve): use the proper type to lookup
22202         for constructors.
22203
22204         * cs-parser.jay: Report error 1585 (modifiers between type and name).
22205
22206         * enum.cs, interface.cs: Remove CloseType, this is taken care by
22207         in DeclSpace. 
22208
22209         * decl.cs: CloseType is now an virtual method, the default
22210         implementation just closes this type.
22211
22212 2001-12-28  Ravi Pratap  <ravi@ximian.com>
22213
22214         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
22215         to PreserveSig by default. Also emit HideBySig on such methods.
22216
22217         Basically, set the defaults to standard values.
22218
22219         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
22220         argument, if candidate is better, it can't be worse than the best !
22221
22222         (Invocation): Re-write bits to differentiate between methods being
22223         applicable in their expanded form and their normal form - for params
22224         methods of course.
22225
22226         Get rid of use_standard everywhere as only standard conversions are allowed
22227         in overload resolution. 
22228
22229         More spec conformance.
22230
22231 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22232
22233         * driver.cs: Add --timestamp, to see where the compiler spends
22234         most of its time.
22235
22236         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
22237         `this' in static code.
22238
22239         (SimpleName.DoResolve): Implement in terms of a helper function
22240         that allows static-references to be passed upstream to
22241         MemberAccess.
22242
22243         (Expression.ResolveWithSimpleName): Resolve specially simple
22244         names when called by MemberAccess to implement the special
22245         semantics. 
22246
22247         (Expression.ImplicitReferenceConversion): Handle conversions from
22248         Null to reference types before others, as Null's type is
22249         System.Object. 
22250
22251         * expression.cs (Invocation.EmitCall): Handle the special case of
22252         calling methods declared on a reference type from a ValueType
22253         (Base classes System.Object and System.Enum)
22254
22255         (MemberAccess.Resolve): Only perform lookups on Enumerations if
22256         the left hand side is a TypeExpr, not on every enumeration. 
22257
22258         (Binary.Resolve): If types are reference types, then do a cast to
22259         object on operators != and == of both arguments.
22260
22261         * typemanager.cs (FindMembers): Extract instance and static
22262         members if requested.
22263
22264         * interface.cs (PopulateProperty): Use void_type instead of null
22265         as the return type for the setter method.
22266
22267         (PopulateIndexer): ditto.
22268
22269 2001-12-27  Ravi Pratap  <ravi@ximian.com>
22270
22271         * support.cs (ReflectionParameters): Fix minor bug where we
22272         were examining the wrong parameter for the ParamArray attribute.
22273
22274         Cope with requests for the type of the parameter at position
22275         greater than the params parameter's. We now return the element
22276         type of the params array as that makes more sense.
22277
22278         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
22279         accordingly as we no longer have to extract the element type
22280         ourselves.
22281
22282         (Invocation.OverloadResolve): Update.
22283
22284 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
22285
22286         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
22287         against IEnumerator, test whether the return value is a descendant
22288         of the IEnumerator interface.
22289
22290         * class.cs (Indexer.Define): Use an auxiliary method to implement
22291         the other bits of the method definition.  Begin support for
22292         explicit interface implementation.
22293
22294         (Property.DefineMethod): Use TypeManager.void_type instead of null
22295         for an empty return value.
22296
22297 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
22298
22299         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
22300         dealing with a FieldExpr which is composed of a FieldBuilder, in
22301         the code path we did extract the constant, but we should have
22302         obtained the underlying value to be able to cast it (otherwise we
22303         end up in an infinite loop, this is what Ravi was running into).
22304
22305         (ArrayCreation.UpdateIndices): Arrays might be empty.
22306
22307         (MemberAccess.ResolveMemberAccess): Add support for section
22308         14.5.4.1 that deals with the special case of E.I when E is a type
22309         and something else, that I can be a reference to a static member.
22310
22311         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
22312         handle a particular array type to create byte blobs, it is just
22313         something we dont generate byteblobs for.
22314
22315         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
22316         arguments. 
22317
22318         * location.cs (Push): remove the key from the hashtable that we
22319         are about to add.   This happens for empty files.
22320
22321         * driver.cs: Dispose files after we have parsed them.
22322
22323         (tokenize): new function that only runs the tokenizer on its
22324         input, for speed testing.
22325
22326 2001-12-26  Ravi Pratap  <ravi@ximian.com>
22327
22328         * class.cs (Event.Define): Define the private field only if there
22329         are no accessors defined.
22330
22331         * expression.cs (ResolveMemberAccess): If there is no associated
22332         field with the event, that means we have an event defined with its
22333         own accessors and we should flag error cs0070 since transforming
22334         ourselves into a field is not valid in that case.
22335
22336         * ecore.cs (SimpleName.DoResolve): Same as above.
22337
22338         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
22339         and charset to sane values.
22340
22341 2001-12-25  Ravi Pratap  <ravi@ximian.com>
22342
22343         * assign.cs (DoResolve): Perform check on events only if they 
22344         are being accessed outside the declaring type.
22345
22346         * cs-parser.jay (event_declarations): Update rules to correctly
22347         set the type of the implicit parameter etc.
22348
22349         (add_accessor, remove_accessor): Set current local parameters.
22350
22351         * expression.cs (Binary): For delegate addition and subtraction,
22352         cast the return value from the method into the appropriate delegate
22353         type.
22354
22355 2001-12-24  Ravi Pratap  <ravi@ximian.com>
22356
22357         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
22358         of these as the workaround is unnecessary.
22359
22360         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
22361         delegate data - none of that is needed at all.
22362
22363         Re-write bits to extract the instance expression and the delegate method
22364         correctly.
22365
22366         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
22367         on delegates too.
22368
22369         * attribute.cs (ApplyAttributes): New method to take care of common tasks
22370         of attaching attributes instead of duplicating code everywhere.
22371
22372         * everywhere : Update code to do attribute emission using the above method.
22373
22374 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22375
22376         * expression.cs (IsParamsMethodApplicable): if there are not
22377         parameters, return immediately.
22378
22379         * ecore.cs: The 0 literal can be implicity converted to an enum
22380         type. 
22381
22382         (SimpleName.DoResolve): First lookup the type, then lookup the
22383         members. 
22384
22385         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
22386         want to get its address.  If the InstanceExpression is not
22387         addressable, store the result in a temporary variable, then get
22388         the address of it.
22389
22390         * codegen.cs: Only display 219 errors on warning level or above. 
22391
22392         * expression.cs (ArrayAccess): Make it implement the
22393         IMemoryLocation interface.
22394
22395         (Binary.DoResolve): handle the operator == (object a, object b)
22396         and operator != (object a, object b) without incurring into a
22397         BoxedCast (because 5 != o should never be performed).
22398
22399         Handle binary enumerator operators.
22400
22401         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
22402         value type, otherwise use Ldelem_ref.
22403
22404         Use precomputed names;
22405
22406         (AddressOf): Implement address of
22407
22408         * cs-parser.jay (labeled_statement): Fix recursive block
22409         addition by reworking the production.
22410
22411         * expression.cs (New.DoEmit): New has a special case:
22412                 
22413                  If we are dealing with a ValueType, we have a few
22414                  situations to deal with:
22415                 
22416                     * The target of New is a ValueType variable, that is
22417                       easy, we just pass this as the variable reference
22418                 
22419                     * The target of New is being passed as an argument,
22420                       to a boxing operation or a function that takes a
22421                       ValueType.
22422                 
22423                       In this case, we need to create a temporary variable
22424                       that is the argument of New.
22425
22426
22427 2001-12-23  Ravi Pratap  <ravi@ximian.com>
22428
22429         * rootcontext.cs (LookupType): Check that current_type is not null before
22430         going about looking at nested types.
22431
22432         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
22433         not implement the IAssignMethod interface any more.
22434
22435         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
22436         where we tranform them into FieldExprs if they are being resolved from within
22437         the declaring type.
22438
22439         * ecore.cs (SimpleName.DoResolve): Do the same here.
22440
22441         * assign.cs (DoResolve, Emit): Clean up code considerably. 
22442
22443         * ../errors/bug10.cs : Add.
22444
22445         * ../errors/cs0070.cs : Add.
22446
22447         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
22448
22449         * assign.cs : Get rid of EventIsLocal everywhere.
22450
22451 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
22452
22453         * ecore.cs (ConvertIntLiteral): finished the implementation.
22454
22455         * statement.cs (SwitchLabel): Convert the value we are using as a
22456         key before looking up the table.
22457
22458 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22459
22460         * codegen.cs (EmitTopBlock): Require a Location argument now.
22461
22462         * cs-parser.jay (constructor_declarator): We need to setup
22463         current_local_parameters before we parse the
22464         opt_constructor_initializer, to allow the variables to be bound
22465         to the constructor arguments.
22466
22467         * rootcontext.cs (LookupType): First lookup nested classes in our
22468         class and our parents before we go looking outside our class.
22469
22470         * expression.cs (ConstantFold): Extract/debox the values at the
22471         beginnning. 
22472
22473         * rootcontext.cs (EmitCode): Resolve the constants first before we
22474         resolve the types.  This is not really needed, but it helps debugging.
22475
22476         * statement.cs: report location.
22477
22478         * cs-parser.jay: pass location to throw statement.
22479
22480         * driver.cs: Small bug fix.
22481
22482         * report.cs: Updated format to be 4-zero filled digits.
22483
22484 2001-12-22  Ravi Pratap  <ravi@ximian.com>
22485
22486         * expression.cs (CheckIndices): Fix minor bug where the wrong
22487         variable was being referred to ;-)
22488
22489         (DoEmit): Do not call EmitStaticInitializers when the 
22490         underlying type is System.Object.
22491
22492 2001-12-21  Ravi Pratap  <ravi@ximian.com>
22493
22494         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
22495         and do the usual workaround for SRE.
22496
22497         * class.cs (MyEventBuilder.EventType): New member to get at the type
22498         of the event, quickly.
22499
22500         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
22501
22502         * assign.cs (Assign.DoResolve): Handle the case when the target
22503         is an EventExpr and perform the necessary checks.
22504
22505         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
22506         interface.
22507
22508         (SimpleName.MemberStaticCheck): Include check for EventExpr.
22509
22510         (EventExpr): Set the type in the constructor itself since we 
22511         are meant to be born fully resolved.
22512
22513         (EventExpr.Define): Revert code I wrote earlier.
22514                 
22515         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
22516         instance expression is null. The instance expression is a This in that case
22517         or a null, depending on whether it is a static method or not.
22518
22519         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
22520         refers to more than one method.
22521
22522         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
22523         and accordingly flag errors.
22524
22525 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22526
22527         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
22528
22529 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
22530
22531         * location.cs (ToString): Provide useful rutine.
22532
22533 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
22534
22535         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
22536         objects, return the actual integral boxed.
22537
22538         * statement.cs (SwitchLabel): define an ILLabel for each
22539         SwitchLabel. 
22540
22541         (Switch.CheckSwitch): If the value is a Literal, extract
22542         the underlying literal.
22543
22544         Also in the unused hashtable we had, add the SwitchLabel so we can
22545         quickly look this value up.
22546
22547         * constant.cs: Implement a bunch of new constants.  Rewrite
22548         Literal based on this.  Made changes everywhere to adapt to this.
22549
22550         * expression.cs (Expression.MakeByteBlob): Optimize routine by
22551         dereferencing array only once, and also copes with enumrations.
22552
22553         bytes are two bytes wide, not one.
22554
22555         (Cast): Perform constant conversions.
22556
22557         * ecore.cs (TryImplicitIntConversion): Return literals instead of
22558         wrappers to the literals here.
22559
22560         * expression.cs (DoNumericPromotions): long literals can converted
22561         to ulong implicity (this is taken care of elsewhere, but I was
22562         missing this spot).
22563
22564         * ecore.cs (Expression.Literalize): Make the return type Literal,
22565         to improve type checking.
22566
22567         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
22568
22569 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22570
22571         * literal.cs: Revert code from ravi that checked the bounds.  The
22572         bounds are sane by the definition of the type itself. 
22573
22574         * typemanager.cs: Fix implementation of ImplementsInterface.  We
22575         need to actually look up in our parent hierarchy for interfaces
22576         implemented. 
22577
22578         * const.cs: Use the underlying type for enumerations
22579
22580         * delegate.cs: Compute the basename for the delegate creation,
22581         that should fix the delegate test case, and restore the correct
22582         Type Lookup semantics in rootcontext
22583
22584         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
22585         referencing a nested type with the Reflection API is using the "+"
22586         sign. 
22587
22588         * cs-parser.jay: Do not require EOF token at the end.
22589
22590 2001-12-20  Ravi Pratap  <ravi@ximian.com>
22591
22592         * rootcontext.cs (LookupType): Concatenate type names with
22593         a '.' instead of a '+' The test suite passes again.
22594
22595         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
22596         field of the enumeration.
22597
22598         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
22599         the case when the member is an EventExpr.
22600
22601         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
22602         static has an associated instance expression.
22603
22604         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
22605
22606         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
22607
22608         * class.cs (Event.Define): Register event and perform appropriate checks
22609         for error #111.
22610
22611         We define the Add and Remove methods even if the use provides none because
22612         in that case, we provide default implementations ourselves.
22613
22614         Define a private field of the type of the event. This is done by the CSC compiler
22615         and we should be doing it too ;-)
22616
22617         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
22618         More methods we use in code we generate.
22619
22620         (multicast_delegate_type, delegate_type): Two separate types since the distinction
22621         is important.
22622
22623         (InitCoreTypes): Update accordingly for the above.
22624
22625         * class.cs (Event.Emit): Generate code for default accessors that we provide
22626
22627         (EmitDefaultMethod): Do the job in the above.
22628
22629         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
22630         appropriate place.
22631
22632 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
22633
22634         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
22635         builders even if we were missing one.
22636
22637         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
22638         pass the Basename as our class name instead of the Name.  The
22639         basename will be correctly composed for us.
22640
22641         * parameter.cs (Paramters): Now takes a Location argument.
22642
22643         * decl.cs (DeclSpace.LookupType): Removed convenience function and
22644         make all the code call directly LookupType in RootContext and take
22645         this chance to pass the Location information everywhere.
22646
22647         * Everywhere: pass Location information.
22648
22649 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
22650
22651         * class.cs (Constructor.Define): Updated way of detecting the
22652         length of the parameters.
22653
22654         (TypeContainer.DefineType): Use basename as the type name for
22655         nested types.
22656
22657         (TypeContainer.Define): Do not recursively define types here, as
22658         definition is taken care in order by the RootContext.
22659
22660         * tree.cs: Keep track of namespaces in a per-file basis.
22661
22662         * parameter.cs (Parameter.ComputeSignature): Update to use
22663         DeclSpace. 
22664
22665         (Parameters.GetSignature): ditto.
22666
22667         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
22668         instead of a TypeContainer.
22669
22670         (Interface.SemanticAnalysis): Use `this' instead of our parent to
22671         resolve names.  Because we need to be resolve in our context, not
22672         our parents.
22673
22674         * driver.cs: Implement response files.
22675
22676         * class.cs (TypeContainer.DefineType): If we are defined, do not
22677         redefine ourselves.
22678
22679         (Event.Emit): Emit the code for add/remove handlers.
22680         (Event.Define): Save the MethodBuilders for add/remove.
22681
22682         * typemanager.cs: Use pair here too.
22683
22684         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
22685         DictionaryEntry requires the first argument to be non-null.  
22686
22687         (enum_declaration): Compute full name for registering the
22688         enumeration.
22689
22690         (delegate_declaration): Instead of using
22691         formal_parameter_list, use opt_formal_parameter_list as the list
22692         can be empty.
22693
22694         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
22695         (EventParsing): New property that controls whether `add' and
22696         `remove' are returned as tokens or identifiers (for events);
22697
22698 2001-12-19  Ravi Pratap  <ravi@ximian.com>
22699
22700         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
22701         use MyEventBuilder only and let it wrap the real builder for us.
22702
22703         (MyEventBuilder): Revamp constructor etc.
22704
22705         Implement all operations that we perform on EventBuilder in precisely the same
22706         way here too.
22707
22708         (FindMembers): Update to use the EventBuilder member.
22709
22710         (Event.Emit): Update accordingly.
22711
22712 2001-12-18  Ravi Pratap  <ravi@ximian.com>
22713
22714         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
22715         by calling the appropriate methods.
22716
22717         (GetCustomAttributes): Make stubs as they cannot possibly do anything
22718         useful.
22719
22720         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
22721
22722 2001-12-17  Ravi Pratap  <ravi@ximian.com>
22723
22724         * delegate.cs (Delegate.Populate): Check that the return type
22725         and various parameters types are indeed accessible.
22726
22727         * class.cs (Constructor.Define): Same here.
22728
22729         (Field.Define): Ditto.
22730
22731         (Event.Define): Ditto.
22732
22733         (Operator.Define): Check that the underlying Method defined itself
22734         correctly - so it's MethodBuilder should not be null.
22735
22736         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
22737         expression happens to be null.
22738
22739         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
22740         members but as of now we don't seem to be able to do anything really useful with it.
22741
22742         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
22743         not the EventBuilder.
22744
22745 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
22746
22747         * cs-tokenizer.cs: Add support for defines.
22748         Add support for #if, #elif, #else, #endif
22749
22750         (eval_var): evaluates a variable.
22751         (eval): stubbed for evaluating functions.
22752
22753         * cs-parser.jay: Pass the defines information
22754
22755         * driver.cs: Add --define command line option.
22756
22757         * decl.cs: Move MemberCore here.
22758
22759         Make it the base class for DeclSpace.  This allows us to catch and
22760         report 108 and 109 for everything now.
22761
22762         * class.cs (TypeContainer.Define): Extract all the members
22763         before populating and emit the warning 108 (new keyword required
22764         to override) instead of having each member implement this.
22765
22766         (MemberCore.Define): New abstract method, we will be using this in
22767         the warning reporting engine in Populate.
22768
22769         (Operator.Define): Adjust to new MemberCore protocol. 
22770
22771         * const.cs (Const): This does not derive from Expression, it is a
22772         temporary object we use to create fields, it is a MemberCore. 
22773
22774         * class.cs (Method.Define): Allow the entry point to be in a
22775         specific class.
22776
22777         * driver.cs: Rewrite the argument handler to clean it up a bit.
22778
22779         * rootcontext.cs: Made it just an auxiliary namespace feature by
22780         making everything static.
22781
22782         * driver.cs: Adapt code to use RootContext type name instead of
22783         instance variable.
22784
22785         * delegate.cs: Remove RootContext argument.
22786
22787         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
22788         argument. 
22789
22790         * class.cs (Event.Define): The lookup can fail.
22791
22792         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
22793
22794         * expression.cs: Resolve the this instance before invoking the code.
22795
22796 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
22797
22798         * cs-parser.jay: Add a production in element_access that allows
22799         the thing to become a "type" reference.  This way we can parse
22800         things like "(string [])" as a type.
22801
22802         Note that this still does not handle the more complex rules of
22803         casts. 
22804
22805
22806         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
22807
22808         * ecore.cs: (CopyNewMethods): new utility function used to
22809         assemble the list of methods from running FindMembers.
22810
22811         (MemberLookup): Rework FindMembers so that 
22812
22813 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
22814
22815         * class.cs (TypeContainer): Remove Delegates who fail to be
22816         defined.
22817
22818         * delegate.cs (Populate): Verify that we dont get null return
22819         values.   TODO: Check for AsAccessible.
22820
22821         * cs-parser.jay: Use basename to emit error 574 (destructor should
22822         have the same name as container class), not the full name.
22823
22824         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
22825         possible representation.  
22826
22827         Also implements integer type suffixes U and L.
22828
22829 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
22830
22831         * expression.cs (ArrayCreation.DoResolve): We need to do the
22832         argument resolution *always*.
22833
22834         * decl.cs: Make this hold the namespace.  Hold the root context as
22835         well.
22836         (LookupType): Move here.
22837
22838         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
22839
22840         * location.cs (Row, Name): Fixed the code, it was always returning
22841         references to the first file.
22842
22843         * interface.cs: Register properties defined through interfaces.
22844
22845         * driver.cs: Add support for globbing on the command line
22846
22847         * class.cs (Field): Make it derive from MemberCore as well.
22848         (Event): ditto.
22849
22850 2001-12-15  Ravi Pratap  <ravi@ximian.com>
22851
22852         * class.cs (Event::Define): Check that the type of the event is a delegate
22853         type else flag error #66.
22854
22855         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
22856         same.
22857
22858         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
22859         values of EntryPoint, CharSet etc etc.
22860
22861         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
22862
22863         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
22864         be null and we should ignore this. I am not sure if this is really clean. Apparently,
22865         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
22866         which needs this to do its work.
22867
22868         * ../errors/cs0066.cs : Add.
22869
22870 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
22871
22872         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
22873         helper functions.
22874
22875         * class.cs: (MethodSignature.MethodSignature): Removed hack that
22876         clears out the parameters field.
22877         (MemberSignatureCompare): Cleanup
22878
22879         (MemberCore): New base class used to share code between MethodCore
22880         and Property.
22881
22882         (RegisterRequiredImplementations) BindingFlags.Public requires
22883         either BindingFlags.Instace or Static.  Use instance here.
22884
22885         (Property): Refactored code to cope better with the full spec.
22886
22887         * parameter.cs (GetParameterInfo): Return an empty array instead
22888         of null on error.
22889
22890         * class.cs (Property): Abstract or extern properties have no bodies.
22891
22892         * parameter.cs (GetParameterInfo): return a zero-sized array.
22893
22894         * class.cs (TypeContainer.MethodModifiersValid): Move all the
22895         method modifier validation to the typecontainer so we can reuse
22896         this on properties.
22897
22898         (MethodCore.ParameterTypes): return an empty sized array of types.
22899
22900         (Property.Define): Test property modifier validity.
22901
22902         Add tests for sealed/override too.
22903
22904         (Method.Emit): abstract or extern methods have no bodies.
22905
22906 2001-12-14  Ravi Pratap  <ravi@ximian.com>
22907
22908         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
22909         thing.
22910
22911         (Method::Define, ::Emit): Modify accordingly.
22912
22913         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
22914
22915         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
22916
22917         * makefile: Pass in /unsafe.
22918
22919 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
22920
22921         * class.cs (MakeKey): Kill routine.
22922
22923         * class.cs (TypeContainer.Define): Correctly define explicit
22924         method implementations (they require the full interface name plus
22925         the method name).
22926
22927         * typemanager.cs: Deply the PtrHashtable here and stop using the
22928         lame keys.  Things work so much better.
22929
22930         This of course broke everyone who depended on `RegisterMethod' to
22931         do the `test for existance' test.  This has to be done elsewhere.
22932
22933         * support.cs (PtrHashtable): A hashtable that avoid comparing with
22934         the object stupid Equals method (because, that like fails all over
22935         the place).  We still do not use it.
22936
22937         * class.cs (TypeContainer.SetRequiredInterface,
22938         TypeContainer.RequireMethods): Killed these two routines and moved
22939         all the functionality to RegisterRequiredImplementations.
22940
22941         (TypeContainer.RegisterRequiredImplementations): This routine now
22942         registers all the implementations required in an array for the
22943         interfaces and abstract methods.  We use an array of structures
22944         which can be computed ahead of time to reduce memory usage and we
22945         also assume that lookups are cheap as most classes will not
22946         implement too many interfaces.
22947
22948         We also avoid creating too many MethodSignatures.
22949
22950         (TypeContainer.IsInterfaceMethod): Update and optionally does not
22951         clear the "pending" bit if we find that there are problems with
22952         the declaration.
22953
22954         (TypeContainer.VerifyPendingMethods): Update to report errors of
22955         methods that look like implementations but are not.
22956
22957         (TypeContainer.Define): Add support for explicit interface method
22958         implementation. 
22959
22960 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
22961
22962         * typemanager.cs: Keep track of the parameters here instead of
22963         being a feature of the TypeContainer.
22964
22965         * class.cs: Drop the registration of parameters here, as
22966         InterfaceMethods are also interface declarations.
22967
22968         * delegate.cs: Register methods with the TypeManager not only with
22969         the TypeContainer.  This code was buggy.
22970
22971         * interface.cs: Full registation here.
22972
22973 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
22974
22975         * expression.cs: Remove reducer for binary expressions, it can not
22976         be done this way.
22977
22978         * const.cs: Put here the code that used to go into constant.cs
22979
22980         * constant.cs: Put here the code for constants, this is a new base
22981         class for Literals.
22982
22983         * literal.cs: Make Literal derive from Constant.
22984
22985 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
22986
22987         * statement.cs (Return.Emit): Report error 157 if the user
22988         attempts to return from a finally block.
22989
22990         (Return.Emit): Instead of emitting a return, jump to the end of
22991         the function.
22992
22993         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
22994         LocalBuilder to store the result of the function.  ReturnLabel is
22995         the target where we jump.
22996
22997
22998 2001-12-09  Radek Doulik  <rodo@ximian.com>
22999
23000         * cs-parser.jay: remember alias in current namespace
23001
23002         * ecore.cs (SimpleName::DoResolve): use aliases for types or
23003         namespaces
23004
23005         * class.cs (LookupAlias): lookup alias in my_namespace
23006
23007         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
23008         aliases hashtable
23009         (LookupAlias): lookup alias in this and if needed in parent
23010         namespaces
23011
23012 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
23013
23014         * support.cs: 
23015
23016         * rootcontext.cs: (ModuleBuilder) Made static, first step into
23017         making things static.  I need this to avoid passing the
23018         TypeContainer when calling ParameterType.
23019
23020         * support.cs (InternalParameters.ParameterType): Remove ugly hack
23021         that did string manipulation to compute the type and then call
23022         GetType.  Use Parameter.ParameterType instead.
23023
23024         * cs-tokenizer.cs: Consume the suffix for floating values.
23025
23026         * expression.cs (ParameterReference): figure out whether this is a
23027         reference parameter or not.  Kill an extra variable by computing
23028         the arg_idx during emission.
23029
23030         * parameter.cs (Parameters.GetParameterInfo): New overloaded
23031         function that returns whether a parameter is an out/ref value or not.
23032
23033         (Parameter.ParameterType): The type of the parameter (base,
23034         without ref/out applied).
23035
23036         (Parameter.Resolve): Perform resolution here.
23037         (Parameter.ExternalType): The full type (with ref/out applied).
23038
23039         * statement.cs (Using.Emit, Using.EmitExpression): Implement
23040         support for expressions on the using statement.
23041
23042 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
23043
23044         * statement.cs (Using.EmitLocalVariableDecls): Split the
23045         localvariable handling of the using statement.
23046
23047         (Block.EmitMeta): Keep track of variable count across blocks.  We
23048         were reusing slots on separate branches of blocks.
23049
23050         (Try.Emit): Emit the general code block, we were not emitting it. 
23051
23052         Check the type of the declaration to be an IDisposable or
23053         something that can be implicity converted to it. 
23054
23055         Emit conversions if required.
23056
23057         * ecore.cs (EmptyExpression): New utility class.
23058         (Expression.ImplicitConversionExists): New utility function.
23059
23060 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
23061
23062         * statement.cs (Using): Implement.
23063
23064         * expression.cs (LocalVariableReference): Support read only variables.
23065
23066         * statement.cs: Remove the explicit emit for the Leave opcode.
23067         (VariableInfo): Add a readonly field.
23068
23069 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
23070
23071         * ecore.cs (ConvCast): new class used to encapsulate the various
23072         explicit integer conversions that works in both checked and
23073         unchecked contexts.
23074
23075         (Expression.ConvertNumericExplicit): Use new ConvCast class to
23076         properly generate the overflow opcodes.
23077
23078 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23079
23080         * statement.cs: The correct type for the EmptyExpression is the
23081         element_type, not the variable type.  Ravi pointed this out.
23082
23083 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23084
23085         * class.cs (Method::Define): Handle PInvoke methods specially
23086         by using DefinePInvokeMethod instead of the usual one.
23087
23088         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
23089         above to do the task of extracting information and defining the method.
23090
23091 2001-12-04  Ravi Pratap  <ravi@ximian.com>
23092
23093         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
23094         of the condition for string type.
23095
23096         (Emit): Move that here. 
23097
23098         (ArrayCreation::CheckIndices): Keep string literals in their expression
23099         form.
23100
23101         (EmitDynamicInitializers): Handle strings appropriately.
23102
23103 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
23104
23105         * codegen.cs (EmitContext): Replace multiple variables with a
23106         single pointer to the current Switch statement.
23107
23108         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
23109         EmitContext.
23110
23111 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23112
23113         * statement.cs 
23114
23115         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
23116         default'.
23117
23118         (Foreach.Emit): Foreach on arrays was not setting
23119         up the loop variables (for break/continue).
23120
23121         (GotoCase): Semi-implented.
23122
23123 2001-12-03  Ravi Pratap  <ravi@ximian.com>
23124
23125         * attribute.cs (CheckAttribute): Handle system attributes by using
23126         Attribute.GetAttributes to examine information we need.
23127
23128         (GetValidPlaces): Same here.
23129
23130         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
23131
23132         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
23133
23134         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
23135
23136         (Method::Define): Set appropriate flags if we have a DllImport attribute.
23137
23138         (Method::Emit): Handle the case when we are a PInvoke method.
23139
23140 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
23141
23142         * expression.cs: Use ResolveWithSimpleName on compound names.
23143
23144 2001-12-02  Ravi Pratap  <ravi@ximian.com>
23145
23146         * constant.cs (EmitConstant): Make sure we resolve the associated expression
23147         before trying to reduce it.
23148
23149         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
23150
23151         * constant.cs (LookupConstantValue): Implement.
23152
23153         (EmitConstant): Use the above in emitting the constant.
23154
23155         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
23156         that are user-defined by doing a LookupConstantValue on them.
23157
23158         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
23159         too, like above.
23160
23161 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
23162
23163         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
23164
23165         (BaseAccess.DoResolve): Implement.
23166
23167         (MemberAccess.DoResolve): Split this routine into a
23168         ResolveMemberAccess routine that can be used independently
23169
23170 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
23171
23172         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
23173         As that share bits of the implementation.  Is returns a boolean,
23174         while As returns the Type that is being probed.
23175
23176 2001-12-01  Ravi Pratap  <ravi@ximian.com>
23177
23178         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
23179         instead of a Literal - much easier.
23180
23181         (EnumInTransit): Remove - utterly useless :-)
23182
23183         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
23184
23185         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
23186
23187         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
23188         chain when we have no associated expression.
23189
23190 2001-11-30  Ravi Pratap  <ravi@ximian.com>
23191
23192         * constant.cs (Define): Use Location while reporting the errror.
23193
23194         Also emit a warning when 'new' is used and there is no inherited
23195         member to hide.
23196
23197         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
23198         populated.
23199
23200         (LookupEnumValue): Implement to lookup an enum member's value and define it
23201         if necessary.
23202
23203         (Populate): Re-write accordingly to use the above routine.
23204
23205 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
23206
23207         * expression.cs (This): Fix prototype for DoResolveLValue to
23208         override the base class DoResolveLValue.
23209
23210         * cs-parser.cs: Report errors cs574 and cs575 (destructor
23211         declarations) 
23212
23213         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
23214         (we need to load the address of the field here).  This fixes
23215         test-22. 
23216
23217         (FieldExpr.DoResolveLValue): Call the DoResolve
23218         function to initialize the Instance expression.
23219
23220         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
23221         correctly the GetEnumerator operation on a value type.
23222
23223         * cs-parser.jay: Add more simple parsing error catches.
23224
23225         * statement.cs (Switch): Add support for string switches.
23226         Handle null specially.
23227
23228         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
23229
23230 2001-11-28  Ravi Pratap  <ravi@ximian.com>
23231
23232         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
23233
23234         (declare_local_constant): New helper function.
23235
23236         * statement.cs (AddConstant): Keep a separate record of constants
23237
23238         (IsConstant): Implement to determine if a variable is a constant.
23239
23240         (GetConstantExpression): Implement.
23241
23242         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
23243
23244         * statement.cs (IsVariableDefined): Re-write.
23245
23246 2001-11-27  Ravi Pratap  <ravi@ximian.com>
23247
23248         * class.cs (TypeContainer::FindMembers): Look for constants
23249         in the case when we are looking for MemberTypes.Field
23250
23251         * expression.cs (MemberAccess::DoResolve): Check that in the
23252         case we are a FieldExpr and a Literal, we are not being accessed
23253         by an instance reference.
23254
23255         * cs-parser.jay (local_constant_declaration): Implement.
23256
23257         (declaration_statement): Implement for constant declarations.
23258
23259 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
23260
23261         * statement.cs (Switch): Catch double defaults.
23262
23263         (Switch): More work on the switch() statement
23264         implementation.  It works for integral values now, need to finish
23265         string support.
23266
23267
23268 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23269
23270         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
23271         integer literals into other integer literals.  To be used by
23272         switch. 
23273
23274 2001-11-24  Ravi Pratap  <ravi@ximian.com>
23275
23276         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
23277         some memory.
23278
23279         (EmitDynamicInitializers): Cope with the above since we extract data
23280         directly from ArrayData now.
23281
23282         (ExpectInitializers): Keep track of whether initializers are mandatory
23283         or not.
23284
23285         (Bounds): Make it a hashtable to prevent the same dimension being 
23286         recorded for every element in that dimension.
23287
23288         (EmitDynamicInitializers): Fix bug which prevented the Set array method
23289         from being found.
23290
23291         Also fix bug which was causing the indices to be emitted in the reverse
23292         order.
23293
23294 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
23295
23296         * expression.cs (ArrayCreation): Implement the bits that Ravi left
23297         unfinished.  They do not work, because the underlying code is
23298         sloppy.
23299
23300 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23301
23302         * cs-parser.jay: Remove bogus fixme.
23303
23304         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
23305         on Switch statement.
23306
23307 2001-11-23  Ravi Pratap  <ravi@ximian.com>
23308
23309         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
23310         the same. 
23311
23312         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
23313         parameter. Apparently, any expression is allowed. 
23314
23315         (ValidateInitializers): Update accordingly.
23316
23317         (CheckIndices): Fix some tricky bugs thanks to recursion.
23318
23319         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
23320         I was being completely brain-dead.
23321
23322         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
23323         and re-write acordingly.
23324
23325         (DelegateInvocation): Re-write accordingly.
23326
23327         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
23328
23329         (MakeByteBlob): Handle types more correctly.
23330
23331         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
23332         initialization from expressions but it is incomplete because I am a complete
23333         Dodo :-|
23334
23335 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23336
23337         * statement.cs (If.Emit): Fix a bug that generated incorrect code
23338         on If.  Basically, we have to return `true' (ie, we do return to
23339         our caller) only if both branches of the if return.
23340
23341         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
23342         short-circuit operators, handle them as short circuit operators. 
23343
23344         (Cast.DoResolve): Resolve type.
23345         (Cast.Cast): Take an expression as the target type.
23346
23347         * cs-parser.jay (cast_expression): Remove old hack that only
23348         allowed a limited set of types to be handled.  Now we take a
23349         unary_expression and we resolve to a type during semantic
23350         analysis.
23351
23352         Use the grammar productions from Rhys to handle casts (this is
23353         not complete like Rhys syntax yet, we fail to handle that corner
23354         case that C# has regarding (-x), but we will get there.
23355
23356 2001-11-22  Ravi Pratap  <ravi@ximian.com>
23357
23358         * class.cs (EmitFieldInitializer): Take care of the case when we have a
23359         field which is an array type.
23360
23361         * cs-parser.jay (declare_local_variables): Support array initialization too.
23362
23363         * typemanager.cs (MakeKey): Implement.
23364
23365         (everywhere): Use the above appropriately.
23366
23367         * cs-parser.jay (for_statement): Update for array initialization while
23368         declaring variables.
23369
23370         * ecore.cs : The error message was correct, it's the variable's names that
23371         were misleading ;-) Make the code more readable.
23372
23373         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
23374         the correct type etc.
23375
23376         (ConvertExplicit): Handle Enum types by examining the underlying type.
23377
23378 2001-11-21  Ravi Pratap  <ravi@ximian.com>
23379
23380         * parameter.cs (GetCallingConvention): Always return
23381         CallingConventions.Standard for now.
23382
23383 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
23384
23385         * expression.cs (Binary.ResolveOperator): Update the values of `l'
23386         and `r' after calling DoNumericPromotions.
23387
23388         * ecore.cs: Fix error message (the types were in the wrong order).
23389
23390         * statement.cs (Foreach.ProbeCollectionType): Need to pass
23391         BindingFlags.Instance as well 
23392
23393         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
23394         implicit int literal conversion in an empty cast so that we
23395         propagate the right type upstream.
23396
23397         (UnboxCast): new class used to unbox value types.
23398         (Expression.ConvertExplicit): Add explicit type conversions done
23399         by unboxing.
23400
23401         (Expression.ImplicitNumericConversion): Oops, forgot to test for
23402         the target type before applying the implicit LongLiterals to ULong
23403         literal cast.
23404
23405 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
23406
23407         * cs-parser.jay (for_statement): Reworked the way For works: now
23408         we declare manually any variables that are introduced in
23409         for_initializer to solve the problem of having out-of-band code
23410         emition (that is what got for broken).
23411
23412         (declaration_statement): Perform the actual variable declaration
23413         that used to be done in local_variable_declaration here.
23414
23415         (local_variable_declaration): Do not declare anything, just pass
23416         the information on a DictionaryEntry
23417
23418 2001-11-20  Ravi Pratap  <ravi@ximian.com>
23419
23420         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
23421         re-write of the logic to now make it recursive.
23422
23423         (UpdateIndices): Re-write accordingly.
23424
23425         Store element data in a separate ArrayData list in the above methods.
23426
23427         (MakeByteBlob): Implement to dump the array data into a byte array.
23428
23429 2001-11-19  Ravi Pratap  <ravi@ximian.com>
23430
23431         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
23432         into CheckIndices.
23433
23434         * constant.cs (Define): Implement.
23435
23436         (EmitConstant): Re-write fully.
23437
23438         Pass in location info.
23439
23440         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
23441         respectively.
23442
23443         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
23444         DictionaryEntry since we need location info too.
23445
23446         (constant_declaration): Update accordingly.
23447
23448         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
23449         code into another method : UpdateIndices.
23450
23451 2001-11-18  Ravi Pratap  <ravi@ximian.com>
23452
23453         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
23454         some type checking etc.
23455
23456 2001-11-17  Ravi Pratap  <ravi@ximian.com>
23457
23458         * expression.cs (ArrayCreation::ValidateInitializers): Implement
23459         bits to provide dimension info if the user skips doing that.
23460
23461         Update second constructor to store the rank correctly.
23462
23463 2001-11-16  Ravi Pratap  <ravi@ximian.com>
23464
23465         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
23466         and try to implement.
23467
23468         * ../errors/cs0150.cs : Add.
23469
23470         * ../errors/cs0178.cs : Add.
23471
23472 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
23473
23474         * statement.cs: Implement foreach on multi-dimensional arrays. 
23475
23476         * parameter.cs (Parameters.GetParameterByName): Also lookup the
23477         name of the params argument.
23478
23479         * expression.cs: Use EmitStoreOpcode to get the right opcode while
23480         initializing the array.
23481
23482         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
23483         we can use this elsewhere.
23484
23485         * statement.cs: Finish implementation of foreach for single
23486         dimension arrays.
23487
23488         * cs-parser.jay: Use an out-of-band stack to pass information
23489         around, I wonder why I need this.
23490
23491         foreach_block: Make the new foreach_block the current_block.
23492
23493         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
23494         function used to return a static Parameters structure.  Used for
23495         empty parameters, as those are created very frequently.
23496
23497         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
23498
23499 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23500
23501         * interface.cs : Default modifier is private, not public. The
23502         make verify test passes again.
23503
23504 2001-11-15  Ravi Pratap  <ravi@ximian.com>
23505
23506         * support.cs (ReflectionParameters): Fix logic to determine
23507         whether the last parameter is a params one. Test 9 passes again.
23508
23509         * delegate.cs (Populate): Register the builders we define with
23510         RegisterParameterForBuilder. Test 19 passes again.
23511
23512         * cs-parser.jay (property_declaration): Reference $6 instead
23513         of $$ to get at the location.
23514
23515         (indexer_declaration): Similar stuff.
23516
23517         (attribute): Ditto.
23518
23519         * class.cs (Property): Register parameters for the Get and Set methods
23520         if they exist. Test 23 passes again.
23521
23522         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
23523         call to EmitArguments as we are sure there aren't any params arguments. 
23524         Test 32 passes again.
23525
23526         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
23527         IndexOutOfRangeException. 
23528
23529         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
23530         Test 33 now passes again.
23531
23532 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
23533
23534         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
23535         broke a bunch of things.  Will have to come up with a better way
23536         of tracking locations.
23537
23538         * statement.cs: Implemented foreach for single dimension arrays.
23539
23540 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23541
23542         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
23543         an error.  This removes the lookup from the critical path.
23544
23545         * cs-parser.jay: Removed use of temporary_loc, which is completely
23546         broken. 
23547
23548 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
23549
23550         * support.cs (ReflectionParameters.ParameterModifier): Report
23551         whether the argument is a PARAMS argument or not.
23552
23553         * class.cs: Set the attribute `ParamArrayAttribute' on the
23554         parameter argument.
23555
23556         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
23557         and cons_param_array_attribute (ConstructorInfo for
23558         ParamArrayAttribute)., 
23559
23560         * codegen.cs: Emit the return using the `Return' statement, that
23561         way we can report the error correctly for missing return values. 
23562
23563         * class.cs (Method.Emit): Clean up.
23564
23565         * expression.cs (Argument.Resolve): Take another argument: the
23566         location where this argument is used.  Notice that this is not
23567         part of the "Argument" class as to reduce the size of the
23568         structure (we know the approximate location anyways).
23569
23570         Test if the argument is a variable-reference, if not, then
23571         complain with a 206.
23572
23573         (Argument.Emit): Emit addresses of variables.
23574
23575         (Argument.FullDesc): Simplify.
23576
23577         (Invocation.DoResolve): Update for Argument.Resolve.
23578
23579         (ElementAccess.DoResolve): ditto.
23580
23581         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
23582         method should be virtual, as this method is always virtual.
23583
23584         (NewDelegate.DoResolve): Update for Argument.Resolve.
23585
23586         * class.cs (ConstructorInitializer.DoResolve): ditto.
23587
23588         * attribute.cs (Attribute.Resolve): ditto.
23589
23590 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
23591
23592         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
23593
23594         * expression.cs (ParameterReference): Drop IStackStorage and implement
23595         IAssignMethod instead. 
23596
23597         (LocalVariableReference): ditto.
23598
23599         * ecore.cs (FieldExpr): Drop IStackStorage and implement
23600         IAssignMethod instead. 
23601
23602 2001-11-13  Miguel de Icaza <miguel@ximian.com>
23603
23604         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
23605         enumerations that are used in heavily used structures derive from
23606         byte in a laughable and pathetic attempt to reduce memory usage.
23607         This is the kind of pre-optimzations that you should not do at
23608         home without adult supervision.
23609
23610         * expression.cs (UnaryMutator): New class, used to handle ++ and
23611         -- separatedly from the other unary operators.  Cleans up the
23612         code, and kills the ExpressionStatement dependency in Unary.
23613
23614         (Unary): Removed `method' and `Arguments' from this class, making
23615         it smaller, and moving it all to SimpleCall, so I can reuse this
23616         code in other locations and avoid creating a lot of transient data
23617         strucutres when not required.
23618
23619         * cs-parser.jay: Adjust for new changes.
23620
23621 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
23622
23623         * enum.cs (Enum.Populate): If there is a failure during
23624         definition, return
23625
23626         * cs-parser.jay (opt_enum_base): we used to catch type errors
23627         here, but this is really incorrect.  The type error should be
23628         catched during semantic analysis.
23629
23630 2001-12-11  Ravi Pratap  <ravi@ximian.com>
23631
23632         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
23633         current_local_parameters as expected since I, in my stupidity, had forgotten
23634         to do this :-)
23635
23636         * attribute.cs (GetValidPlaces): Fix stupid bug.
23637
23638         * class.cs (Method::Emit): Perform check on applicability of attributes.
23639
23640         (Constructor::Emit): Ditto.
23641
23642         (Field::Emit): Ditto.
23643
23644         (Field.Location): Store location information.
23645
23646         (Property, Event, Indexer, Operator): Ditto.
23647
23648         * cs-parser.jay (field_declaration): Pass in location for each field.
23649
23650         * ../errors/cs0592.cs : Add.
23651
23652 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23653
23654         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
23655
23656         (InitCoreTypes): Update accordingly.
23657
23658         (RegisterAttrType, LookupAttr): Implement.
23659
23660         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
23661         info about the same.
23662
23663         (Resolve): Update to populate the above as necessary.
23664
23665         (Error592): Helper.
23666
23667         (GetValidPlaces): Helper to the above.
23668
23669         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
23670
23671         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
23672
23673 2001-11-12  Ravi Pratap  <ravi@ximian.com>
23674
23675         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
23676
23677         * ../errors/cs0617.cs : Add.
23678
23679 2001-11-11  Ravi Pratap  <ravi@ximian.com>
23680
23681         * enum.cs (Emit): Rename to Populate to be more consistent with what
23682         we expect it to do and when exactly it is called.
23683
23684         * class.cs, rootcontext.cs : Update accordingly.
23685
23686         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
23687         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
23688
23689         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
23690
23691         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
23692         of a fieldinfo using the above, when dealing with a FieldBuilder.
23693
23694 2001-11-10  Ravi Pratap  <ravi@ximian.com>
23695
23696         * ../errors/cs0031.cs : Add.
23697
23698         * ../errors/cs1008.cs : Add.
23699
23700         * ../errrors/cs0543.cs : Add.
23701
23702         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
23703         enum type.
23704
23705         (FindMembers): Implement.
23706
23707         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
23708         enums and delegates too.
23709
23710         (enum_types): Rename to builder_to_enum.
23711
23712         (delegate_types): Rename to builder_to_delegate.
23713
23714         * delegate.cs (FindMembers): Implement.
23715
23716 2001-11-09  Ravi Pratap  <ravi@ximian.com>
23717
23718         * typemanager.cs (IsEnumType): Implement.
23719
23720         * enum.cs (Emit): Re-write parts to account for the underlying type
23721         better and perform checking etc.
23722
23723         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
23724         of the underlying type.
23725
23726         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
23727         value
23728
23729         * enum.cs (error31): Helper to report error #31.
23730
23731         * cs-parser.jay (enum_declaration): Store location of each member too.
23732
23733         * enum.cs (member_to_location): New hashtable. 
23734
23735         (AddEnumMember): Update location hashtable.
23736
23737         (Emit): Use the location of each member while reporting errors.
23738
23739 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
23740
23741         * cs-parser.jay: A for_initializer if is a
23742         local_variable_declaration really ammount to have an implicit
23743         block with the variable declaration and no initializer for for.
23744
23745         * statement.cs (For.Emit): Cope with null initializers.
23746
23747         This fixes the infinite loop on for initializers.
23748
23749 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
23750
23751         * enum.cs: More cleanup.
23752
23753         * ecore.cs: Remove dead code.
23754
23755         * class.cs (Property.Emit): More simplification.
23756         (Event.Emit): ditto.
23757
23758         Reworked to have less levels of indentation.
23759
23760 2001-11-08  Ravi Pratap  <ravi@ximian.com>
23761
23762         * class.cs (Property): Emit attributes.
23763
23764         (Field): Ditto.
23765
23766         (Event): Ditto.
23767
23768         (Indexer): Ditto.
23769
23770         (Operator): Ditto.
23771
23772         * enum.cs (Emit): Ditto.
23773
23774         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
23775         Enums too.
23776
23777         * class.cs (Field, Event, etc.): Move attribute generation into the
23778         Emit method everywhere.
23779
23780         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
23781         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
23782         as we had no way of defining nested enums !
23783
23784         * rootcontext.cs : Adjust code accordingly.
23785
23786         * typemanager.cs (AddEnumType): To keep track of enum types separately.
23787
23788 2001-11-07  Ravi Pratap  <ravi@ximian.com>
23789
23790         * expression.cs (EvalConstantExpression): Move into ecore.cs
23791
23792         * enum.cs (Enum): Rename some members and make them public and readonly
23793         according to our convention.
23794
23795         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
23796         nothing else.
23797
23798         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
23799
23800         (Enum::Emit): Write a simple version for now which doesn't try to compute
23801         expressions. I shall modify this to be more robust in just a while.
23802
23803         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
23804
23805         (TypeContainer::CloseType): Create the Enum types too.
23806
23807         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
23808
23809         * expression.cs (EvalConstantExpression): Get rid of completely.
23810
23811         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
23812         user-defined values and other cases.
23813
23814         (IsValidEnumLiteral): Helper function.
23815
23816         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
23817         out there in the case we had a literal FieldExpr.
23818
23819         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
23820
23821         (Literalize): Revamp a bit to take two arguments.
23822
23823         (EnumLiteral): New class which derives from Literal to wrap enum literals.
23824
23825 2001-11-06  Ravi Pratap  <ravi@ximian.com>
23826
23827         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
23828
23829         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
23830
23831         (Resolve): Use the above to ensure we have proper initializers.
23832
23833 2001-11-05  Ravi Pratap  <ravi@ximian.com>
23834
23835         * expression.cs (Expression::EvalConstantExpression): New method to 
23836         evaluate constant expressions.
23837
23838         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
23839
23840 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
23841
23842         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
23843         in an array.
23844
23845         (Binary.ResolveOperator): Handle operator != (object a, object b)
23846         and operator == (object a, object b);
23847
23848         (Binary.DoNumericPromotions): Indicate whether the numeric
23849         promotion was possible.
23850
23851         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
23852         Implement.  
23853
23854         Made the ArrayAccess implement interface IAssignMethod instead of
23855         IStackStore as the order in which arguments are passed reflects
23856         this.
23857
23858         * assign.cs: Instead of using expr.ExprClass to select the way of
23859         assinging, probe for the IStackStore/IAssignMethod interfaces.
23860
23861         * typemanager.cs: Load InitializeArray definition.
23862
23863         * rootcontext.cs (RootContext.MakeStaticData): Used to define
23864         static data that can be used to initialize arrays. 
23865
23866 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
23867
23868         * expression.cs: Handle operator== and operator!= for booleans.
23869
23870         (Conditioal.Reduce): Implement reducer for the ?: operator.
23871
23872         (Conditional.Resolve): Implement dead code elimination.
23873
23874         (Binary.Resolve): Catch string literals and return a new
23875         concatenated string.
23876
23877         (Unary.Reduce): Implement reduction of unary expressions.
23878
23879         * ecore.cs: Split out the expression core handling here.
23880
23881         (Expression.Reduce): New method used to perform constant folding
23882         and CSE.  This is needed to support constant-expressions. 
23883
23884         * statement.cs (Statement.EmitBoolExpression): Pass true and false
23885         targets, and optimize for !x.
23886
23887 2001-11-04  Ravi Pratap  <ravi@ximian.com>
23888
23889         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
23890         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
23891         set custom atttributes.
23892
23893         * literal.cs (Literal::GetValue): New abstract method to return the actual
23894         value of the literal, cast as an object.
23895
23896         (*Literal): Implement GetValue method.
23897
23898         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
23899         expressions to the arraylist but objects of type Argument.
23900
23901         * class.cs (TypeContainer::Emit): Emit our attributes too.
23902
23903         (Method::Emit, Constructor::Emit): Ditto.
23904
23905         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
23906         to be ignoring earlier.
23907
23908 2001-11-03  Ravi Pratap  <ravi@ximian.com>
23909
23910         * attribute.cs (AttributeSection::Define): Implement to do the business
23911         of constructing a CustomAttributeBuilder.
23912
23913         (Attribute): New trivial class. Increases readability of code.  
23914
23915         * cs-parser.jay : Update accordingly.
23916
23917         (positional_argument_list, named_argument_list, named_argument): New rules
23918
23919         (attribute_arguments): Use the above so that we are more correct.
23920
23921 2001-11-02  Ravi Pratap  <ravi@ximian.com>
23922
23923         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
23924         to perform all checks for a method with a params parameter.
23925
23926         (Invocation::OverloadResolve): Update to use the above method and therefore
23927         cope correctly with params method invocations.
23928
23929         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
23930         params too.
23931
23932         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
23933         constructors in our parent too because we can't afford to miss out on 
23934         protected ones ;-)
23935
23936         * attribute.cs (AttributeSection): New name for the class Attribute
23937
23938         Other trivial changes to improve readability.
23939
23940         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
23941         use the new class names.
23942
23943 2001-11-01  Ravi Pratap  <ravi@ximian.com>
23944
23945         * class.cs (Method::Define): Complete definition for params types too
23946
23947         (Indexer::Define): Ditto.
23948
23949         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
23950         Cope everywhere with a request for info about the array parameter.
23951
23952 2001-11-01  Ravi Pratap  <ravi@ximian.com>
23953
23954         * tree.cs (RecordNamespace): Fix up to check for the correct key.
23955
23956         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
23957         local_variable_type to extract the string corresponding to the type.
23958
23959         (local_variable_type): Fixup the action to use the new helper method.
23960
23961         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
23962         go.
23963
23964         * expression.cs : Clean out code which uses the above.
23965
23966 2001-10-31  Ravi Pratap  <ravi@ximian.com>
23967
23968         * typemanager.cs (RegisterMethod): Check if we already have an existing key
23969         and bale out if necessary by returning a false.
23970
23971         (RegisterProperty): Ditto.
23972
23973         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
23974         and print out appropriate error messages.
23975
23976         * interface.cs (everywhere): Ditto.
23977
23978         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
23979         location to constructor.
23980
23981         * class.cs (Property, Event, Indexer): Update accordingly.
23982
23983         * ../errors/cs111.cs : Added.
23984
23985         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
23986         of a method, as laid down by the spec.
23987
23988         (Invocation::OverloadResolve): Use the above method.
23989
23990 2001-10-31  Ravi Pratap  <ravi@ximian.com>
23991
23992         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
23993         now take a TypeContainer and a Parameters object.
23994
23995         (ParameterData): Modify return type of ParameterModifier method to be 
23996         Parameter.Modifier and not a string.
23997
23998         (ReflectionParameters, InternalParameters): Update accordingly.
23999
24000         * expression.cs (Argument::GetParameterModifier): Same here.
24001
24002         * support.cs (InternalParameters::ParameterType): Find a better way of determining
24003         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
24004         symbol in it at all so maybe this is only for now.
24005
24006 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24007
24008         * support.cs (InternalParameters): Constructor now takes an extra argument 
24009         which is the actual Parameters class.
24010
24011         (ParameterDesc): Update to provide info on ref/out modifiers.
24012
24013         * class.cs (everywhere): Update call to InternalParameters to pass in
24014         the second argument too.
24015
24016         * support.cs (ParameterData): Add ParameterModifier, which is a method 
24017         to return the modifier info [ref/out etc]
24018
24019         (InternalParameters, ReflectionParameters): Implement the above.
24020
24021         * expression.cs (Argument::ParameterModifier): Similar function to return
24022         info about the argument's modifiers.
24023
24024         (Invocation::OverloadResolve): Update to take into account matching modifiers 
24025         too.
24026
24027         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
24028         a new SetFormalParameters object which we pass to InternalParameters.
24029
24030 2001-10-30  Ravi Pratap  <ravi@ximian.com>
24031
24032         * expression.cs (NewArray): Merge into the ArrayCreation class.
24033
24034 2001-10-29  Ravi Pratap  <ravi@ximian.com>
24035
24036         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
24037         NewUserdefinedArray into one as there wasn't much of a use in having
24038         two separate ones.
24039
24040         * expression.cs (Argument): Change field's name to ArgType from Type.
24041
24042         (Type): New readonly property which returns the proper type, taking into 
24043         account ref/out modifiers.
24044
24045         (everywhere): Adjust code accordingly for the above.
24046
24047         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
24048         whether we are emitting for a ref or out parameter.
24049
24050         * expression.cs (Argument::Emit): Use the above field to set the state.
24051
24052         (LocalVariableReference::Emit): Update to honour the flag and emit the
24053         right stuff.
24054
24055         * parameter.cs (Attributes): Set the correct flags for ref parameters.
24056
24057         * expression.cs (Argument::FullDesc): New function to provide a full desc.
24058
24059         * support.cs (ParameterData): Add method ParameterDesc to the interface.
24060
24061         (ReflectionParameters, InternalParameters): Implement the above method.
24062
24063         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
24064         reporting errors.
24065
24066         (Invocation::FullMethodDesc): Ditto. 
24067
24068 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
24069
24070         * cs-parser.jay: Add extra production for the second form of array
24071         creation. 
24072
24073         * expression.cs (ArrayCreation): Update to reflect the above
24074         change. 
24075
24076         * Small changes to prepare for Array initialization.
24077
24078 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
24079
24080         * typemanager.cs (ImplementsInterface): interface might be null;
24081         Deal with this problem;
24082
24083         Also, we do store negative hits on the cache (null values), so use
24084         this instead of calling t.GetInterfaces on the type everytime.
24085
24086 2001-10-28  Ravi Pratap  <ravi@ximian.com>
24087
24088         * typemanager.cs (IsBuiltinType): New method to help determine the same.
24089
24090         * expression.cs (New::DoResolve): Get rid of array creation code and instead
24091         split functionality out into different classes.
24092
24093         (New::FormArrayType): Move into NewBuiltinArray.
24094
24095         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
24096         quite useless.
24097
24098         (NewBuiltinArray): New class to handle creation of built-in arrays.
24099
24100         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
24101         account creation of one-dimensional arrays.
24102
24103         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
24104
24105         (NewUserdefinedArray::DoResolve): Implement.
24106
24107         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
24108
24109         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
24110         we maintain inside the TypeManager. This is necessary to perform lookups on the
24111         module builder.
24112
24113         (LookupType): Update to perform GetType on the module builders too.     
24114
24115         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
24116
24117         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
24118
24119 2001-10-23  Ravi Pratap  <ravi@ximian.com>
24120
24121         * expression.cs (New::DoResolve): Implement guts of array creation.
24122
24123         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
24124
24125 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
24126
24127         * expression.cs: Fix bug I introduced lsat night that broke
24128         Delegates. 
24129
24130         (Expression.Resolve): Report a 246 error (can not resolve name)
24131         if we find a SimpleName in the stream.
24132
24133         (Expression.ResolveLValue): Ditto.
24134
24135         (Expression.ResolveWithSimpleName): This function is a variant of
24136         ResolveName, this one allows SimpleNames to be returned without a
24137         warning.  The only consumer of SimpleNames is MemberAccess
24138
24139 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
24140
24141         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
24142         might arrive here.  I have my doubts that this is correct.
24143
24144         * statement.cs (Lock): Implement lock statement.
24145
24146         * cs-parser.jay: Small fixes to support `lock' and `using'
24147
24148         * cs-tokenizer.cs: Remove extra space
24149
24150         * driver.cs: New flag --checked, allows to turn on integer math
24151         checking. 
24152
24153         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
24154         Threading.Monitor.Exit 
24155
24156 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
24157
24158         * expression.cs (IndexerAccess::DoResolveLValue): Set the
24159         Expression Class to be IndexerAccess.
24160
24161         Notice that Indexer::DoResolve sets the eclass to Value.
24162
24163 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
24164
24165         * class.cs (TypeContainer::Emit): Emit code for indexers.
24166
24167         * assign.cs (IAssignMethod): New interface implemented by Indexers
24168         and Properties for handling assignment.
24169
24170         (Assign::Emit): Simplify and reuse code. 
24171
24172         * expression.cs (IndexerAccess, PropertyExpr): Implement
24173         IAssignMethod, clean up old code. 
24174
24175 2001-10-22  Ravi Pratap  <ravi@ximian.com>
24176
24177         * typemanager.cs (ImplementsInterface): New method to determine if a type
24178         implements a given interface. Provides a nice cache too.
24179
24180         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
24181         method.
24182
24183         (ConvertReferenceExplicit): Ditto.
24184
24185         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
24186         various methods, with correct names etc.
24187
24188         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
24189         Operator.UnaryNegation.
24190
24191         * cs-parser.jay (operator_declarator): Be a little clever in the case where
24192         we have a unary plus or minus operator.
24193
24194         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
24195         UnaryMinus.
24196
24197         * everywhere : update accordingly.
24198
24199         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
24200         respectively.
24201
24202         * class.cs (Method::Define): For the case where we are implementing a method
24203         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
24204         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
24205
24206 2001-10-21  Ravi Pratap  <ravi@ximian.com>
24207
24208         * interface.cs (FindMembers): Implement to work around S.R.E
24209         lameness.
24210
24211         * typemanager.cs (IsInterfaceType): Implement.
24212
24213         (FindMembers): Update to handle interface types too.
24214
24215         * expression.cs (ImplicitReferenceConversion): Re-write bits which
24216         use IsAssignableFrom as that is not correct - it doesn't work.
24217
24218         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
24219         and accordingly override EmitStatement.
24220
24221         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
24222         using the correct logic :-)
24223
24224 2001-10-19  Ravi Pratap  <ravi@ximian.com>
24225
24226         * ../errors/cs-11.cs : Add to demonstrate error -11 
24227
24228 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
24229
24230         * assign.cs (Assign::Resolve): Resolve right hand side first, and
24231         then pass this as a hint to ResolveLValue.
24232
24233         * expression.cs (FieldExpr): Add Location information
24234
24235         (FieldExpr::LValueResolve): Report assignment to readonly
24236         variable. 
24237
24238         (Expression::ExprClassFromMemberInfo): Pass location information.
24239
24240         (Expression::ResolveLValue): Add new method that resolves an
24241         LValue. 
24242
24243         (Expression::DoResolveLValue): Default invocation calls
24244         DoResolve. 
24245
24246         (Indexers): New class used to keep track of indexers in a given
24247         Type. 
24248
24249         (IStackStore): Renamed from LValue, as it did not really describe
24250         what this did.  Also ResolveLValue is gone from this interface and
24251         now is part of Expression.
24252
24253         (ElementAccess): Depending on the element access type
24254
24255         * typemanager.cs: Add `indexer_name_type' as a Core type
24256         (System.Runtime.CompilerServices.IndexerNameAttribute)
24257
24258         * statement.cs (Goto): Take a location.
24259
24260 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24261
24262         * delegate.cs (Delegate::VerifyDelegate): New method to verify
24263         if two delegates are compatible.
24264
24265         (NewDelegate::DoResolve): Update to take care of the case when
24266         we instantiate a delegate from another delegate.
24267
24268         * typemanager.cs (FindMembers): Don't even try to look up members
24269         of Delegate types for now.
24270
24271 2001-10-18  Ravi Pratap  <ravi@ximian.com>
24272
24273         * delegate.cs (NewDelegate): New class to take care of delegate
24274         instantiation.
24275
24276         * expression.cs (New): Split the delegate related code out into 
24277         the NewDelegate class.
24278
24279         * delegate.cs (DelegateInvocation): New class to handle delegate 
24280         invocation.
24281
24282         * expression.cs (Invocation): Split out delegate related code into
24283         the DelegateInvocation class.
24284
24285 2001-10-17  Ravi Pratap  <ravi@ximian.com>
24286
24287         * expression.cs (New::DoResolve): Implement delegate creation fully
24288         and according to the spec.
24289
24290         (New::DoEmit): Update to handle delegates differently.
24291
24292         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
24293         because of which we were printing out arguments in reverse order !
24294
24295         * delegate.cs (VerifyMethod): Implement to check if the given method
24296         matches the delegate.
24297
24298         (FullDelegateDesc): Implement.
24299
24300         (VerifyApplicability): Implement.
24301
24302         * expression.cs (Invocation::DoResolve): Update to accordingly handle
24303         delegate invocations too.
24304
24305         (Invocation::Emit): Ditto.
24306
24307         * ../errors/cs1593.cs : Added.
24308
24309         * ../errors/cs1594.cs : Added.
24310
24311         * delegate.cs (InstanceExpression, TargetMethod): New properties.
24312
24313 2001-10-16  Ravi Pratap  <ravi@ximian.com>
24314
24315         * typemanager.cs (intptr_type): Core type for System.IntPtr
24316
24317         (InitCoreTypes): Update for the same.
24318
24319         (iasyncresult_type, asynccallback_type): Ditto.
24320
24321         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
24322         correct.
24323
24324         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
24325         too.
24326
24327         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
24328         the builders for the 4 members of a delegate type :-)
24329
24330         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
24331         type.
24332
24333         * expression.cs (New::DoResolve): Implement guts for delegate creation.
24334
24335         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
24336
24337 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
24338
24339         * statement.cs (Break::Emit): Implement.   
24340         (Continue::Emit): Implement.
24341
24342         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24343         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24344         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
24345         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
24346         end loop
24347
24348         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
24349         properties that track the label for the current loop (begin of the
24350         loop and end of the loop).
24351
24352 2001-10-15  Ravi Pratap  <ravi@ximian.com>
24353
24354         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
24355         use of emitting anything at all.
24356
24357         * class.cs, rootcontext.cs : Get rid of calls to the same.
24358
24359         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
24360
24361         (Populate): Define the constructor correctly and set the implementation
24362         attributes.
24363
24364         * typemanager.cs (delegate_types): New hashtable to hold delegates that
24365         have been defined.
24366
24367         (AddDelegateType): Implement.
24368
24369         (IsDelegateType): Implement helper method.
24370
24371         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
24372
24373         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
24374         and accordingly handle it.
24375
24376         * delegate.cs (Populate): Take TypeContainer argument.
24377         Implement bits to define the Invoke method. However, I still haven't figured out
24378         how to take care of the native int bit :-(
24379
24380         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
24381         Qualify the name of the delegate, not its return type !
24382
24383         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
24384         conversion.
24385
24386         (StandardConversionExists): Checking for array types turns out to be recursive.
24387
24388         (ConvertReferenceExplicit): Implement array conversion.
24389
24390         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
24391
24392 2001-10-12  Ravi Pratap  <ravi@ximian.com>
24393
24394         * cs-parser.jay (delegate_declaration): Store the fully qualified
24395         name as it is a type declaration.
24396
24397         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
24398         readonly.
24399
24400         (DefineDelegate): Renamed from Define. Does the same thing essentially,
24401         as TypeContainer::DefineType.
24402
24403         (Populate): Method in which all the definition of the various methods (Invoke)
24404         etc is done.
24405
24406         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
24407         see.
24408
24409         (CloseDelegate): Finally creates the delegate.
24410
24411         * class.cs (TypeContainer::DefineType): Update to define delegates.
24412         (Populate, Emit and CloseType): Do the same thing here too.
24413
24414         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
24415         delegates in all these operations.
24416
24417 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
24418
24419         * expression.cs: LocalTemporary: a new expression used to
24420         reference a temporary that has been created.
24421
24422         * assign.cs: Handle PropertyAccess back here, so that we can
24423         provide the proper semantic access to properties.
24424
24425         * expression.cs (Expression::ConvertReferenceExplicit): Implement
24426         a few more explicit conversions. 
24427
24428         * modifiers.cs: `NEW' modifier maps to HideBySig.
24429
24430         * expression.cs (PropertyExpr): Make this into an
24431         ExpressionStatement, and support the EmitStatement code path. 
24432
24433         Perform get/set error checking, clean up the interface.
24434
24435         * assign.cs: recognize PropertyExprs as targets, and if so, turn
24436         them into toplevel access objects.
24437
24438 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
24439
24440         * expression.cs: PropertyExpr::PropertyExpr: use work around the
24441         SRE.
24442
24443         * typemanager.cs: Keep track here of our PropertyBuilders again to
24444         work around lameness in SRE.
24445
24446 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
24447
24448         * expression.cs (LValue::LValueResolve): New method in the
24449         interface, used to perform a second resolution pass for LValues. 
24450
24451         (This::DoResolve): Catch the use of this in static methods.
24452
24453         (This::LValueResolve): Implement.
24454
24455         (This::Store): Remove warning, assigning to `this' in structures
24456         is 
24457
24458         (Invocation::Emit): Deal with invocation of
24459         methods on value types.  We need to pass the address to structure
24460         methods rather than the object itself.  (The equivalent code to
24461         emit "this" for structures leaves the entire structure on the
24462         stack instead of a pointer to it). 
24463
24464         (ParameterReference::DoResolve): Compute the real index for the
24465         argument based on whether the method takes or not a `this' pointer
24466         (ie, the method is static).
24467
24468         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
24469         value types returned from functions when we need to invoke a
24470         method on the sturcture.
24471
24472
24473 2001-10-11  Ravi Pratap  <ravi@ximian.com>
24474
24475         * class.cs (TypeContainer::DefineType): Method to actually do the business of
24476         defining the type in the Modulebuilder or Typebuilder. This is to take
24477         care of nested types which need to be defined on the TypeBuilder using
24478         DefineNestedMethod.
24479
24480         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
24481         methods in RootContext, only ported to be part of TypeContainer.
24482
24483         (TypeContainer::GetInterfaceOrClass): Ditto.
24484
24485         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
24486
24487         * interface.cs (Interface::DefineInterface): New method. Does exactly
24488         what RootContext.CreateInterface did earlier, only it takes care of nested types 
24489         too.
24490
24491         (Interface::GetInterfaces): Move from RootContext here and port.
24492
24493         (Interface::GetInterfaceByName): Same here.
24494
24495         * rootcontext.cs (ResolveTree): Re-write.
24496
24497         (PopulateTypes): Re-write.
24498
24499         * class.cs (TypeContainer::Populate): Populate nested types too.
24500         (TypeContainer::Emit): Emit nested members too.
24501
24502         * typemanager.cs (AddUserType): Do not make use of the FullName property,
24503         instead just use the name argument passed in as it is already fully
24504         qualified.
24505
24506         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
24507         to TypeContainer mapping to see if a type is user-defined.
24508
24509         * class.cs (TypeContainer::CloseType): Implement. 
24510
24511         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
24512         the default constructor.
24513
24514         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
24515         twice.
24516
24517         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
24518
24519         * interface.cs (CloseType): Create the type here.
24520
24521         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
24522         the hierarchy.
24523
24524         Remove all the methods which are now in TypeContainer.
24525
24526 2001-10-10  Ravi Pratap  <ravi@ximian.com>
24527
24528         * delegate.cs (Define): Re-write bits to define the delegate
24529         correctly.
24530
24531 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
24532
24533         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
24534
24535         * expression.cs (ImplicitReferenceConversion): handle null as well
24536         as a source to convert to any reference type.
24537
24538         * statement.cs (Return): Perform any implicit conversions to
24539         expected return type.  
24540
24541         Validate use of return statement.  
24542
24543         * codegen.cs (EmitContext): Pass the expected return type here.
24544
24545         * class.cs (Method, Constructor, Property): Pass expected return
24546         type to EmitContext.
24547
24548 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
24549
24550         * expression.cs: Make DoResolve take an EmitContext instead of a
24551         TypeContainer.
24552
24553         Replaced `l' and `location' for `loc', for consistency.
24554
24555         (Error, Warning): Remove unneeded Tc argument.
24556
24557         * assign.cs, literal.cs, constant.cs: Update to new calling
24558         convention. 
24559
24560         * codegen.cs: EmitContext now contains a flag indicating whether
24561         code is being generated in a static method or not.
24562
24563         * cs-parser.jay: DecomposeQI, new function that replaces the old
24564         QualifiedIdentifier.  Now we always decompose the assembled
24565         strings from qualified_identifier productions into a group of
24566         memberaccesses.
24567
24568 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
24569
24570         * rootcontext.cs: Deal with field-less struct types correctly now
24571         by passing the size option to Define Type.
24572
24573         * class.cs: Removed hack that created one static field. 
24574
24575 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24576
24577         * statement.cs: Moved most of the code generation here. 
24578
24579 2001-10-09  Ravi Pratap  <ravi@ximian.com>
24580
24581         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
24582         seem very right.
24583
24584         (ElementAccess): Remove useless bits for now - keep checks as the spec
24585         says.
24586
24587 2001-10-08  Ravi Pratap  <ravi@ximian.com>
24588
24589         * expression.cs (ElementAccess::DoResolve): Remove my crap code
24590         and start performing checks according to the spec.
24591
24592 2001-10-07  Ravi Pratap  <ravi@ximian.com>
24593
24594         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
24595         rank_specifiers instead.
24596
24597         (rank_specifiers): Change the order in which the rank specifiers are stored
24598
24599         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
24600
24601         * expression.cs (ElementAccess): Implement the LValue interface too.
24602
24603 2001-10-06  Ravi Pratap  <ravi@ximian.com>
24604
24605         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
24606         except that user defined conversions are not included.
24607
24608         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
24609         perform the conversion of the return type, if necessary.
24610
24611         (New::DoResolve): Check whether we are creating an array or an object
24612         and accordingly do the needful.
24613
24614         (New::Emit): Same here.
24615
24616         (New::DoResolve): Implement guts of array creation.
24617
24618         (New::FormLookupType): Helper function.
24619
24620 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
24621
24622         * codegen.cs: Removed most of the code generation here, and move the
24623         corresponding code generation bits to the statement classes. 
24624
24625         Added support for try/catch/finalize and throw.
24626
24627         * cs-parser.jay: Added support for try/catch/finalize.
24628
24629         * class.cs: Catch static methods having the flags override,
24630         virtual or abstract.
24631
24632         * expression.cs (UserCast): This user cast was not really doing
24633         what it was supposed to do.  Which is to be born in fully resolved
24634         state.  Parts of the resolution were being performed at Emit time! 
24635
24636         Fixed this code.
24637
24638 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24639
24640         * expression.cs: Implicity convert the result from UserCast.
24641
24642 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24643
24644         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
24645         prevented it from working correctly. 
24646
24647         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
24648         merely ConvertImplicit.
24649
24650 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
24651
24652         * typemanager.cs: Make the LookupTypeContainer function static,
24653         and not per-instance.  
24654
24655         * class.cs: Make static FindMembers (the one that takes a Type
24656         argument). 
24657
24658         * codegen.cs: Add EmitForeach here.
24659
24660         * cs-parser.jay: Make foreach a toplevel object instead of the
24661         inline expansion, as we need to perform semantic analysis on it. 
24662
24663 2001-10-05  Ravi Pratap  <ravi@ximian.com>
24664
24665         * expression.cs (Expression::ImplicitUserConversion): Rename to
24666         UserDefinedConversion.
24667
24668         (Expression::UserDefinedConversion): Take an extra argument specifying 
24669         whether we look for explicit user conversions too.
24670
24671         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
24672
24673         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
24674
24675         (ExplicitUserConversion): Make it a call to UserDefinedConversion
24676         with the appropriate arguments.
24677
24678         * cs-parser.jay (cast_expression): Record location too.
24679
24680         * expression.cs (Cast): Record location info.
24681
24682         (Expression::ConvertExplicit): Take location argument.
24683
24684         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
24685         to determine if we are doing explicit conversions.
24686
24687         (UserCast::Emit): Update accordingly.
24688
24689         (Expression::ConvertExplicit): Report an error if everything fails.
24690
24691         * ../errors/cs0030.cs : Add.
24692
24693 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
24694
24695         * modifiers.cs: If the ABSTRACT keyword is present, also set the
24696         virtual and newslot bits. 
24697
24698         * class.cs (TypeContainer::RegisterRequiredImplementations):
24699         Record methods we need.
24700
24701         (TypeContainer::MakeKey): Helper function to make keys for
24702         MethodBases, since the Methodbase key is useless.
24703
24704         (TypeContainer::Populate): Call RegisterRequiredImplementations
24705         before defining the methods.   
24706
24707         Create a mapping for method_builders_to_methods ahead of time
24708         instead of inside a tight loop.
24709
24710         (::RequireMethods):  Accept an object as the data to set into the
24711         hashtable so we can report interface vs abstract method mismatch.
24712
24713 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24714
24715         * report.cs: Make all of it static.
24716
24717         * rootcontext.cs: Drop object_type and value_type computations, as
24718         we have those in the TypeManager anyways.
24719
24720         Drop report instance variable too, now it is a global.
24721
24722         * driver.cs: Use try/catch on command line handling.
24723
24724         Add --probe option to debug the error reporting system with a test
24725         suite. 
24726
24727         * report.cs: Add support for exiting program when a probe
24728         condition is reached.
24729
24730 2001-10-03  Ravi Pratap  <ravi@ximian.com>
24731
24732         * expression.cs (Binary::DoNumericPromotions): Fix the case when
24733         we do a forcible conversion regardless of type, to check if 
24734         ForceConversion returns a null.
24735
24736         (Binary::error19): Use location to report error.
24737
24738         (Unary::error23): Use location here too.
24739
24740         * ../errors/cs0019.cs : Check in.
24741
24742         * ../errors/cs0023.cs : Check in.
24743
24744         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
24745         case of a non-null MethodInfo object with a length of 0 !
24746
24747         (Binary::ResolveOperator): Flag error if overload resolution fails to find
24748         an applicable member - according to the spec :-)
24749         Also fix logic to find members in base types.
24750
24751         (Unary::ResolveOperator): Same here.
24752
24753         (Unary::report23): Change name to error23 and make first argument a TypeContainer
24754         as I was getting thoroughly confused between this and error19 :-)
24755
24756         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
24757         (::FindMostEncompassedType): Implement.
24758         (::FindMostEncompassingType): Implement.
24759         (::StandardConversionExists): Implement.
24760
24761         (UserImplicitCast): Re-vamp. We now need info about most specific
24762         source and target types so that we can do the necessary conversions.
24763
24764         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
24765         mathematical union with no duplicates.
24766
24767 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
24768
24769         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
24770         in order from base classes to child classes, so that we can in
24771         child classes look up in our parent for method names and
24772         attributes (required for handling abstract, virtual, new, override
24773         constructs: we need to instrospect our base class, and if we dont
24774         populate the classes in order, the introspection might be
24775         incorrect.  For example, a method could query its parent before
24776         the parent has any methods and would determine that the parent has
24777         no abstract methods (while it could have had them)).
24778
24779         (RootContext::CreateType): Record the order in which we define the
24780         classes.
24781
24782 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
24783
24784         * class.cs (TypeContainer::Populate): Also method definitions can
24785         fail now, keep track of this.
24786
24787         (TypeContainer::FindMembers): Implement support for
24788         DeclaredOnly/noDeclaredOnly flag.
24789
24790         (Constructor::Emit) Return the ConstructorBuilder.
24791
24792         (Method::Emit) Return the MethodBuilder. 
24793         Check for abstract or virtual methods to be public.
24794
24795         * rootcontext.cs (RootContext::CreateType): Register all the
24796         abstract methods required for the class to be complete and the
24797         interface methods that must be implemented. 
24798
24799         * cs-parser.jay: Report error 501 (method requires body if it is
24800         not marked abstract or extern).
24801
24802         * expression.cs (TypeOf::Emit): Implement.
24803
24804         * typemanager.cs: runtime_handle_type, new global type.
24805
24806         * class.cs (Property::Emit): Generate code for properties.
24807
24808 2001-10-02  Ravi Pratap  <ravi@ximian.com>
24809
24810         * expression.cs (Unary::ResolveOperator): Find operators on base type
24811         too - we now conform exactly to the spec.
24812
24813         (Binary::ResolveOperator): Same here.
24814
24815         * class.cs (Operator::Define): Fix minor quirk in the tests.
24816
24817         * ../errors/cs0215.cs : Added.
24818
24819         * ../errors/cs0556.cs : Added.
24820
24821         * ../errors/cs0555.cs : Added.
24822
24823 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24824
24825         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
24826         single integer which is really efficient
24827
24828 2001-10-01  Ravi Pratap  <ravi@ximian.com>
24829
24830         *  expression.cs (Expression::ImplicitUserConversion): Use location
24831         even in the case when we are examining True operators.
24832  
24833         * class.cs (Operator::Define): Perform extensive checks to conform
24834         with the rules for operator overloading in the spec.
24835
24836         * expression.cs (Expression::ImplicitReferenceConversion): Implement
24837         some of the other conversions mentioned in the spec.
24838
24839         * typemanager.cs (array_type): New static member for the System.Array built-in
24840         type.
24841
24842         (cloneable_interface): For System.ICloneable interface.
24843
24844         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
24845         we start resolving the tree and populating types.
24846
24847         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
24848  
24849 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
24850
24851         * expression.cs (Expression::ExprClassFromMemberInfo,
24852         Expression::Literalize): Create literal expressions from
24853         FieldInfos which are literals.
24854
24855         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
24856         type casts, because they were wrong.  The test suite in tests
24857         caught these ones.
24858
24859         (ImplicitNumericConversion): ushort to ulong requires a widening
24860         cast. 
24861
24862         Int32 constant to long requires widening cast as well.
24863
24864         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
24865         for integers because the type on the stack is not i4.
24866
24867 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
24868
24869         * expression.cs (report118): require location argument. 
24870
24871         * parameter.cs: Do not dereference potential null value.
24872
24873         * class.cs: Catch methods that lack the `new' keyword when
24874         overriding a name.  Report warnings when `new' is used without
24875         anything being there to override.
24876
24877         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
24878
24879         * class.cs: Only add constructor to hashtable if it is non-null
24880         (as now constructors can fail on define).
24881
24882         (TypeManager, Class, Struct): Take location arguments.
24883
24884         Catch field instance initialization in structs as errors.
24885
24886         accepting_filter: a new filter for FindMembers that is static so
24887         that we dont create an instance per invocation.
24888
24889         (Constructor::Define): Catch errors where a struct constructor is
24890         parameterless 
24891
24892         * cs-parser.jay: Pass location information for various new
24893         constructs. 
24894
24895         * delegate.cs (Delegate): take a location argument.
24896
24897         * driver.cs: Do not call EmitCode if there were problesm in the
24898         Definition of the types, as many Builders wont be there. 
24899
24900         * decl.cs (Decl::Decl): Require a location argument.
24901
24902         * cs-tokenizer.cs: Handle properly hex constants that can not fit
24903         into integers, and find the most appropiate integer for it.
24904
24905         * literal.cs: Implement ULongLiteral.
24906
24907         * rootcontext.cs: Provide better information about the location of
24908         failure when CreateType fails.
24909
24910 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
24911
24912         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
24913         as well.
24914
24915         * expression.cs (Binary::CheckShiftArguments): Add missing type
24916         computation.
24917         (Binary::ResolveOperator): Add type to the logical and and logical
24918         or, Bitwise And/Or and Exclusive Or code paths, it was missing
24919         before.
24920
24921         (Binary::DoNumericPromotions): In the case where either argument
24922         is ulong (and most signed types combined with ulong cause an
24923         error) perform implicit integer constant conversions as well.
24924
24925 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
24926
24927         * expression.cs (UserImplicitCast): Method should always be
24928         non-null. 
24929         (Invocation::BetterConversion): Simplified test for IntLiteral.
24930
24931         (Expression::ImplicitNumericConversion): Split this routine out.
24932         Put the code that performs implicit constant integer conversions
24933         here. 
24934
24935         (Expression::Resolve): Become a wrapper around DoResolve so we can
24936         check eclass and type being set after resolve.
24937
24938         (Invocation::Badness): Remove this dead function
24939
24940         (Binary::ResolveOperator): Do not compute the expensive argumnets
24941         unless we have a union for it.
24942
24943         (Probe::Emit): Is needs to do an isinst and then
24944         compare against null.
24945
24946         (::CanConvert): Added Location argument.  If the Location argument
24947         is null (Location.Null), then we do not report errors.  This is
24948         used by the `probe' mechanism of the Explicit conversion.  We do
24949         not want to generate an error for something that the user
24950         explicitly requested to be casted.  But the pipeline for an
24951         explicit cast first tests for potential implicit casts.
24952
24953         So for now, if the Location is null, it means `Probe only' to
24954         avoid adding another argument.   Might have to revise this
24955         strategy later.
24956
24957         (ClassCast): New class used to type cast objects into arbitrary
24958         classes (used in Explicit Reference Conversions).
24959
24960         Implement `as' as well.
24961
24962         Reverted all the patches from Ravi below: they were broken:
24963
24964                 * The use of `level' as a mechanism to stop recursive
24965                   invocations is wrong.  That was there just to catch the
24966                   bug with a strack trace but not as a way of addressing
24967                   the problem.
24968
24969                   To fix the problem we have to *understand* what is going
24970                   on and the interactions and come up with a plan, not
24971                   just get things going.
24972
24973                 * The use of the type conversion cache that I proposed
24974                   last night had an open topic: How does this work across
24975                   protection domains.  A user defined conversion might not
24976                   be public in the location where we are applying the
24977                   conversion, a different conversion might be selected
24978                   (ie, private A->B (better) but public B->A (worse),
24979                   inside A, A->B applies, but outside it, B->A will
24980                   apply).
24981
24982                 * On top of that (ie, even if the above is solved),
24983                   conversions in a cache need to be abstract.  Ie, `To
24984                   convert from an Int to a Short use an OpcodeCast', not
24985                   `To convert from an Int to a Short use the OpcodeCast on
24986                   the variable 5' (which is what this patch was doing).
24987
24988 2001-09-28  Ravi Pratap  <ravi@ximian.com>
24989
24990         * expression.cs (Invocation::ConversionExists): Re-write to use
24991         the conversion cache
24992
24993         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
24994         cache all conversions done, not just user-defined ones.
24995
24996         (Invocation::BetterConversion): The real culprit. Use ConversionExists
24997         to determine if a conversion exists instead of acutually trying to 
24998         perform the conversion. It's faster too.
24999
25000         (Expression::ConvertExplicit): Modify to use ConversionExists to check
25001         and only then attempt the implicit conversion.
25002
25003 2001-09-28  Ravi Pratap  <ravi@ximian.com>
25004
25005         * expression.cs (ConvertImplicit): Use a cache for conversions
25006         already found. Check level of recursion and bail out if necessary.
25007
25008 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
25009
25010         * typemanager.cs (string_concat_string_string, string_concat_object_object):
25011         Export standard methods that we expect for string operations.
25012
25013         * statement.cs (Block::UsageWarning): Track usage of variables and
25014         report the errors for not used variables.
25015
25016         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
25017         operator. 
25018
25019 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25020
25021         * codegen.cs: remove unnneded code 
25022
25023         * expression.cs: Removed BuiltinTypeAccess class
25024
25025         Fix the order in which implicit conversions are
25026         done.  
25027
25028         The previous fixed dropped support for boxed conversions (adding a
25029         test to the test suite now)
25030
25031         (UserImplicitCast::CanConvert): Remove test for source being null,
25032         that code is broken.  We should not feed a null to begin with, if
25033         we do, then we should track the bug where the problem originates
25034         and not try to cover it up here.
25035
25036         Return a resolved expression of type UserImplicitCast on success
25037         rather than true/false.  Ravi: this is what I was talking about,
25038         the pattern is to use a static method as a "constructor" for
25039         objects. 
25040
25041         Also, do not create arguments until the very last minute,
25042         otherwise we always create the arguments even for lookups that
25043         will never be performed. 
25044
25045         (UserImplicitCast::Resolve): Eliminate, objects of type
25046         UserImplicitCast are born in a fully resolved state. 
25047
25048         * typemanager.cs (InitCoreTypes): Init also value_type
25049         (System.ValueType). 
25050
25051         * expression.cs (Cast::Resolve): First resolve the child expression.
25052
25053         (LValue): Add new method AddressOf to be used by
25054         the `&' operator.  
25055
25056         Change the argument of Store to take an EmitContext instead of an
25057         ILGenerator, because things like FieldExpr need to be able to call
25058         their children expression to generate the instance code. 
25059
25060         (Expression::Error, Expression::Warning): Sugar functions for
25061         reporting errors.
25062
25063         (Expression::MemberLookup): Accept a TypeContainer instead of a
25064         Report as the first argument.
25065
25066         (Expression::ResolvePrimary): Killed.  I still want to improve
25067         this as currently the code is just not right.
25068
25069         (Expression::ResolveMemberAccess): Simplify, but it is still
25070         wrong. 
25071
25072         (Unary::Resolve): Catch errors in AddressOf operators.
25073
25074         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
25075         index to a byte for the short-version, or the compiler will choose
25076         the wrong Emit call, which generates the wrong data.
25077
25078         (ParameterReference::Emit, ::Store): same.
25079
25080         (FieldExpr::AddressOf): Implement.
25081
25082         * typemanager.cs: TypeManager: made public variable instead of
25083         property.
25084
25085         * driver.cs: document --fatal.
25086
25087         * report.cs (ErrorMessage, WarningMessage): new names for the old
25088         Error and Warning classes.
25089
25090         * cs-parser.jay (member_access): Turn built-in access to types
25091         into a normal simplename
25092
25093 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25094
25095         * expression.cs (Invocation::BetterConversion): Fix to cope
25096         with q being null, since this was introducing a bug.
25097
25098         * expression.cs (ConvertImplicit): Do built-in conversions first.
25099
25100 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25101
25102         * expression.cs (UserImplicitCast::Resolve): Fix bug.
25103
25104 2001-09-27  Ravi Pratap  <ravi@ximian.com>
25105
25106         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
25107         I had introduced long ago (what's new ?).
25108
25109         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
25110         the work of all the checking. 
25111         (ConvertImplicit): Call CanConvert and only then create object if necessary.
25112         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
25113
25114         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
25115         that is the right way. 
25116
25117         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
25118         overloading resolution. Use everywhere instead of cutting and pasting code.
25119
25120         (Binary::ResolveOperator): Use MakeUnionSet.
25121
25122         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
25123         we have to convert to bool types. Not complete yet.
25124
25125 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
25126
25127         * typemanager.cs (TypeManager::CSharpName): support ushort.
25128
25129         * expression.cs (Expression::TryImplicitIntConversion): Attempts
25130         to provide an expression that performsn an implicit constant int
25131         conversion (section 6.1.6).
25132         (Expression::ConvertImplicitRequired): Reworked to include
25133         implicit constant expression conversions.
25134
25135         (Expression::ConvertNumericExplicit): Finished.
25136
25137         (Invocation::Emit): If InstanceExpression is null, then it means
25138         that we perform a call on this.
25139
25140 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25141
25142         * expression.cs (Unary::Emit): Remove some dead code.
25143         (Probe): Implement Resolve and Emit for `is'.
25144         (Expression::ConvertImplicitRequired): Attempt to do constant
25145         expression conversions here.  Maybe should be moved to
25146         ConvertImplicit, but I am not sure.
25147         (Expression::ImplicitLongConstantConversionPossible,
25148         Expression::ImplicitIntConstantConversionPossible): New functions
25149         that tell whether is it possible to apply an implicit constant
25150         expression conversion.
25151
25152         (ConvertNumericExplicit): Started work on explicit numeric
25153         conversions.
25154
25155         * cs-parser.jay: Update operator constants.
25156
25157         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
25158         (Parameters::GetSignature): Hook up VerifyArgs here.
25159         (Parameters::VerifyArgs): Verifies that no two arguments have the
25160         same name. 
25161
25162         * class.cs (Operator): Update the operator names to reflect the
25163         ones that the spec expects (as we are just stringizing the
25164         operator names).
25165
25166         * expression.cs (Unary::ResolveOperator): Fix bug: Use
25167         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
25168         previous usage did only work for our methods.
25169         (Expression::ConvertImplicit): Handle decimal implicit numeric
25170         conversions as well.
25171         (Expression::InternalTypeConstructor): Used to invoke constructors
25172         on internal types for default promotions.
25173
25174         (Unary::Emit): Implement special handling for the pre/post
25175         increment/decrement for overloaded operators, as they need to have
25176         the same semantics as the other operators.
25177
25178         (Binary::ResolveOperator): ditto.
25179         (Invocation::ConversionExists): ditto.
25180         (UserImplicitCast::Resolve): ditto.
25181
25182 2001-09-26  Ravi Pratap  <ravi@ximian.com>
25183
25184         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
25185         operator, return after emitting body. Regression tests pass again !
25186
25187         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
25188         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
25189         (Invocation::OverloadResolve): Ditto.
25190         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
25191
25192         * everywhere : update calls to the above methods accordingly.
25193
25194 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
25195
25196         * assign.cs (Assign): Make it inherit from ExpressionStatement.
25197
25198         * expression.cs (ExpressionStatement): New base class used for
25199         expressions that can appear in statements, so that we can provide
25200         an alternate path to generate expression that do not leave a value
25201         on the stack.
25202
25203         (Expression::Emit, and all the derivatives): We no longer return
25204         whether a value is left on the stack or not.  Every expression
25205         after being emitted leaves a single value on the stack.
25206
25207         * codegen.cs (EmitContext::EmitStatementExpression): Use the
25208         facilties of ExpressionStatement if possible.
25209
25210         * cs-parser.jay: Update statement_expression.
25211
25212 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
25213
25214         * driver.cs: Change the wording of message
25215
25216 2001-09-25  Ravi Pratap  <ravi@ximian.com>
25217
25218         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
25219         the type of the expression to the return type of the method if
25220         we have an overloaded operator match ! The regression tests pass again !
25221         (Unary::ResolveOperator): Ditto.
25222
25223         * expression.cs (Invocation::ConversionExists): Correct the member lookup
25224         to find "op_Implicit", not "implicit" ;-)
25225         (UserImplicitCast): New class to take care of user-defined implicit conversions.
25226         (ConvertImplicit, ForceConversion): Take TypeContainer argument
25227
25228         * everywhere : Correct calls to the above accordingly.
25229
25230         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
25231         (ConvertImplicit): Do user-defined conversion if it exists.
25232
25233 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
25234
25235         * assign.cs: track location.
25236         (Resolve): Use implicit conversions on assignment.
25237
25238         * literal.cs: Oops.  Not good, Emit of short access values should
25239         pass (Bytes) or the wrong argument will be selected.
25240
25241         * expression.cs (Unary::Emit): Emit code for -expr.
25242
25243         (Unary::ResolveOperator): Handle `Substract' for non-constants
25244         (substract from zero from the non-constants).
25245         Deal with Doubles as well. 
25246
25247         (Expression::ConvertImplicitRequired): New routine that reports an
25248         error if no implicit conversion exists. 
25249
25250         (Invocation::OverloadResolve): Store the converted implicit
25251         expressions if we make them
25252
25253 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25254
25255         * class.cs (ConstructorInitializer): Take a Location argument.
25256         (ConstructorBaseInitializer): Same here.
25257         (ConstructorThisInitializer): Same here.
25258
25259         * cs-parser.jay : Update all calls accordingly.
25260
25261         * expression.cs (Unary, Binary, New): Take location argument.
25262         Update accordingly everywhere.
25263
25264         * cs-parser.jay : Update all calls to the above to take a location
25265         argument.
25266
25267         * class.cs : Ditto.
25268
25269 2001-09-24  Ravi Pratap  <ravi@ximian.com>
25270
25271         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
25272         (Invocation::BetterConversion): Same here
25273         (Invocation::ConversionExists): Ditto.
25274
25275         (Invocation::ConversionExists): Implement.
25276
25277 2001-09-22  Ravi Pratap  <ravi@ximian.com>
25278
25279         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
25280         Also take an additional TypeContainer argument.
25281
25282         * All over : Pass in TypeContainer as argument to OverloadResolve.
25283
25284         * typemanager.cs (CSharpName): Update to check for the string type and return
25285         that too.
25286
25287         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
25288         a given method.
25289
25290 2001-09-21  Ravi Pratap  <ravi@ximian.com>
25291
25292         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
25293         (Invocation::BetterFunction): Implement.
25294         (Invocation::BetterConversion): Implement.
25295         (Invocation::ConversionExists): Skeleton, no implementation yet.
25296
25297         Okay, things work fine !
25298
25299 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
25300
25301         * typemanager.cs: declare and load enum_type, delegate_type and
25302         void_type. 
25303
25304         * expression.cs (Expression::Emit): Now emit returns a value that
25305         tells whether a value is left on the stack or not.  This strategy
25306         might be reveted tomorrow with a mechanism that would address
25307         multiple assignments.
25308         (Expression::report118): Utility routine to report mismatches on
25309         the ExprClass.
25310
25311         (Unary::Report23): Report impossible type/operator combination
25312         utility function.
25313
25314         (Unary::IsIncrementableNumber): Whether the type can be
25315         incremented or decremented with add.
25316         (Unary::ResolveOperator): Also allow enumerations to be bitwise
25317         complemented. 
25318         (Unary::ResolveOperator): Implement ++, !, ~,
25319
25320         (Invocation::Emit): Deal with new Emit convetion.
25321
25322         * All Expression derivatives: Updated their Emit method to return
25323         whether they leave values on the stack or not.
25324
25325         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
25326         stack for expressions that are statements. 
25327
25328 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25329
25330         * expression.cs (LValue): New interface.  Must be implemented by
25331         LValue objects.
25332         (LocalVariableReference, ParameterReference, FieldExpr): Implement
25333         LValue interface.
25334
25335         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
25336         interface for generating code, simplifies the code.
25337
25338 2001-09-20  Ravi Pratap  <ravi@ximian.com>
25339
25340         * expression.cs (everywhere): Comment out return statements in ::Resolve
25341         methods to avoid the warnings.
25342
25343 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
25344
25345         * driver.cs (parse): Report error 2001 if we can not open the
25346         source file.
25347
25348         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
25349         not resolve it.
25350
25351         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
25352         object. 
25353
25354         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
25355         otherwise nested blocks end up with the same index.
25356
25357         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
25358
25359         * expression.cs:  Instead of having FIXMEs in the Resolve
25360         functions, throw exceptions so it is obvious that we are facing a
25361         bug. 
25362
25363         * cs-parser.jay (invocation_expression): Pass Location information.
25364
25365         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
25366         Use a basename for those routines because .NET does not like paths
25367         on them. 
25368
25369         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
25370         already defined.
25371
25372 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
25373
25374         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
25375         are loading the correct data types (throws an exception if not).
25376         (TypeManager::InitCoreTypes): Use CoreLookupType
25377
25378         * expression.cs (Unary::ResolveOperator): return the child
25379         expression for expressions which are just +expr.
25380         (Unary::ResolveOperator): Return negative literals for -LITERAL
25381         expressions (otherwise they are Unary {Literal}).
25382         (Invocation::Badness): Take into account `Implicit constant
25383         expression conversions'.
25384
25385         * literal.cs (LongLiteral): Implement long literal class.
25386         (IntLiteral): export the `Value' of the intliteral. 
25387
25388 2001-09-19  Ravi Pratap  <ravi@ximian.com>
25389
25390         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
25391
25392         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
25393         instead of 'Operator'
25394
25395         * expression.cs (Binary::ResolveOperator): Update accordingly.
25396         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
25397         and 'Minus'
25398
25399         * cs-parser.jay (unary_expression): Update to use the new names.
25400
25401         * gen-treedump.cs (GetUnary): Same here.
25402
25403         * expression.cs (Unary::Resolve): Implement.
25404         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
25405         operators are found instead of making noise ;-)
25406         (Unary::ResolveOperator): New method to do precisely the same thing which
25407         Binary::ResolveOperator does for Binary expressions.
25408         (Unary.method, .Arguments): Add.
25409         (Unary::OperName): Implement.   
25410         (Unary::ForceConversion): Copy and Paste !
25411
25412         * class.cs (Operator::Define): Fix a small bug for the case when we have 
25413         a unary operator.
25414
25415         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
25416         for the inbuilt operators. Only overloading works for now ;-)
25417
25418 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
25419
25420         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
25421         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
25422
25423         * expression.cs (This::Emit): Implement. 
25424         (This::Resolve): Implement.
25425         (TypeOf:Resolve): Implement.
25426         (Expression::ResolveSimpleName): Add an implicit this to instance
25427         field references. 
25428         (MemberAccess::Resolve): Deal with Parameters and Fields. 
25429         Bind instance variable to Field expressions.
25430         (FieldExpr::Instance): New field used to track the expression that
25431         represents the object instance.
25432         (FieldExpr::Resolve): Track potential errors from MemberLookup not
25433         binding 
25434         (FieldExpr::Emit): Implement.
25435
25436         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
25437         the last instruction contains a return opcode to avoid generating
25438         the last `ret' instruction (this generates correct code, and it is
25439         nice to pass the peverify output).
25440
25441         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
25442         initializer for static and instance variables.
25443         (Constructor::Emit): Allow initializer to be null in the case of
25444         static constructors.  Only emit initializer for instance
25445         constructors. 
25446
25447         (TypeContainer::FindMembers): Return a null array if there are no
25448         matches.
25449
25450         Also fix the code for the MemberTypes.Method branch, as it was not
25451         scanning that for operators (or tried to access null variables before).
25452
25453         * assign.cs (Assign::Emit): Handle instance and static fields. 
25454
25455         * TODO: Updated.
25456
25457         * driver.cs: Stop compilation if there are parse errors.
25458
25459         * cs-parser.jay (constructor_declaration): Provide default base
25460         initializer for non-static constructors.
25461         (constructor_declarator): Do not provide a default base
25462         initializers if none was specified.
25463         Catch the fact that constructors should not have parameters.
25464
25465         * class.cs: Do not emit parent class initializers for static
25466         constructors, that should be flagged as an error.
25467
25468 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25469
25470         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
25471         Move back code into TypeContainer::Populate.
25472
25473 2001-09-18  Ravi Pratap  <ravi@ximian.com>
25474
25475         * class.cs (TypeContainer::AddConstructor): Fix the check to
25476         compare against Name, not Basename. 
25477         (Operator::OpType): Change Plus and Minus to Add and Subtract.
25478
25479         * cs-parser.jay : Update accordingly.
25480
25481         * class.cs (TypeContainer::FindMembers): For the case where we are searching
25482         for methods, don't forget to look into the operators too.
25483         (RegisterMethodBuilder): Helper method to take care of this for
25484         methods, constructors and operators.
25485         (Operator::Define): Completely revamp.
25486         (Operator.OperatorMethod, MethodName): New fields.
25487         (TypeContainer::Populate): Move the registering of builders into
25488         RegisterMethodBuilder.
25489         (Operator::Emit): Re-write.
25490
25491         * expression.cs (Binary::Emit): Comment out code path to emit method
25492         invocation stuff for the case when we have a user defined operator. I am
25493         just not able to get it right !
25494
25495 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25496
25497         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
25498         argument. 
25499
25500         (Expression::MemberLookup): Provide a version that allows to
25501         specify the MemberTypes and BindingFlags. 
25502
25503         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
25504         so it was not fetching variable information from outer blocks.
25505
25506         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
25507         Beforefieldinit as it was buggy.
25508
25509         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
25510         that Ravi put here.  
25511
25512         * class.cs (Constructor::Emit): Only emit if block is not null.
25513         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
25514         deal with this by semantically definining it as if the user had
25515         done it.
25516
25517         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
25518         constructors as we now "emit" them at a higher level.
25519
25520         (TypeContainer::DefineDefaultConstructor): Used to define the
25521         default constructors if none was provided.
25522
25523         (ConstructorInitializer): Add methods Resolve and Emit. 
25524
25525         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
25526
25527 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25528
25529         * class.cs (TypeContainer::EmitDefaultConstructor): Register
25530         the default constructor builder with our hashtable for methodbuilders
25531         to methodcores.
25532
25533         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
25534         and argument_count is 0 in which case we have a match.
25535         (Binary::ResolveOperator): More null checking and miscellaneous coding
25536         style cleanup.
25537
25538 2001-09-17  Ravi Pratap  <ravi@ximian.com>
25539
25540         * rootcontext.cs (IsNameSpace): Compare against null.
25541
25542         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
25543
25544         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
25545         and Unary::Operator.
25546
25547         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
25548         accordingly.
25549
25550         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
25551         we have overloaded operators.
25552         (Binary::ResolveOperator): Implement the part which does the operator overload
25553         resolution.
25554
25555         * class.cs (Operator::Emit): Implement.
25556         (TypeContainer::Emit): Emit the operators we have too.
25557
25558         * expression.cs (Binary::Emit): Update to emit the appropriate code for
25559         the case when we have a user-defined operator.
25560
25561 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
25562
25563         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
25564
25565 2001-09-16  Ravi Pratap  <ravi@ximian.com>
25566
25567         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
25568         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
25569         (Constructor::Emit): Implement.
25570         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
25571         if we have no work to do. 
25572         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
25573         Emit method.
25574
25575         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
25576         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
25577
25578         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
25579         of parent.parent.
25580
25581 2001-09-15  Ravi Pratap  <ravi@ximian.com>
25582
25583         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
25584         in the source.
25585         (Tree::RecordNamespace): Method to do what the name says ;-)
25586         (Tree::Namespaces): Property to get at the namespaces hashtable.
25587
25588         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
25589         keep track.
25590
25591         * rootcontext.cs (IsNamespace): Fixed it :-)
25592
25593 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25594
25595         * class.cs (TypeContainer::FindMembers): Add support for
25596         constructors. 
25597         (MethodCore): New class that encapsulates both the shared aspects
25598         of a Constructor and a Method.  
25599         (Method, Constructor): Factored pieces into MethodCore.
25600
25601         * driver.cs: Added --fatal which makes errors throw exceptions.
25602         Load System assembly as well as part of the standard library.
25603
25604         * report.cs: Allow throwing exceptions on errors for debugging.
25605
25606         * modifiers.cs: Do not use `parent', instead use the real type
25607         container to evaluate permission settings.
25608
25609         * class.cs: Put Ravi's patch back in.  He is right, and we will
25610         have to cope with the
25611
25612 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25613
25614         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
25615         FamORAssem, not FamANDAssem.
25616
25617 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
25618
25619         * driver.cs: Added --parse option that only parses its input files
25620         and terminates.
25621
25622         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
25623         incorrect.  IsTopLevel is not used to tell whether an object is
25624         root_types or not (that can be achieved by testing this ==
25625         root_types).  But to see if this is a top-level *class* (not
25626         necessarly our "toplevel" container). 
25627
25628 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25629
25630         * enum.cs (Enum::Define): Modify to call the Lookup method on the
25631         parent instead of a direct call to GetType.
25632
25633 2001-09-14  Ravi Pratap  <ravi@ximian.com>
25634
25635         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
25636         Modifiers.TypeAttr. This should just be a call to that method.
25637
25638         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
25639         object so that we can determine if we are top-level or not.
25640
25641         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
25642         TypeContainer too.
25643
25644         * enum.cs (Enum::Define): Ditto.
25645
25646         * modifiers.cs (FieldAttr): Re-write.
25647
25648         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
25649         (TypeContainer::HaveStaticConstructor): New property to provide access
25650         to precisely that info.
25651
25652         * modifiers.cs (MethodAttr): Re-write.
25653         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
25654
25655         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
25656         of top-level types as claimed.
25657
25658 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25659
25660         * expression.cs (MemberLookup): Fruitless attempt to lookup
25661         constructors.  Maybe I need to emit default constructors?  That
25662         might be it (currently .NET emits this for me automatically).
25663         (Invocation::OverloadResolve): Cope with Arguments == null.
25664         (Invocation::EmitArguments): new function, shared by the new
25665         constructor and us.
25666         (Invocation::Emit): Handle static and instance methods.  Emit
25667         proper call instruction for virtual or non-virtual invocations.
25668         (New::Emit): Implement.
25669         (New::Resolve): Implement.
25670         (MemberAccess:Resolve): Implement.
25671         (MethodGroupExpr::InstanceExpression): used conforming to the spec
25672         to track instances.
25673         (FieldExpr::Resolve): Set type.
25674
25675         * support.cs: Handle empty arguments.
25676                 
25677         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
25678         SimpleLookup): Auxiliary routines to help parse a qualifier
25679         identifier.  
25680
25681         Update qualifier_identifier rule.
25682
25683         * codegen.cs: Removed debugging messages.
25684
25685         * class.cs: Make this a global thing, this acts just as a "key" to
25686         objects that we might have around.
25687
25688         (Populate): Only initialize method_builders_to_methods once.
25689
25690         * expression.cs (PropertyExpr): Initialize type from the
25691         PropertyType. 
25692
25693         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
25694         Resolve pattern.  Attempt to implicitly convert value to boolean.
25695         Emit code.
25696
25697         * expression.cs: Set the type for the int32/int32 argument case.
25698         (Binary::ResolveOperator): Set the return type to boolean for
25699         comparission operators
25700
25701         * typemanager.cs: Remove debugging print code.
25702
25703         (Invocation::Resolve): resolve type.
25704
25705         * class.cs: Allocate a MemberInfo of the correct size, as the code
25706         elsewhere depends on the test to reflect the correct contents.
25707
25708         (Method::) Keep track of parameters, due to System.Reflection holes
25709
25710         (TypeContainer::Populate): Keep track of MethodBuilders to Method
25711         mapping here.
25712
25713         (TypeContainer::FindMembers): Use ArrayList and then copy an array
25714         of the exact size and return that.
25715
25716         (Class::LookupMethodByBuilder): New function that maps
25717         MethodBuilders to its methods.  Required to locate the information
25718         on methods because System.Reflection bit us again.
25719
25720         * support.cs: New file, contains an interface ParameterData and
25721         two implementations: ReflectionParameters and InternalParameters
25722         used to access Parameter information.  We will need to grow this
25723         as required.
25724
25725         * expression.cs (Invocation::GetParameterData): implement a cache
25726         and a wrapper around the ParameterData creation for methods. 
25727         (Invocation::OverloadResolve): Use new code.
25728
25729 2001-09-13  Ravi Pratap  <ravi@ximian.com>
25730
25731         * class.cs (TypeContainer::EmitField): Remove and move into 
25732         (Field::Define): here and modify accordingly.
25733         (Field.FieldBuilder): New member.
25734         (TypeContainer::Populate): Update accordingly.
25735         (TypeContainer::FindMembers): Implement.
25736
25737 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
25738
25739         * statement.cs: (VariableInfo::VariableType): New field to be
25740         initialized with the full type once it is resolved. 
25741
25742 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
25743
25744         * parameter.cs (GetParameterInfo): Use a type cache to compute
25745         things only once, and to reuse this information
25746
25747         * expression.cs (LocalVariableReference::Emit): Implement.
25748         (OpcodeCast::Emit): fix.
25749
25750         (ParameterReference::Resolve): Implement.
25751         (ParameterReference::Emit): Implement.
25752
25753         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
25754         that are expressions need to stay as Expressions.
25755
25756         * typemanager.cs (CSharpName): Returns the C# name of a type if
25757         possible. 
25758
25759         * expression.cs (Expression::ConvertImplicit): New function that
25760         implements implicit type conversions.
25761
25762         (Expression::ImplicitReferenceConversion): Implements implicit
25763         reference conversions.
25764
25765         (EmptyCast): New type for transparent casts.
25766
25767         (OpcodeCast): New type for casts of types that are performed with
25768         a sequence of bytecodes.
25769
25770         (BoxedCast): New type used for casting value types into reference
25771         types.  Emits a box opcode.
25772
25773         (Binary::DoNumericPromotions): Implements numeric promotions of
25774         and computation of the Binary::Type.
25775
25776         (Binary::EmitBranchable): Optimization.
25777
25778         (Binary::Emit): Implement code emission for expressions.
25779
25780         * typemanager.cs (TypeManager): Added two new core types: sbyte
25781         and byte.
25782
25783 2001-09-12  Ravi Pratap  <ravi@ximian.com>
25784
25785         * class.cs (TypeContainer::FindMembers): Method which does exactly
25786         what Type.FindMembers does, only we don't have to use reflection. No
25787         implementation yet.
25788
25789         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
25790         typecontainer objects as we need to get at them.
25791         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
25792
25793         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
25794         typecontainer object.
25795
25796         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
25797         of just a Report object.
25798
25799 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25800
25801         * class.cs (Event::Define): Go back to using the prefixes "add_" and
25802         "remove_"
25803         (TypeContainer::Populate): Now define the delegates of the type too.
25804         (TypeContainer.Delegates): Property to access the list of delegates defined
25805         in the type.
25806
25807         * delegates.cs (Delegate::Define): Implement partially.
25808
25809         * modifiers.cs (TypeAttr): Handle more flags.
25810
25811 2001-09-11  Ravi Pratap  <ravi@ximian.com>
25812
25813         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
25814         and not <=
25815         (Operator::Define): Re-write logic to get types by using the LookupType method
25816         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
25817         (Indexer::Define): Ditto.
25818         (Event::Define): Ditto.
25819         (Property::Define): Ditto.
25820
25821 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25822
25823         * class.cs (TypeContainer::Populate): Now define operators too. 
25824         (TypeContainer.Operators): New property to access the list of operators
25825         in a type.
25826         (Operator.OperatorMethodBuilder): New member to hold the method builder
25827         for the operator we are defining.
25828         (Operator::Define): Implement.
25829
25830 2001-09-10  Ravi Pratap  <ravi@ximian.com>
25831
25832         * class.cs (Event::Define): Make the prefixes of the accessor methods
25833         addOn_ and removeOn_ 
25834
25835         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
25836         of the location being passed in too. Ideally, this should go later since all
25837         error reporting should be done through the Report object.
25838
25839         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
25840         (Populate): Iterate thru the indexers we have and define them too.
25841         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
25842         for the get and set accessors.
25843         (Indexer::Define): Implement.
25844
25845 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
25846
25847         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
25848         my previous implementation, did not work.
25849
25850         * typemanager.cs: Add a couple of missing types (the longs).
25851
25852         * literal.cs: Use TypeManager.bool_type instead of getting it.
25853
25854         * expression.cs (EventExpr): New kind of expressions.
25855         (Expressio::ExprClassFromMemberInfo): finish
25856
25857 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
25858
25859         * assign.cs: Emit stores to static fields differently.
25860
25861 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25862
25863         * Merge in changes and adjust code to tackle conflicts. Backed out my
25864         code in Assign::Resolve ;-) 
25865
25866 2001-09-08  Ravi Pratap  <ravi@ximian.com>
25867
25868         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
25869         instead Report.Error and also pass in the location.
25870         (CSharpParser::Lexer): New readonly property to return the reference
25871         to the Tokenizer object.
25872         (declare_local_variables): Use Report.Error with location instead of plain 
25873         old error.
25874         (CheckDef): Ditto.
25875
25876         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
25877         (Operator.CheckBinaryOperator): Ditto.
25878
25879         * cs-parser.jay (operator_declarator): Update accordingly.
25880
25881         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
25882         (CheckBinaryOperator): Same here.
25883
25884         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
25885         on the name without any prefixes of namespace names etc. This is because we
25886         already might have something already fully qualified like 
25887         'System.Console.WriteLine'
25888
25889         * assign.cs (Resolve): Begin implementation. Stuck ;-)
25890
25891 2001-09-07  Ravi Pratap  <ravi@ximian.com>
25892
25893         * cs-tokenizer.cs (location): Return a string which also contains
25894         the file name.
25895
25896         * expression.cs (ElementAccess): New class for expressions of the
25897         type 'element access.'
25898         (BaseAccess): New class for expressions of the type 'base access.'
25899         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
25900         respectively.
25901
25902         * cs-parser.jay (element_access): Implement action.
25903         (base_access): Implement actions.
25904         (checked_expression, unchecked_expression): Implement.
25905
25906         * cs-parser.jay (local_variable_type): Correct and implement.
25907         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
25908
25909         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
25910
25911         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
25912         name and the specifiers.
25913
25914         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
25915
25916         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
25917         making them all public ;-)
25918
25919         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
25920         class anyways.
25921
25922 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
25923
25924         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
25925         PropertyExprs.
25926         (FieldExpr, PropertyExprs): New resolved expressions.
25927         (SimpleName::MemberStaticCheck): Perform static checks for access
25928         to non-static fields on static methods. Maybe this should be
25929         generalized for MemberAccesses. 
25930         (SimpleName::ResolveSimpleName): More work on simple name
25931         resolution. 
25932
25933         * cs-parser.jay (primary_expression/qualified_identifier): track
25934         the parameter index.
25935
25936         * codegen.cs (CodeGen::Save): Catch save exception, report error.
25937         (EmitContext::EmitBoolExpression): Chain to expression generation
25938         instead of temporary hack.
25939         (::EmitStatementExpression): Put generic expression code generation.
25940
25941         * assign.cs (Assign::Emit): Implement variable assignments to
25942         local variables, parameters and fields.
25943
25944 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
25945
25946         * statement.cs (Block::GetVariableInfo): New method, returns the
25947         VariableInfo for a variable name in a block.
25948         (Block::GetVariableType): Implement in terms of GetVariableInfo
25949
25950         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
25951         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
25952
25953 2001-09-06  Ravi Pratap  <ravi@ximian.com>
25954
25955         * cs-parser.jay (operator_declaration): Continue on my quest : update
25956         to take attributes argument.
25957         (event_declaration): Ditto.
25958         (enum_declaration): Ditto.
25959         (indexer_declaration): Ditto.
25960
25961         * class.cs (Operator::Operator): Update constructor accordingly.
25962         (Event::Event): Ditto.
25963
25964         * delegate.cs (Delegate::Delegate): Same here.
25965
25966         * enum.cs (Enum::Enum): Same here.
25967
25968 2001-09-05  Ravi Pratap  <ravi@ximian.com>
25969
25970         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
25971
25972         * ../tests/cs0658.cs : New file to demonstrate error 0658.
25973
25974         * attribute.cs (Attributes): New class to encapsulate all attributes which were
25975         being passed around as an arraylist.
25976         (Attributes::AddAttribute): Method to add attribute sections.
25977
25978         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
25979         (struct_declaration): Update accordingly.
25980         (constant_declaration): Update.
25981         (field_declaration): Update.
25982         (method_header): Update.
25983         (fixed_parameter): Update.
25984         (parameter_array): Ditto.
25985         (property_declaration): Ditto.
25986         (destructor_declaration): Ditto.
25987
25988         * class.cs (Struct::Struct): Update constructors accordingly.
25989         (Class::Class): Ditto.
25990         (Field::Field): Ditto.
25991         (Method::Method): Ditto.
25992         (Property::Property): Ditto.
25993         (TypeContainer::OptAttribute): update property's return type.
25994
25995         * interface.cs (Interface.opt_attributes): New member.
25996         (Interface::Interface): Update to take the extra Attributes argument.
25997
25998         * parameter.cs (Parameter::Parameter): Ditto.
25999
26000         * constant.cs (Constant::Constant): Ditto.
26001
26002         * interface.cs (InterfaceMemberBase): New OptAttributes field.
26003         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
26004         the attributes as a parameter.
26005         (InterfaceProperty): Update constructor call.
26006         (InterfaceEvent): Ditto.
26007         (InterfaceMethod): Ditto.
26008         (InterfaceIndexer): Ditto.
26009
26010         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
26011         pass the attributes too.
26012         (interface_event_declaration): Ditto.
26013         (interface_property_declaration): Ditto.
26014         (interface_method_declaration): Ditto.
26015         (interface_declaration): Ditto.
26016
26017 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
26018
26019         * class.cs (Method::Define): Track the "static Main" definition to
26020         create an entry point. 
26021
26022         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
26023         EntryPoint if we find it. 
26024
26025         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
26026         (EmitContext::ig): Make this variable public.
26027
26028         * driver.cs: Make the default output file be the first file name
26029         with the .exe extension.  
26030
26031         Detect empty compilations
26032
26033         Handle various kinds of output targets.  Handle --target and
26034         rename -t to --dumper.
26035
26036         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
26037         methods inherited from Expression return now an Expression.  This
26038         will is used during the tree rewriting as we resolve them during
26039         semantic analysis.
26040
26041         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
26042         the spec.  Missing entirely is the information about
26043         accessability of elements of it.
26044
26045         (Expression::ExprClassFromMemberInfo): New constructor for
26046         Expressions that creates a fully initialized Expression based on
26047         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
26048         a Type.
26049
26050         (Invocation::Resolve): Begin implementing resolution of invocations.
26051
26052         * literal.cs (StringLiteral):  Implement Emit.
26053
26054 2001-09-05  Ravi Pratap  <ravi@ximian.com>
26055
26056         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
26057         member.
26058
26059 2001-09-04  Ravi Pratap  <ravi@ximian.com>
26060
26061         * cs-parser.jay (attribute_arguments): Implement actions.
26062         (attribute): Fix bug in production. Implement action.
26063         (attribute_list): Implement.
26064         (attribute_target): Implement.
26065         (attribute_target_specifier, opt_target_specifier): Implement
26066         (CheckAttributeTarget): New method to check if the attribute target
26067         is valid.
26068         (attribute_section): Implement.
26069         (opt_attributes): Implement.
26070
26071         * attribute.cs : New file to handle attributes.
26072         (Attribute): Class to hold attribute info.
26073
26074         * cs-parser.jay (opt_attribute_target_specifier): Remove production
26075         (attribute_section): Modify production to use 2 different rules to 
26076         achieve the same thing. 1 s/r conflict down !
26077         Clean out commented, useless, non-reducing dimension_separator rules.
26078
26079         * class.cs (TypeContainer.attributes): New member to hold list
26080         of attributes for a type.
26081         (Struct::Struct): Modify to take one more argument, the attribute list.
26082         (Class::Class): Ditto.
26083         (Field::Field): Ditto.
26084         (Method::Method): Ditto.
26085         (Property::Property): Ditto.
26086
26087         * cs-parser.jay (struct_declaration): Update constructor call to
26088         pass in the attributes too.
26089         (class_declaration): Ditto.
26090         (constant_declaration): Ditto.
26091         (field_declaration): Ditto.
26092         (method_header): Ditto.
26093         (fixed_parameter): Ditto.
26094         (parameter_array): Ditto.
26095         (property_declaration): Ditto.
26096
26097         * constant.cs (Constant::Constant): Update constructor similarly.
26098         Use System.Collections.
26099
26100         * parameter.cs (Parameter::Parameter): Update as above.
26101
26102 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26103
26104         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
26105         (TypeContainer.delegates): New member to hold list of delegates.
26106
26107         * cs-parser.jay (delegate_declaration): Implement the action correctly 
26108         this time as I seem to be on crack ;-)
26109
26110 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
26111
26112         * rootcontext.cs (RootContext::IsNamespace): new function, used to
26113         tell whether an identifier represents a namespace.
26114
26115         * expression.cs (NamespaceExpr): A namespace expression, used only
26116         temporarly during expression resolution.
26117         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
26118         utility functions to resolve names on expressions.
26119
26120 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
26121
26122         * codegen.cs: Add hook for StatementExpressions. 
26123
26124         * class.cs: Fix inverted test for static flag in methods.
26125
26126 2001-09-02  Ravi Pratap  <ravi@ximian.com>
26127
26128         * class.cs (Operator::CheckUnaryOperator): Correct error number used
26129         to make it coincide with MS' number.
26130         (Operator::CheckBinaryOperator): Ditto.
26131
26132         * ../errors/errors.txt : Remove error numbers added earlier.
26133
26134         * ../errors/cs1019.cs : Test case for error # 1019
26135
26136         * ../errros/cs1020.cs : Test case for error # 1020
26137
26138         * cs-parser.jay : Clean out commented cruft.
26139         (dimension_separators, dimension_separator): Comment out. Ostensibly not
26140         used anywhere - non-reducing rule.
26141         (namespace_declarations): Non-reducing rule - comment out.
26142
26143         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
26144         with TypeContainer::AddEnum.
26145
26146         * delegate.cs : New file for delegate handling classes.
26147         (Delegate): Class for declaring delegates.
26148
26149         * makefile : Update.
26150
26151         * cs-parser.jay (delegate_declaration): Implement.
26152
26153 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
26154
26155         * class.cs (Event::Define): Implement.
26156         (Event.EventBuilder): New member.
26157
26158         * class.cs (TypeContainer::Populate): Update to define all enums and events
26159         we have.
26160         (Events): New property for the events arraylist we hold. Shouldn't we move to using
26161         readonly fields for all these cases ?
26162
26163 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26164
26165         * class.cs (Property): Revamp to use the convention of making fields readonly.
26166         Accordingly modify code elsewhere.
26167
26168         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
26169         the Define method of the Property class.
26170
26171         * class.cs : Clean up applied patch and update references to variables etc. Fix 
26172         trivial bug.
26173         (TypeContainer::Populate): Update to define all the properties we have. Also
26174         define all enumerations.
26175
26176         * enum.cs (Define): Implement.
26177
26178 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
26179
26180         * cs-parser.jay (overloadable_operator): The semantic value is an
26181         enum of the Operator class.
26182         (operator_declarator): Implement actions.
26183         (operator_declaration): Implement.
26184
26185         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
26186         validity of definitions.
26187         (Operator::CheckBinaryOperator): Static method to check for binary operators
26188         (TypeContainer::AddOperator): New method to add an operator to a type.
26189
26190         * cs-parser.jay (indexer_declaration): Added line to actually call the
26191         AddIndexer method so it gets added ;-)
26192
26193         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
26194         already taken care of by the MS compiler ?  
26195
26196 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26197
26198         * class.cs (Operator): New class for operator declarations.
26199         (Operator::OpType): Enum for the various operators.
26200
26201 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
26202
26203         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
26204         ostensibly handle this in semantic analysis.
26205
26206         * cs-parser.jay (general_catch_clause): Comment out
26207         (specific_catch_clauses, specific_catch_clause): Ditto.
26208         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
26209         (catch_args, opt_catch_args): New productions.
26210         (catch_clause): Rewrite to use the new productions above
26211         (catch_clauses): Modify accordingly.
26212         (opt_catch_clauses): New production to use in try_statement
26213         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
26214         and re-write the code in the actions to extract the specific and
26215         general catch clauses by being a little smart ;-)
26216
26217         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
26218         Hooray, try and catch statements parse fine !
26219
26220 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26221
26222         * statement.cs (Block::GetVariableType): Fix logic to extract the type
26223         string from the hashtable of variables.
26224
26225         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
26226         I end up making that mistake ;-)
26227         (catch_clauses): Fixed gross error which made Key and Value of the 
26228         DictionaryEntry the same : $1 !!
26229
26230 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26231
26232         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
26233
26234         * cs-parser.jay (event_declaration): Correct to remove the semicolon
26235         when the add and remove accessors are specified. 
26236
26237 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
26238
26239         * cs-parser.jay (IndexerDeclaration): New helper class to hold
26240         information about indexer_declarator.
26241         (indexer_declarator): Implement actions.
26242         (parsing_indexer): New local boolean used to keep track of whether
26243         we are parsing indexers or properties. This is necessary because 
26244         implicit_parameters come into picture even for the get accessor in the 
26245         case of an indexer.
26246         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
26247
26248         * class.cs (Indexer): New class for indexer declarations.
26249         (TypeContainer::AddIndexer): New method to add an indexer to a type.
26250         (TypeContainer::indexers): New member to hold list of indexers for the
26251         type.
26252
26253 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26254
26255         * cs-parser.jay (add_accessor_declaration): Implement action.
26256         (remove_accessor_declaration): Implement action.
26257         (event_accessors_declaration): Implement
26258         (variable_declarators): swap statements for first rule - trivial.
26259
26260         * class.cs (Event): New class to hold information about event
26261         declarations.
26262         (TypeContainer::AddEvent): New method to add an event to a type
26263         (TypeContainer::events): New member to hold list of events.
26264
26265         * cs-parser.jay (event_declaration): Implement actions.
26266
26267 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
26268
26269         * cs-parser.jay (dim_separators): Implement. Make it a string
26270         concatenating all the commas together, just as they appear.
26271         (opt_dim_separators): Modify accordingly
26272         (rank_specifiers): Update accordingly. Basically do the same
26273         thing - instead, collect the brackets here.
26274         (opt_rank_sepcifiers): Modify accordingly.
26275         (array_type): Modify to actually return the complete type string
26276         instead of ignoring the rank_specifiers.
26277         (expression_list): Implement to collect the expressions
26278         (variable_initializer): Implement. We make it a list of expressions
26279         essentially so that we can handle the array_initializer case neatly too.
26280         (variable_initializer_list): Implement.
26281         (array_initializer): Make it a list of variable_initializers
26282         (opt_array_initializer): Modify accordingly.
26283
26284         * expression.cs (New::NType): Add enumeration to help us
26285         keep track of whether we have an object/delegate creation
26286         or an array creation.
26287         (New:NewType, New::Rank, New::Indices, New::Initializers): New
26288         members to hold data about array creation.
26289         (New:New): Modify to update NewType
26290         (New:New): New Overloaded contructor for the array creation
26291         case.
26292
26293         * cs-parser.jay (array_creation_expression): Implement to call
26294         the overloaded New constructor.
26295
26296 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
26297
26298         * class.cs (TypeContainer::Constructors): Return member
26299         constructors instead of returning null.
26300
26301 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
26302
26303         * typemanager.cs (InitCoreTypes): Initialize the various core
26304         types after we have populated the type manager with the user
26305         defined types (this distinction will be important later while
26306         compiling corlib.dll)
26307
26308         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
26309         on Expression Classification.  Now all expressions have a method
26310         `Resolve' and a method `Emit'.
26311
26312         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
26313         generation from working.     Also add some temporary debugging
26314         code. 
26315
26316 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
26317
26318         * codegen.cs: Lots of code generation pieces.  This is only the
26319         beginning, will continue tomorrow with more touches of polish.  We
26320         handle the fundamentals of if, while, do, for, return.  Others are
26321         trickier and I need to start working on invocations soon.
26322
26323         * gen-treedump.cs: Bug fix, use s.Increment here instead of
26324         s.InitStatement. 
26325
26326         * codegen.cs (EmitContext): New struct, used during code
26327         emission to keep a context.   Most of the code generation will be
26328         here. 
26329
26330         * cs-parser.jay: Add embedded blocks to the list of statements of
26331         this block.  So code generation proceeds in a top down fashion.
26332
26333 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
26334
26335         * statement.cs: Add support for multiple child blocks.
26336
26337 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
26338
26339         * codegen.cs (EmitCode): New function, will emit the code for a
26340         Block of code given a TypeContainer and its ILGenerator. 
26341
26342         * statement.cs (Block): Standard public readonly optimization.
26343         (Block::Block constructors): Link children. 
26344         (Block::Child): Child Linker.
26345         (Block::EmitVariables): Emits IL variable declarations.
26346
26347         * class.cs: Drop support for MethodGroups here, delay until
26348         Semantic Analysis.
26349         (Method::): Applied the same simplification that I did before, and
26350         move from Properties to public readonly fields.
26351         (Method::ParameterTypes): Returns the parameter types for the
26352         function, and implements a cache that will be useful later when I
26353         do error checking and the semantic analysis on the methods is
26354         performed.
26355         (Constructor::GetCallingConvention): Renamed from CallingConvetion
26356         and made a method, optional argument tells whether this is a class
26357         or a structure to apply the `has-this' bit.
26358         (Method::GetCallingConvention): Implement, returns the calling
26359         convention. 
26360         (Method::Define): Defines the type, a second pass is performed
26361         later to populate the methods.
26362
26363         (Constructor::ParameterTypes): implement a cache similar to the
26364         one on Method::ParameterTypes, useful later when we do semantic
26365         analysis. 
26366
26367         (TypeContainer::EmitMethod):  New method.  Emits methods.
26368
26369         * expression.cs: Removed MethodGroup class from here.
26370
26371         * parameter.cs (Parameters::GetCallingConvention): new method.
26372
26373 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
26374
26375         * class.cs (TypeContainer::Populate): Drop RootContext from the
26376         argument. 
26377
26378         (Constructor::CallingConvention): Returns the calling convention.
26379         (Constructor::ParameterTypes): Returns the constructor parameter
26380         types. 
26381
26382         (TypeContainer::AddConstructor): Keep track of default constructor
26383         and the default static constructor.
26384
26385         (Constructor::) Another class that starts using `public readonly'
26386         instead of properties. 
26387
26388         (Constructor::IsDefault): Whether this is a default constructor. 
26389
26390         (Field::) use readonly public fields instead of properties also.
26391
26392         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
26393         track of static constructors;  If none is used, turn on
26394         BeforeFieldInit in the TypeAttributes. 
26395
26396         * cs-parser.jay (opt_argument_list): now the return can be null
26397         for the cases where there are no arguments. 
26398
26399         (constructor_declarator): If there is no implicit `base' or
26400         `this', then invoke the default parent constructor. 
26401
26402         * modifiers.cs (MethodAttr): New static function maps a set of
26403         modifiers flags into a MethodAttributes enum
26404         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
26405         MethodAttr, TypeAttr to represent the various mappings where the
26406         modifiers are used.
26407         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
26408
26409 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
26410
26411         * parameter.cs (GetParameterInfo): Fix bug where there would be no
26412         method arguments.
26413
26414         * interface.cs (PopulateIndexer): Implemented the code generator
26415         for interface indexers.
26416
26417 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
26418
26419         * interface.cs (InterfaceMemberBase): Now we track the new status
26420         here.  
26421
26422         (PopulateProperty): Implement property population.  Woohoo!  Got
26423         Methods and Properties going today. 
26424
26425         Removed all the properties for interfaces, and replaced them with
26426         `public readonly' fields. 
26427
26428 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
26429
26430         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
26431         initialize their hashtables/arraylists only when they are needed
26432         instead of doing this always.
26433
26434         * parameter.cs: Handle refs and out parameters.
26435
26436         * cs-parser.jay: Use an ArrayList to construct the arguments
26437         instead of the ParameterCollection, and then cast that to a
26438         Parameter[] array.
26439
26440         * parameter.cs: Drop the use of ParameterCollection and use
26441         instead arrays of Parameters.
26442
26443         (GetParameterInfo): Use the Type, not the Name when resolving
26444         types. 
26445
26446 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
26447
26448         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
26449         and instead use public readonly fields.
26450
26451         * class.cs: Put back walking code for type containers.
26452
26453 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
26454
26455         * class.cs (MakeConstant): Code to define constants.
26456
26457         * rootcontext.cs (LookupType): New function.  Used to locate types 
26458
26459
26460 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
26461
26462         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
26463         this System.Reflection code is.  Kudos to Microsoft
26464
26465         * typemanager.cs: Implement a type cache and avoid loading all
26466         types at boot time.  Wrap in LookupType the internals.  This made
26467         the compiler so much faster.  Wow.  I rule!
26468
26469         * driver.cs: Make sure we always load mscorlib first (for
26470         debugging purposes, nothing really important).
26471
26472         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
26473         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
26474
26475         * rootcontext.cs: Lookup types on their namespace;  Lookup types
26476         on namespaces that have been imported using the `using' keyword.
26477
26478         * class.cs (TypeContainer::TypeAttr): Virtualize.
26479         (Class::TypeAttr): Return attributes suitable for this bad boy.
26480         (Struct::TypeAttr): ditto.
26481         Handle nested classes.
26482         (TypeContainer::) Remove all the type visiting code, it is now
26483         replaced with the rootcontext.cs code
26484
26485         * rootcontext.cs (GetClassBases): Added support for structs. 
26486
26487 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
26488
26489         * interface.cs, statement.cs, class.cs, parameter.cs,
26490         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
26491         Drop use of TypeRefs, and use strings instead.
26492
26493 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
26494
26495         * rootcontext.cs: 
26496
26497         * class.cs (Struct::Struct): set the SEALED flags after
26498         checking the modifiers.
26499         (TypeContainer::TypeAttr): new property, returns the
26500         TypeAttributes for a class.  
26501
26502         * cs-parser.jay (type_list): Oops, list production was creating a
26503         new list of base types.
26504
26505         * rootcontext.cs (StdLib): New property.
26506         (GetInterfaceTypeByName): returns an interface by type name, and
26507         encapsulates error handling here.
26508         (GetInterfaces): simplified.
26509         (ResolveTree): Encapsulated all the tree resolution here.
26510         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
26511         types. 
26512
26513         * driver.cs: Add support for --nostdlib, to avoid loading the
26514         default assemblies.
26515         (Main): Do not put tree resolution here. 
26516
26517         * rootcontext.cs: Beginning of the class resolution.
26518
26519 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
26520
26521         * rootcontext.cs: Provide better error reporting. 
26522
26523         * cs-parser.jay (interface_base): set our $$ to be interfaces.
26524
26525         * rootcontext.cs (CreateInterface): Handle the case where there
26526         are no parent interfaces.
26527
26528         (CloseTypes): Routine to flush types at the end.
26529         (CreateInterface): Track types.
26530         (GetInterfaces): Returns an array of Types from the list of
26531         defined interfaces.
26532
26533         * typemanager.c (AddUserType): Mechanism to track user types (puts
26534         the type on the global type hash, and allows us to close it at the
26535         end). 
26536
26537 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
26538
26539         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
26540         RecordInterface instead.
26541
26542         * cs-parser.jay: Updated to reflect changes above.
26543
26544         * decl.cs (Definition): Keep track of the TypeBuilder type that
26545         represents this type here.  Not sure we will use it in the long
26546         run, but wont hurt for now.
26547
26548         * driver.cs: Smaller changes to accomodate the new code.
26549
26550         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
26551         when done. 
26552
26553         * rootcontext.cs (CreateInterface):  New method, used to create
26554         the System.TypeBuilder type for interfaces.
26555         (ResolveInterfaces): new entry point to resolve the interface
26556         hierarchy. 
26557         (CodeGen): Property, used to keep track of the code generator.
26558
26559 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
26560
26561         * cs-parser.jay: Add a second production for delegate_declaration
26562         with `VOID'.
26563
26564         (enum_body): Put an opt_comma here instead of putting it on
26565         enum_body or enum_member_declarations so we can handle trailing
26566         commas on enumeration members.  Gets rid of a shift/reduce.
26567
26568         (type_list): Need a COMMA in the middle.
26569
26570         (indexer_declaration): Tell tokenizer to recognize get/set
26571
26572         * Remove old targets.
26573
26574         * Re-add the parser target.
26575
26576 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26577
26578         * cs-parser.jay: Add precendence rules for a number of operators
26579         ot reduce the number of shift/reduce conflicts in the grammar.
26580
26581 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
26582
26583         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
26584         and put it here.
26585
26586         Get rid of old crufty code.
26587
26588         * rootcontext.cs: Use this to keep track of the parsed
26589         representation and the defined types available to the program. 
26590
26591         * gen-treedump.cs: adjust for new convention.
26592
26593         * type.cs: Split out the type manager, and the assembly builder
26594         from here. 
26595
26596         * typemanager.cs: the type manager will live here now.
26597
26598         * cil-codegen.cs: And the code generator here. 
26599
26600 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
26601
26602         * makefile: Fixed up for easy making.
26603
26604 2001-07-13  Simon Cozens <simon@simon-cozens.org>
26605
26606         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
26607         the 
26608
26609         (unary_expression): Expand pre_increment_expression and
26610         post_decrement_expression to reduce a shift/reduce.
26611
26612 2001-07-11  Simon Cozens
26613
26614         * cs-tokenizer.cs: Hex numbers should begin with a 0.
26615
26616         Improve allow_keyword_as_indent name.
26617
26618 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
26619
26620         * Adjustments for Beta2. 
26621
26622 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
26623
26624         * decl.cs: Added `Define' abstract method.
26625         (InTransit): new property, used to catch recursive definitions. 
26626
26627         * interface.cs: Implement `Define'. 
26628
26629         * modifiers.cs: Map Modifiers.constants to
26630         System.Reflection.TypeAttribute flags.
26631
26632         * class.cs: Keep track of types and user-defined types.
26633         (BuilderInit): New method for creating an assembly
26634         (ResolveType): New function to launch the resolution process, only
26635         used by interfaces for now.
26636
26637         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
26638         that are inserted into the name space. 
26639
26640 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
26641
26642         * ARGH.  I have screwed up my tree so many times due to the use of
26643         rsync rather than using CVS.  Going to fix this at once. 
26644
26645         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
26646         load types.
26647
26648 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
26649
26650         * Experiment successful: Use System.Type rather that our own
26651         version of Type.  
26652
26653 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
26654
26655         * cs-parser.jay: Removed nsAliases from here.
26656
26657         Use new namespaces, handle `using XXX;' 
26658
26659         * namespace.cs: Reimplemented namespace handling, use a recursive
26660         definition of the class.  Now we can keep track of using clauses
26661         and catch invalid using clauses.
26662
26663 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
26664
26665         * gen-treedump.cs: Adapted for all the renaming.
26666
26667         * expression.cs (Expression): this class now has a Type property
26668         which returns an expression Type.
26669
26670         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
26671         `Type', as this has a different meaning now in the base
26672
26673 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
26674
26675         * interface.cs, class.cs: Removed from all the sources the
26676         references to signature computation, as we can not do method
26677         signature computation during the parsing time, as we are not
26678         trying to solve at that point distinguishing:
26679
26680         class X {
26681                 void a (Blah x) {}
26682                 void a (NS.Blah x) {}
26683         }
26684
26685         Which depending on the context might be valid or not, as we do not
26686         know if Blah is the same thing as NS.Blah at that point.
26687
26688         * Redid everything so the code uses TypeRefs now instead of
26689         Types.  TypeRefs are just temporary type placeholders, that need
26690         to be resolved.  They initially have a pointer to a string and the
26691         current scope in which they are used.  This is used later by the
26692         compiler to resolve the reference to an actual Type. 
26693
26694         * DeclSpace is no longer a CIR.Type, and neither are
26695         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
26696         are all DeclSpaces, but no Types. 
26697
26698         * type.cs (TypeRefManager): This implements the TypeRef manager,
26699         which keeps track of all the types that need to be resolved after
26700         the parsing has finished. 
26701
26702 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
26703
26704         * ARGH.  We are going to have to store `foreach' as a class rather
26705         than resolving it, as we need to verify error 1579 after name
26706         resolution.   *OR* we could keep a flag that says `This request to
26707         IEnumerator comes from a foreach statement' which we can then use
26708         to generate the error.
26709
26710 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
26711
26712         * class.cs (TypeContainer.AddMethod): we now add methods to the
26713         MethodGroup instead of the method hashtable.  
26714
26715         * expression.cs: Add MethodGroup abstraction, which gets us one
26716         step closer to the specification in the way we handle method
26717         declarations.  
26718
26719         * cs-parser.jay (primary_expression): qualified_identifier now
26720         tried to match up an identifier to a local variable reference or
26721         to a parameter reference.
26722
26723         current_local_parameters is now a parser global variable that
26724         points to the current parameters for the block, used during name
26725         lookup.
26726
26727         (property_declaration): Now creates an implicit `value' argument to
26728         the set accessor.
26729
26730 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
26731
26732         * parameter.cs: Do not use `param' arguments as part of the
26733         signature, per the spec.
26734
26735 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
26736
26737         * decl.cs: Base class for classes, structs and interfaces.  This
26738         is the "Declaration Space" 
26739
26740         * cs-parser.jay: Use CheckDef for checking declaration errors
26741         instead of having one on each function.
26742
26743         * class.cs: Factor out some code for handling error handling in
26744         accordance to the "Declarations" section in the "Basic Concepts"
26745         chapter in the ECMA C# spec.
26746
26747         * interface.cs: Make all interface member classes derive from
26748         InterfaceMemberBase.
26749
26750 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
26751
26752         * Many things: all interfaces are parsed and generated in
26753         gen-treedump.  Support for member variables, constructors,
26754         destructors, properties, constants is there.
26755
26756         Beginning of the IL backend, but very little done, just there for
26757         testing purposes. 
26758
26759 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
26760
26761         * cs-parser.jay: Fix labeled statement.
26762
26763         * cs-tokenizer.cs (escape): Escape " and ' always.
26764         ref_line, ref_name: keep track of the line/filename as instructed
26765         by #line by the compiler.
26766         Parse #line.
26767
26768 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
26769
26770         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
26771         to match the values in System.CodeDOM.
26772
26773         Divid renamed to Divide.
26774
26775         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
26776         statements. 
26777         (Statements.set): remove.
26778
26779         * System.CodeDOM/CodeCatchClause.cs: always have a valid
26780         statements. 
26781
26782         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
26783         falseStatements always have valid values. 
26784
26785         * cs-parser.jay: Use System.CodeDOM now.
26786