* decl.cs (DeclSpace.LookupType): Don't loop but recurse into
[mono.git] / mcs / mcs / ChangeLog
1 2005-03-09  Raja R Harinath  <rharinath@novell.com>
2
3         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
4         enclosing DeclSpace.  This ensures that a name-lookup populates
5         more caches and there are fewer 'TypeExpression's.  Carve out
6         nested type lookup into ...
7         (LookupNestedTypeInHierarchy): ... this.
8
9 2005-03-09  Raja R Harinath  <rharinath@novell.com>
10
11         Clean up a few partial-class semantics.  
12         Fixes test-357.cs and cs1618-2.cs.
13         * cs-parser.jay (struct_declaration): Use 'current_class' as
14         parent of newly-created struct.  Remove call to Register ().
15         Use 'pop_current_class' to complete handing the current struct.
16         (interface_declaration): Likewise.
17         (class_declaration): Likewise.
18         (enum_declaration): Use 'current_class' as parent of newly created
19         enum.
20         (delegate_declaration): Likewise.
21         (pop_current_class): New function.  This is used to handle closing
22         up the 'current_class' and 'current_container', and pointing them
23         to the enclosing class/container.
24         (CSharpParser): Initialize 'current_class' too.
25         * decl.cs (MemberCore): Add check for invariant: a partial
26         container is not a parsed entity, and thus does not enclose any
27         parsed members.
28         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
29         (DeclSpace.BaseTypeExpr): Use it.
30         (DeclSpace.LookupType): Add check for invariant.
31         * class.cs (TypeContainer): Add check for invariant: a nested
32         class should have the same NamespaceEntry as its enclosing class.
33         (TypeContainer.EmitFieldInitializers): Make virtual.
34         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
35         MemberCore.
36         (TypeContainer.Register): Remove.
37         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
38         null.  Use TypeResolveEmitContext for resolving base types and
39         interfaces.  Move initialization of Parts.TypeBuilder here from
40         ...
41         (TypeContainer.DefineNestedTypes): ... here.
42         (PartialContainer): Take a Namespace not a NamespaceEntry.
43         (PartialContainer.Create): Don't use Register.  Call the
44         appropriate Add... function directly.
45         (ClassPart): Take both the PartialContainer and the enclosing
46         class as constructor arguments.
47         (ClassPart.EmitFieldInitializers): Override.
48         (ClassPart.PartFindNestedTypes): Remove.
49         (FieldBase.GetInitializerExpression): Resolve the initializer
50         expression in the emit context of the enclosing class.
51         * tree.cs (RootTypes): Remove Register ().
52         
53 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
54
55         * cs-parser.jay: Removed CS0134.
56         
57         * driver.cs: Removed CS1901.
58         
59         * expression.cs (SizeOf.DoResolve): Don't report CS0233
60         for predefined types.
61
62 2005-03-07  Duncan Mak  <duncan@novell.com>
63
64         * codegen.cs (Save):  Catch UnauthorizedAccessException as
65         well. Fixes bug #73454.
66
67 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
68
69         * cs-tokenizer.cs (xtoken): Add CS1035.
70         
71         * class.cs (MethodData.Define): Add CS0683.
72         (FieldMember.ctor): Add CS0681.
73
74 2005-03-07  Raja R Harinath  <rharinath@novell.com>
75
76         * ecore.cs (SimpleName.DoResolve): Rename from
77         SimpleName.DoResolveAllowStatic.
78         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
79         Pass 'intermediate' flag to MemberStaticCheck.
80         (SimpleName.MemberStaticCheck): Skip "static check" only in case
81         of "intermediate" lookups via MemberAccess.
82         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
83         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
84
85 2005-03-07  Raja R Harinath  <rharinath@novell.com>
86
87         Fix #73394.
88         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
89         slipped in because of variable names that are identical to a
90         builtin type's BCL equivalent ('string String;', 'int Int32;').
91         (PropertyExpr.EmitInstance): Likewise.
92
93 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
94
95         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
96         
97         * report.cs (warning_ignore_table): Made public.
98
99 2005-03-04  Raja R Harinath  <rharinath@novell.com>
100
101         Fix #73282.
102         * class.cs (MethodData.Emit): Pass 'container' to
103         container.GetObsoleteAttribute instead of 'container.Parent'.
104
105 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
106
107         * cs-parser.jay: Add 1534 error test.
108
109         * iterators.cs (Yield.CheckContext): Add error 1629.
110         (Iterator.ctor): Save unsafe modifier.
111         (MoveNextMethod.DoEmit): Restore unsafe context.
112
113         * namespace.cs (UsingAlias): Better error message.
114
115 2005-03-03  Dan Winship  <danw@novell.com>
116
117         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
118         the warning message [#73219]
119
120 2005-03-03  Raja R Harinath  <rharinath@novell.com>
121
122         Fix compile with MCS 1.0.0.0.
123         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
124         w_restore to not depend on string constant folding.
125
126 2005-03-03  Raja R Harinath  <rharinath@novell.com>
127
128         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
129         CS0246 check to users who passed 'silent = false'.
130         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
131         check.
132         (SimpleName.SimpleNameResolve): Update.
133         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
134         (MemberAccess.IdenticalNameAndTypeName): Update.
135         * doc.cs (FindDocumentedTypeNonArray): Update.
136
137 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
138
139         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
140         * parameters.cs (ComputeAndDefineParameters): Remove.
141         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
142         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
143         Use GetParameterInfo.
144
145 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
146
147         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
148
149 2005-03-02  Raja R Harinath  <rharinath@novell.com>
150
151         Unify DeclSpace.LookupType and DeclSpace.FindType.
152         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
153         is in charge of defining nested types on demand.
154         (DeclSpace.LookupType): Use it when the current_type is a
155         TypeBuilder.  Use LookupTypeDirect for reflected types.
156         (DeclSpace.FindType): Remove.
157         (DeclSpace.LookupInterfaceOrClass): Likewise.
158         (DeclSpace.DefineTypeAndParents): Likewise.
159         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
160         DeclSpace.LookupType.
161         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
162         * typemanager.cs (LookupType): Simplify.
163         (AddUserType): Remove type from negative_hits.
164         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
165         * class.cs (TypeContainer.FindMembers): Move handling of nested
166         types ...
167         (TypeContainer.FindMembers_NestedTypes): ... here.
168         (TypeContainer.FindNestedType): Implement override.
169         (ClassPart.FindNestedType): Delegate to PartialContainer.
170         (ClassPart.PartFindNestedType): Looks up the nested types of the
171         part alone.
172
173 2005-03-02  Martin Baulig  <martin@ximian.com>
174
175         * class.cs (TypeContainer.DoDefineMembers): We also need a default
176         static constructor in static classes.
177
178 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
179
180         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
181         sizeParamIndex is not specified.
182
183 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
184
185         Fix #73117
186         * report.cs (WarningMessage.IsEnabled): Missing null check.
187
188 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
189
190         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
191         in the fields and not in the properties.
192
193 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
194
195         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
196         fields as well.
197
198 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
199
200         * attribute.cs: Small refactoring (improved robustness).
201         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
202         (ValidateGuid): Removed.
203         (Resolve): Removed referenced to above mentioned.
204         (GetAttributeUsage): Made private and changed to work without
205         class assistance.
206         (GetIndexerAttributeValue): Don't crash.
207         (GetConditionalAttributeValue): Ditto.
208         (GetClsCompliantAttributeValue): Ditto.
209         (ExtractSecurityPermissionSet): All attributes exceptions are
210         error 648.
211         (GetPropertyValue): New helper.
212         (GetMethodImplOptions): New method.
213         (DefinePInvokeMethod): Reuse common code. Implemented handling of
214         some missing properties.
215         
216         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
217         (Method.ApplyAttributeBuilder): Updated.
218         
219         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
220         exception.
221
222 2005-02-28  Raja R Harinath  <rharinath@novell.com>
223
224         Fix #73052.
225         * report.cs (Report.SymbolRelatedToPreviousError): Handle
226         non-simple types (array, pointer, reference).
227
228 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
229
230         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
231
232         * class.cs (MethodCore.IsDuplicateImplementation): Special error
233         for operators.
234         (Method.CheckBase): Catch wrong destructor here.
235         (MethodData.Define): Add errors 550, 668.
236
237         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
238
239         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
240
241         * pending.cs (VerifyPendingMethods): Add error 551.
242
243         * typemanager.cs (CSharpName): Next error report helper.
244
245 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
246
247         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
248         attributes. Removed useless attribute double check.
249         It saves almost 2MBs for corlib.
250
251 2005-02-25  Raja R Harinath  <rharinath@novell.com>
252
253         Fix #72924.
254         * statement.cs (ExpressionStatement.Resolve): Make robust to being
255         called twice in case of error.
256
257 2005-02-23  Chris Toshok  <toshok@ximian.com>
258
259         Fix compiler portions of #72827.
260         * statement.cs (Block.Emit): call Begin/EndScope on the
261         EmitContext instead of the ILGenerator.
262
263         * codegen.cs (EmitContext.BeginScope): new method, call
264         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
265         we have one.)
266         (EmitContext.BeginScope): same, but EndScope and CloseScope
267
268         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
269         offset and call the superclass's OpenScope(int) with it.
270         (SymbolWriter.CloseScope): get the current il
271         offset and call superclass's CloseScope(int) with it.
272
273 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
274
275         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
276         CS1677 for out and ref as well.
277
278         * class.cs (Method.Define): Add error CS1599 detection.
279         
280         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
281         
282         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
283         
284         * delegate.cs (Delegate.Define): Add error CS1599 detection.
285         
286         * support.cs.cs (ModifierDesc): New helper method.
287
288 2005-02-23  Raja R Harinath  <rharinath@novell.com>
289             Abin Thomas  <projectmonokochi@rediffmail.com>
290             Anoob V E  <projectmonokochi@rediffmail.com>
291             Harilal P R  <projectmonokochi@rediffmail.com>
292
293         Fix #57851, #72718.
294         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
295         MemberLookup (used for error reporting) actually returns a result.
296         Fix error report number (122, not 112).
297
298 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
299             Anoob V E  <projectmonokochi@rediffmail.com>
300             Harilal P R  <projectmonokochi@rediffmail.com>
301
302         Fix #71134.
303         * pending.cs (PendingImplementation.GetAbstractMethods):
304         Find NonPublic members too.
305
306 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
307
308         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
309         Fixed error 217.
310         
311         * class.cs (MethodCore.CheckMethodAgainstBase):
312         Add error 239 report.
313
314 2005-02-21  Raja R Harinath  <rharinath@novell.com>
315
316         Fix #68955.
317         * expression.cs (Invocation.IsApplicable): Make public.
318         (Invocation.IsParamsMethodApplicable): Likewise.
319         * delegate.cs (Delegate.VerifyApplicability): Don't use
320         Invocation.VerifyArgumentCompat for parameter applicability
321         testing.  Use Invocation.IsApplicable and
322         Invocation.IsParamsMethodApplicable.
323
324 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
325
326         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
327         
328         * class.cs (Operator.Define): Add error 217 report.
329         
330 2005-02-21  Raja R Harinath  <rharinath@novell.com>
331
332         * namespace.cs (UsingEntry.Resolve): Undo change below.
333
334 2005-02-21  Raja R Harinath  <rharinath@novell.com>
335
336         Fix #72756.
337         * ecore.cs (Expression.MemberLookupFailed): Add argument to
338         disable the error message when the extended MemberLookup also
339         fails.
340         (Expression.MemberLookupFinal): Update.
341         (SimpleName.DoSimpleNameResolve): Update.
342         * expression.cs (MemberAccess.ResolveNamespaceOrType):
343         Don't use MemberLookupFinal.
344         (New.DoResolve): Update.
345         (BaseAccess.CommonResolve): Update.
346
347 2005-02-21  Raja R Harinath  <rharinath@novell.com>
348
349         Fix #72732.
350         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
351         occured previously, don't resolve again.
352
353 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
354
355         Fix #69949
356         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
357         argument. Call ResolveAttributeUsage for unresolved.
358         when types doesn't match ctor arguments.
359         
360         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
361         for nested attribute classes.
362         (Class.attribute_usage): Removed.
363         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
364         for attribute class.
365         
366         * ecore.cs (IsAttribute): Removed.
367         
368         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
369         
370         * rootcontext.cs (RegisterAttribute): Removed, attributes are
371         now normal types.
372         (attribute_types): Removed.
373         (EmitCode): Global attributes are emited as the latest.
374
375 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
376
377         * class.cs (EmitFieldInitializers): Don't emit field initializer
378         for default values when optimilization is on.
379         
380         * constant.cs (Constant.IsDefaultValue): New property.
381         
382         * driver.cs: Add /optimize handling.
383         
384         * constant.cs,
385         * ecore.cs,
386         * literal.cs: Implement new IsDefaultValue property.
387         
388         * rootcontext.cs (Optimize): New field, holds /optimize option.
389
390 2005-02-18  Raja R Harinath  <rharinath@novell.com>
391
392         Fix crasher in re-opened #72347.
393         * namespace.cs (Namespace.Lookup): Return null if
394         DeclSpace.DefineType returns null.
395
396         Fix #72678.
397         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
398
399 2005-02-18  Raja R Harinath  <rharinath@novell.com>
400
401         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
402         now returns null if it cannot resolve to an lvalue.
403         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
404         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
405         returned null.  Remove check for SimpleName.
406         (EventExpr.DoResolveLValue): New.
407         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
408         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
409         error from ...
410         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
411         avoid CS0131 error.
412         (Unary.ResolveOperator): Move CS0211 check ...
413         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
414         CS0131 error.
415         (Unary.DoResolveLValue): Simplify.
416         (AddressOf.DoResolveLValue): New.
417         (ArrayAccess.DoResolveLValue): New.
418
419 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
420
421         * attribute.cs (Attribute.Resolve): Add arguments casting for
422         when types doesn't match ctor arguments.
423
424 2005-02-16  Raja R Harinath  <rharinath@novell.com>
425
426         Fix parts of #63202.
427         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
428         lookup of operator in base type.  Ensure that all checks happen
429         when the operator resolves to an "op_..." method.
430
431 2005-02-15  Raja R Harinath  <rharinath@novell.com>
432
433         Fix #71992.
434         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
435         'ignore_cs0104' parameter.  Pass it to ...
436         (NamespaceEntry.Lookup): ... this.
437         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
438         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
439         (TypeLookupExpression.DoResolveAsTypeStep): Update.
440         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
441         Update.  Request that cs0104 errors be ignored.
442         (ComposedCast.ResolveAsTypeStep): Update.
443
444 2005-02-14  Raja R Harinath  <rharinath@novell.com>
445
446         Fix #59209.
447         * expression.cs (Invocation.BetterFunction): Remove support for
448         comparing virtual functions and their overrides.
449         (Invocation.IsOverride): New.
450         (Invocation.OverloadResolve): Don't consider 'override' functions
451         during candidate selection.  Store them in a lookaside list.
452         If the selected method is a 'virtual' function, use the list to
453         find any overrides that are closer to the LHS type.
454
455 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
456
457         * expression.cs (New.DoResolve): Add complex core type reduction.
458         (New.Constantify): Converts complex core type syntax like 'new int ()'
459         to simple constant.
460         
461 2005-02-14  Raja R Harinath  <rharinath@novell.com>
462
463         * decl.cs (EntryType.EntryType): New constructor to create an
464         updated copy of a cache entry.
465         (MemberCache.AddMethods): Use it.
466         (MemberCache.ClearDeclaredOnly): Remove.
467         (MemberCache.MemberCache): Update.
468
469 2005-02-11  Miguel de Icaza  <miguel@novell.com>
470
471         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
472         variable.  This one is represents the actual low-level declaration
473         of the method, as opposed to the semantic level `IsStatic'.   
474
475         An anonymous method which is hosted into a static method might be
476         actually an instance method.  IsStatic would reflect the
477         container, while MethodIsStatic represents the actual code
478         generated.
479
480         * expression.cs (ParameterReference): Use the new MethodIsStatic
481         instead of IsStatic.
482
483         * anonymous.cs (AnonymousMethod.Compatible): Pass the
484         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
485         set on the current EmitContext. 
486
487         * expression.cs (Cast): Overload DoResolveLValue so we can pass
488         resolve our casted expression as an LValue.  This triggers the
489         proper LValue processing that is later required by Assign.
490
491         This fixes 72347.
492
493         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
494
495 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
496
497         C# 2.0 Fixed buffer implementation
498
499         * anonymous.cs: Update after RegisterHelperClass renaming.
500
501         * attribute.cs (AttributeTester.fixed_buffer_cache):
502         Cache of external fixed buffers.
503         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
504         implementation if field is fixed buffer else null.
505
506         * class.cs
507         (TypeContainer.AddField): Accept FieldMember instead of Field.
508         (FieldBase.IsFieldClsCompliant): Extracted code from
509         VerifyClsCompliance descendant customization.
510         (FixedField): New class handles fixed buffer fields.
511         (FixedFieldExternal): Keeps information about imported fixed
512         buffer.
513         (IFixedField): Make access to internal or external fixed buffer
514         same.
515
516         * cs-parser.jay: Add fixed buffer parsing.
517
518         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
519         buffer.
520
521         * expression.cs (Indirection): Extended implementation to accept
522         fixed buffer field.
523         (PointerArithmetic.Emit): Get element from fixed buffer as well.
524         (ElementAccess.MakePointerAccess): Get type as parameter.
525         (DoResolve): Add fixed buffer field expression conversion.
526         (DoResolveLValue): Ditto.
527         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
528         (ArrayPtr): Derives from FixedBufferPtr.
529         (ArrayPtr.Emit): Add extra emit for array elements.
530
531         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
532
533         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
534         for compiler generated types.
535         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
536
537         * statement.cs (Fixed): Refactored to be easier add fixed buffer
538         and consume less memory.
539         (Fixed.Resolve): Add fixed buffer case.
540
541         * typemanager.cs (compiler_generated_attr_ctor,
542         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
543         (HasElementType): Add our own implementation to work on every
544         runtime.
545
546 2005-02-11  Miguel de Icaza  <miguel@novell.com>
547
548         * anonymous.cs (CaptureContext): Track whether `this' has been
549         referenced.   
550
551         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
552         only captured `this' if it was implicitly done (instance
553         methods/variables were used). 
554
555         * codegen.cs (EmitContext.CaptureThis): New method to flag that
556         `this' must be captured.
557
558 2005-01-30  Miguel de Icaza  <miguel@novell.com>
559  
560         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
561         is null it means that there has been no need to capture anything,
562         so we just create a sibling.
563
564         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
565
566         Just a partial fix.  The other half is fairly elusive.
567         
568 2005-02-10  Raja R Harinath  <rharinath@novell.com>
569
570         Fix #52586, cs0121-4.cs.
571         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
572         and return a hashtable.
573         (MemberCache.ClearDeclaredOnly): New.
574         (MemberCache.MemberCache): Update to change.  Make a deep copy of
575         the method_hash of a base type too.
576         (MemberCache.AddMethods): Adapt to having a deep copy of the base
577         type methods.  Overwrite entries with the same MethodHandle so
578         that the ReflectedType is correct.  The process leaves in base
579         virtual functions and their overrides as distinct entries.
580         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
581         matters since it was boxed in a ArrayList before.
582         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
583         modifier.
584         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
585         case of a virtual function and its override (choose the overload
586         as better).
587         (Invocation.OverloadResolve): Avoid 'override' members during
588         'applicable_type' calculation.
589
590 2005-02-09  Raja R Harinath  <rharinath@novell.com>
591
592         Combine two near-redundant caches.
593         * typemanager.cs (method_params): Rename from method_internal_params.
594         (TypeManager.GetParameterData): New.  Replace
595         Invocation.GetParameterData.
596         (TypeManager.LookupParametersByBuilder): Remove.
597         * expression.cs (Invocation.method_parameter_cache): Remove.
598         (Invocation.GetParameterData): Remove.
599         Update to changes.
600         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
601         Update to changes.
602
603 2005-02-08  Raja R Harinath  <rharinath@novell.com>
604
605         Fix #72015.
606         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
607         TypeManager.multicast_delegate_type is null, resolve it by looking
608         up "System.MulticastDelegate".
609         * rootcontext.cs (RootContext.ResolveCore): Simplify.
610
611 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
612             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
613             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
614
615         Fix cs0164.cs.
616         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
617         (LabeledStatement.AddReference): New.  Set 'referenced'.
618         (Goto.Resolve): Use it.
619
620 2005-02-05  John Luke  <john.luke@gmail.com>
621
622         * driver.cs: remove duplicate -doc line in Usage ()
623
624 2005-02-04  Raja R Harinath  <rharinath@novell.com>
625
626         * location.cs (Location.AddFile): Fix CS2002 error report.
627
628 2005-02-02  Martin Baulig  <martin@ximian.com>
629
630         * delegate.cs (Delegate.DefineType): Report an internal error if
631         TypeManager.multicast_delegate_type is null.  See bug #72015 for
632         details.        
633
634 2005-02-02  Raja R Harinath  <rharinath@novell.com>
635
636         Fix a crasher in a variant of #31984.
637         * const.cs (Constant.CheckBase): New override that defers the
638         new-or-override check in case the base type hasn't been populated
639         yet.
640         (Constant.Define): Ensure the new-or-override check is performed.
641
642 2005-02-01  Duncan Mak  <duncan@ximian.com>
643
644         * const.cs (LookupConstantValue): Check that `ce' is not null
645         before calling GetValue ().
646
647 2005-02-01  Raja R Harinath  <rharinath@novell.com>
648
649         Fix test-334.cs (#69519).
650         * cs-parser.jay (using_alias_directive): Pass in an expression to
651         NamespaceEntry.UsingAlias.
652         (using_namespace_directive): Pass in an expression to
653         NamespaceEntry.Using.
654         (namespace_name): Don't flatten to a string.
655         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
656         (NamespaceEntry.AliasEntry.Resolve): Lookup using
657         ResolveAsTypeStep.
658         (NamespaceEntry.UsingEntry): Likewise.
659         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
660         changes.
661         (NamespaceEntry.LookupForUsing): Remove.
662         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
663         names.
664         (NamespaceEntry.Lookup): Remove support for dotted names.
665
666 2005-02-01  Raja R Harinath  <rharinath@novell.com>
667
668         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
669         split into two.
670         (NamespaceEntry.ImplicitParent): Compute on demand.
671         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
672         parallels the current.
673         (NamespaceEntry.LookupForUsing): Use it.
674         (NamespaceEntry.Lookup): If the current namespace-entry is
675         implicit, don't search aliases and using tables.
676
677 2005-02-01  Raja R Harinath  <rharinath@novell.com>
678
679         Fix #31984.
680         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
681         BaseCache here.
682         (TypeContainer.BaseCache): Compute on demand.
683         (TypeContainer.FindMembers): Define constants and types if they're
684         not already created.
685         (FieldMember.Define): Move resetting of ec.InUnsafe before error
686         check.
687         * const.cs (Constant.Define): Make idempotent.
688
689 2005-01-29  Miguel de Icaza  <miguel@novell.com>
690
691         * pending.cs: Produce better code (no nops produced by using Ldarg
692         + value).
693         
694         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
695         i - 1' it should be arg + 1.
696
697         Fixes bug #71819.
698
699 2005-01-28  Raja R Harinath  <rharinath@novell.com>
700
701         * attribute.cs (Attribute.CheckAttributeType): Make private
702         non-virtual.
703         (Attribute.ResolveType): Make virtual.
704         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
705         handling of RootContext.Tree.Types.
706
707 2005-01-27  Raja R Harinath  <rharinath@novell.com>
708
709         Update attribute-handling to use the SimpleName/MemberAccess
710         mechanisms.
711         * cs-parser.jay (attribute): Pass in an expression to the
712         constructors of Attribute and GlobalAttribute.
713         * attribute.cs (Attribute): Take an expression for the name.
714         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
715         passed in attribute name expression.
716         (Attribute.CheckAttributeType): Use it.
717         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
718         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
719         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
720         argument to prevent error messages if the lookup fails.
721
722 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
723
724         * expression.cs (Indirection): Implemented IVariable interface
725         to support indirection in AddressOf operator.
726         (PointerArithmetic.Emit): Add optimalization for case where
727         result can be precomputed.
728
729 2005-01-26  Martin Baulig  <martin@ximian.com>
730
731         * class.cs (TypeContainer.AttributeTargets): Return the correct
732         AttributeTargets depending on our `Kind' instead of throwing an
733         exception; fixes #71632.
734
735 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
736
737         Fix #71257
738         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
739         constant members.
740
741 2005-01-25  Raja R Harinath  <rharinath@novell.com>
742
743         Fix #71602.
744         * expression.cs (MemberAccess.DoResolve): Don't complain with
745         cs0572 when the LHS of a member access has identical name and type
746         name.
747
748 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
749
750         Fix #71651, #71675
751         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
752         CreatePermission.
753         Create custom PermissionSet only for PermissionSetAttribute.
754
755 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
756
757         Fix #71649
758         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
759         delegates in static class.
760
761 2005-01-24  Martin Baulig  <martin@ximian.com>
762
763         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
764         merging an implicit block, just use its reachability.
765
766         * statement.cs (Block.Resolve): Make the unreachable code check
767         work wrt. implicit blocks; see test-337 from #63842.
768
769 2005-01-21  Alp Toker  <alp@atoker.com>
770  
771         * cs-parser.jay: destructor_declaration's container is PartialContainer
772         not Class when partial types are used, so use Kind prop instead of
773         'is'.
774         
775 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
776
777         * cs-parser.jay: Improve error reporting when an interface
778         declares new types.
779
780 2005-01-20  Dick Porter  <dick@ximian.com>
781
782         * support.cs: SeekableStreamReader fix from Sandor Dobos
783         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
784         chars are read.  Fixes bug 70369.
785
786 2005-01-20  Raja R Harinath  <rharinath@novell.com>
787
788         * cs-parser.jay (catch_clause): Simplify current_block handling
789         somewhat.
790
791 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
792
793         * convert.cs (ImplicitStandardConversionExists): Synchronize the
794         code with ImplicitStandardConversion to handle the implicit
795         conversion of method groups into valid delegate invocations. 
796
797         The problem is that in parameter handling we were using this code
798         path.  Fixes bug #64698
799
800 2005-01-19  Raja R Harinath  <rharinath@novell.com>
801
802         * cs-parser.jay: Fix several infelicities.
803         - Avoid assigning to the parser value stack.  Code like 
804           '$3 = null' is unclean.  Synthesize a value for the code block
805           instead. 
806         - Avoid using oob_stack for storing location information.  Use ...
807         (_mark_): ... this.  New (empty) rule.  Saves the current location
808         in $$.
809         (foreach_statement): Avoid using oob_stack for current_block
810         handling.  Use technique used in for_statement and
811         using_statement.  Synthesize a value for the code block to store
812         additional intermediate information.
813
814 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
815
816         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
817         of a different type is only allowed to private fields of a
818         containing type, not on fields of a base class.
819
820         See test-174.cs and error cs0122-9.cs
821
822 2005-01-13  Raja R Harinath  <rharinath@novell.com>
823
824         Fix test-335.cs (bug #58126).
825         * cs-parser.jay (argument): Split out non-expression parts of the
826         rule into 'non_simple_argument'.
827         (invocation_expression): Support parenthesized invocations with
828         multiple arguments, and with single non-simple arguments.
829
830 2005-01-13  Raja R Harinath  <rharinath@novell.com>
831
832         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
833         places.
834
835 2005-01-12  Raja R Harinath  <rharinath@novell.com>
836
837         Fix cs0038-1.cs, cs1640-6.cs.
838         * ecore.cs (Expression.Resolve): Remove special-case for
839         SimpleName in error-handling.
840         (Expression.almostMatchedMembers): Relax access permission to
841         protected.
842         (Expression.MemberLookupFailed): Handle duplicates in
843         almostMatchedMembers list.
844         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
845         * expression.cs (New.DoResolve): Report CS1540 for more cases.
846         * typemanager.cs (GetFullNameSignature): Use the MethodBase
847         overload if the passed in MemberInfo is a MethodBase.
848
849 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
850
851         Fix #70749
852         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
853         for non-CAS & merge permission sets properly.
854
855 2005-01-11  Raja R Harinath  <rharinath@novell.com>
856
857         Improve standard-compliance of simple name and member access 
858         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
859         * ecore.cs (FullNamedExpression): New abstract base class 
860         for Namespaces and TypeExpressions.
861         (ResolveFlags.SimpleName): Remove.
862         (SimpleName): Remove support for dotted names.
863         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
864         DeclSpace.FindType and DeclSpace.LookupType.
865         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
866         (Expression.ExprClassName): Make member function.
867         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
868         a namespace.  Remove creation of dotted "SimpleName"s.
869         (MemberAccess.DoResolve): Likewise.
870         * decl.cs (DeclSpace.Cache): Make private.
871         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
872         (DeclSpace.FindType): Update.
873         (DeclSpace.LookupType): Move here from RootContext.  Return a 
874         FullNamedExpression.
875         * namespace.cs (Namespace): Derive from FullNamedExpression
876         so that it can be part of expression resolution.
877         (Namespace.Lookup): Return an FullNamedExpression.
878         (NamespaceEntry.LookupAlias): Lookup aliases only in current
879         namespace.
880         * rootcontext.cs (NamespaceLookup): Remove.
881         (LookupType): Move to DeclSpace.
882         * attribute.cs (CheckAttributeType): Update.
883         * doc.cs (FindDocumentedType): Remove allowAlias argument.
884         (FindDocumentedTypeNonArray): Likewise.
885
886 2005-01-11  Raja R Harinath  <rharinath@novell.com>
887
888         Fix cs0509.cs, cs1632.cs.
889         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
890         is the same as IsInterface.
891         (TypeContainer.GetClassBases): Likewise.
892         * statement.cs (LabeledStatement.ig): New field.
893         (LabeledStatement.LabelTarget): Save ILGenerator which created the
894         label.
895         (LabeledStatement.DoEmit): Check that the label was created with
896         the same ILGenerator.
897
898 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
899
900         Fix #71058
901         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
902         accessors to its properties.
903
904         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
905         from accessors to property.
906         
907 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
908
909         Fix #70722
910         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
911         only for overrides.
912         
913 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
914
915         * attribute.cs: Check for null and empty strings.  
916
917         I have lost another battle to Paolo.
918
919 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
920
921         Fix #70942
922         * class.cs (PropertyMethod): Set Parent field in ctors.
923         (SetMethod.InternalParameters): Add unsafe switch hack.
924         Override MarkForDuplicationCheck where it is appropriate.
925
926         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
927         It says whether container allows members with the same name.
928         Base default is no.
929         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
930         Removed is_method parameter.
931
932 2005-01-06  Duncan Mak  <duncan@ximian.com>
933
934         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
935         because the previous change led to incorrect reporting of CS1032
936         ("Cannot define/undefine preprocessor symbols after first token in
937         file"). Instead of using `tokens_seen' as the only flag that
938         triggers CS1040, introduce `comments_seen'. This new flag is used
939         to signify having seen comments on the current line, so it is
940         unset after a newline.
941
942 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
943
944         * doc.cs : When searching for a type, find nested type too.
945           This fixes bug #71040.
946
947 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
948
949         * doc.cs :
950           - Warn missing member comment on those classes which also does not
951             have doc comments. Fixed bug #71041.
952           - Don't warn missing doc comment on default constructor.
953             Fixed bug #71042.
954
955 2005-01-06  Duncan Mak  <duncan@ximian.com>
956
957         * cs-tokenizer.cs (xtoken): After handling traditional C-style
958         comments, set `tokens_seen' to true. This allows us to detect
959         misplaced preprocessor directives (i.e. not at the beginning of
960         the a line, nor after whitespaces). In that case, report error
961         CS1040. This fixes bug #56460.
962
963         * cs-parser.jay (interface_member_declaration): Add checks for
964         IsExplicitImpl, and report CS0541 error if an interface member is
965         defined as an explicit interface declaration.
966
967 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
968
969         Fix #70817
970         * class.cs (PropertyMethod): Set Parent field in ctors.
971         (SetMethod.InternalParameters): Add unsafe switch hack.
972         
973         * decl.cs (MemberCore.Parent): Cannot be readonly.
974
975 2005-01-06  Raja R Harinath  <rharinath@novell.com>
976
977         * decl.cs (DeclSpace.ResolveType): Remove.
978         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
979         Merge in code from ...
980         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
981         * class.cs, enum.cs: Update to changes.
982
983 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
984
985         * anonymous.cs: Ensure that we init the scope of our parent if it
986         has not been initialized yet.
987
988 2004-12-30  Duncan Mak  <duncan@ximian.com>
989
990         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
991         if field.FieldBuilder is null. Fixes #70758.
992
993         * convert.cs: Fixed some typos and updated some of the comments.
994         (ImplicitStandardConversionExists):
995         (TryImplicitIntConversion): If `target_type' is an interface and
996         the type of `ic' implements this interface, return true or a new
997         BoxedCast instead of null. This fixes #70468.
998
999 2004-12-29  Duncan Mak  <duncan@ximian.com>
1000
1001         * expression.cs (Argument.Emit): Check that Expr is
1002         IMemoryLocation before casting to it, and report CS1510 otherwise.
1003
1004         This fixes #70402.
1005
1006 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
1007
1008         * statement.cs (Block.ThisVariable): remove the recursion here, to
1009         make the --profile more sane.
1010
1011 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
1012
1013         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
1014         assembly, by JB Evain.
1015
1016 2004-12-17  Raja R Harinath  <rharinath@novell.com>
1017
1018         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
1019           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
1020         "parent" refers to enclosing type/class.  "base" refers to superclass.
1021
1022 2004-12-17  Raja R Harinath  <rharinath@novell.com>
1023
1024         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
1025         Ensure that we only have GlobalAttributes.
1026         * attribute.cs (Attribute.Emit): Make non-virtual.
1027         (GlobalAttribute.Emit): Remove.
1028         (Attribute.Resolve): Make virtual.
1029         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
1030         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
1031         the argument. Don't create one.
1032         (Attribute.GetObsoleteAttribute): Likewise.
1033         (Attribute.GetClsCompliantAttributeValue): Likewise.
1034         * class.cs, decl.cs: Update to changes.
1035
1036 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
1037
1038         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
1039         
1040         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
1041         
1042         * statement.cs (Foreach.Resolve): Add error 186 report.
1043
1044 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
1045
1046         * expression.cs (Conditional.DoResolve): Add warning 429.
1047         
1048         * statement.cs (If.Resolve): Add warning 665.
1049
1050 2004-12-16  Raja R Harinath  <rharinath@novell.com>
1051
1052         New invariant: RootContext.Tree.Types.NamespaceEntry == null
1053         except when in the parser, and in GlobalAttribute.
1054         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
1055         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
1056         RootContext.Tree.Types.NamespaceEntry once work is done.
1057         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
1058         and resets RootContext.Tree.Types.NamespaceEntry.
1059
1060 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
1061
1062         * cs-parser.jay: Don't create a block for every variable.
1063
1064 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
1065
1066         * location.cs: Provide extra information.
1067
1068         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
1069         variables from the captured environment, it is the ldarg_0.
1070
1071 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
1072
1073         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
1074         find a conclusion.
1075         
1076         * class.cs: Changed warning level for 169 to avoid developer
1077         displeasure from warning flooding. It will be changed back when they
1078         fix most of current BCL warnings.
1079         
1080         * RootContext.cs: Pushed default WarningLevel to 3.
1081         
1082         * statement.cs: Removed unused variable.
1083
1084 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
1085
1086         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
1087         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
1088         Add error 502 report.
1089         (StaticClass.DefineType): Add error 441 report.
1090         (Class.AllowedModifiersProp): New virtual property as temporary
1091         extension to AllowedModifiers.
1092         (Class.DefineType): Add error 418 report. Moved ModFlags check here
1093         to share implementation with StaticClass and don't call virtual
1094         methods from ctor.
1095         
1096         * driver.cs (MainDriver): Add error 1558 test.
1097
1098         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
1099         report. Moved error 36 test here.
1100
1101         * statement.cs (Throw.Resolve): Add error 724 report.
1102
1103         * typemanager.cs: Add out_attribute_type core type.
1104         
1105 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
1106
1107         * class.cs (TypeContainer.VerifyClsCompliance): Add error
1108         3018 report.
1109         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
1110
1111         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
1112         3017 report.
1113         
1114         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
1115
1116         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
1117         Add error 3023 report.
1118         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
1119
1120         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
1121         implementation.
1122
1123 2004-12-12  John Luke  <john.luke@gmail.com>
1124
1125         * driver.cs (AddArgs): take -- into account when
1126         adding arguments, fixes bug 65710 
1127
1128 2004-12-12  Martin Baulig  <martin@ximian.com>
1129
1130         * expression.cs (Unary.TryReduceNegative): Added support for
1131         SByteConstant and ByteConstant.
1132         (Unary.Reduce): Check error values from TryReduceNegative().
1133
1134 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
1135
1136         * attributes.cs (Attribute.Resolve): Avoid multiple error report
1137         and report exception as error 182.
1138
1139 2004-12-10  Raja R Harinath  <rharinath@novell.com>
1140
1141         * driver.cs (Main): Fix message when there are warnings.
1142
1143 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
1144
1145         * delegate.cs: Fixed my fix from yesterday, sorry about that.
1146
1147 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
1148
1149         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
1150         Reduced number of warnings.
1151         
1152         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
1153
1154 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
1155
1156         * driver.cs: Removed message.
1157
1158         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
1159
1160 2004-12-08    <vargaz@freemail.hu>
1161
1162         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
1163
1164 2004-12-08  Martin Baulig  <martin@ximian.com>
1165
1166         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
1167         instead of a CS3002 for properties and indexer.
1168
1169 2004-12-08  Martin Baulig  <martin@ximian.com>
1170
1171         * decl.cs (MemberName.ToString): Make this work again.
1172
1173 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
1174
1175         * attribute.cs (Resolve): Add error 591 detection.
1176
1177         * class.cs (FieldMember.Define): Add error 1547 detection.
1178         (Indexer.Define): Add error 620 detection.
1179         (Operator.Define): Add error 590 detection.
1180
1181         * ecore.cs: Missing argument for error 79.
1182
1183         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
1184         detection.
1185
1186 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
1187
1188         Fix #70106
1189         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
1190         only.
1191
1192 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
1193
1194         * cs-parser.jay : handle doc comments on implicit/explicit operators.
1195           Some operator comments were suppressed.
1196         * doc.cs : Implicit/explicit operator name in doc comments are like
1197           "op_Explicit(type)~returnType", so added suffix handling.
1198
1199 2004-12-07  Martin Baulig  <martin@ximian.com>
1200
1201         * decl.cs
1202         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
1203         (MemberCore.GetClsCompliantAttributeValue): Likewise.
1204         (DeclSpace.ec): New protected field; store the EmitContext here.
1205         (DeclSpace.EmitContext): New public property; moved here from
1206         `TypeContainer'.
1207         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
1208         EmitContext.
1209
1210         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
1211         (Enum.Emit): Don't create a new EmitContext.
1212
1213         * delegate.cs (Delegate.DefineType): Always create the
1214         EmitContext.
1215
1216         * iterators.cs (Iterators.DefineIterator): Create a new
1217         EmitContext and store it in `ec'.
1218
1219 2004-08-24  Martin Baulig  <martin@ximian.com>
1220
1221         * typemanager.cs
1222         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
1223         this for accessibility checks.
1224         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
1225         IsNestedFamilyAccessible.
1226         (TypeManager.IsSubclassOf): New method, do what the name actually
1227         says.   
1228
1229 2004-12-06  Raja R Harinath  <rharinath@novell.com>
1230
1231         Fix crash on cs0657-17.cs.
1232         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
1233         Use RootContext.Tree.Types, not 'new RootTypes ()'.
1234         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
1235         the case where the NamespaceEntry gets overwritten.
1236
1237 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
1238
1239         Fixed #69195, #56821
1240         * ecore.cs (ResolveBoolean): Tiny refactoring.
1241
1242         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
1243         of right expression resolving when left is false constant and
1244         operator is LogicalAnd OR true constant and operator is LogicalOr.
1245
1246         * statement.cs (ResolveUnreachable): Always reports warning.
1247
1248 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
1249
1250         * class.cs: Distinguish between 1721 and 1722 (just a little help
1251         for the programmer).
1252
1253 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
1254
1255         * delegate.cs: Only allow this on new versions of the language. 
1256
1257 2004-12-02  Duncan Mak  <duncan@ximian.com>
1258
1259         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
1260         Expression class.
1261         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
1262         here as a static method. Take an additional bool out parameter
1263         `must_do_cs1540_check' for signaling to InstanceResolve.
1264         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
1265         member field from PropertyExpr class and made it an argument of
1266         the method instead.
1267         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
1268         check for MarshalByRefObject, and report CS0122 instead of CS1540.
1269         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
1270         and `remove_accessor' as well as InstanceResolve: report CS0122
1271         where applicable.
1272
1273         Fixes #70129.
1274
1275 2004-12-03  Raja R Harinath  <rharinath@novell.com>
1276
1277         Fix test-327.cs, test-328.cs, and put in early infrastructure
1278         for eventually fixing #52697.
1279         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
1280         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
1281         from other methods.
1282         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
1283         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
1284         (VerifyUsing, error246): Update.
1285         * rootcontext.cs (RootContext.NamespaceLookup): Just use
1286         'NamespaceEntry.LookupNamespaceOrType'.
1287
1288 2004-12-03  Martin Baulig  <martin@ximian.com>
1289
1290         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
1291         method as our child, call AnonymousMethod.Compatible() on it.
1292
1293 2004-12-03  Raja R Harinath  <rharinath@novell.com>
1294
1295         Disable XML documentation support in 'basic' profile.
1296         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
1297         Redirect XmlElement to System.Object.
1298         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
1299         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
1300         * mcs.exe.sources: Add doc-bootstrap.cs.
1301         * doc-bootstrap.cs: New file.  Contains empty stub implementation
1302         of doc.cs.
1303
1304 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
1305
1306         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
1307           comments are allowed.
1308
1309 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
1310
1311         * delegate.cs: Add checks for subtypes in paramaters and return values
1312         in VerifyMethod () to add support for Covariance/Contravariance
1313         in delegates.
1314         
1315 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
1316
1317         * report.cs: Remove extra closing parenthesis.
1318
1319         * convert.cs (Error_CannotImplicitConversion): If the name of the
1320         types are the same, provide some extra information.
1321
1322         * class.cs (FieldBase): Use an unused bit field from the field to
1323         encode the `has_offset' property from the FieldMember.  This saves
1324         a couple of Ks on bootstrap compilation.
1325
1326         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
1327         method as our child, return the AnonymousMethod resolved
1328         expression.
1329
1330         * expression.cs (New.DoResolve): Allow return values from
1331         NewDelegate to also include AnonymousMethods.
1332
1333         Fixes #70150.
1334
1335 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
1336
1337         Fix bug #70102
1338         * attribute.cs (Resolve): Improved implementation of params
1339         attribute arguments.
1340
1341         * support.cs (ParameterData): Add HasParams to be faster.
1342
1343 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
1344
1345         all things are for /doc support:
1346
1347         * doc.cs: new file that supports XML documentation generation.
1348         * mcs.exe.sources: added doc.cs.
1349         * driver.cs:
1350           Handle /doc command line option.
1351           Report error 2006 instead of 5 for missing file name for /doc.
1352           Generate XML documentation when required, after type resolution.
1353         * cs-tokenizer.cs:
1354           Added support for picking up documentation (/// and /** ... */),
1355           including a new XmlCommentState enumeration.
1356         * cs-parser.jay:
1357           Added lines to fill Documentation element for field, constant,
1358           property, indexer, method, constructor, destructor, operator, event
1359           and class, struct, interface, delegate, enum.
1360           Added lines to warn incorrect comment.
1361         * rootcontext.cs :
1362           Added Documentation field (passed only when /doc was specified).
1363         * decl.cs:
1364           Added DocComment, DocCommentHeader, GenerateDocComment() and
1365           OnGenerateDocComment() and some supporting private members for
1366           /doc feature to MemberCore.
1367         * class.cs:
1368           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
1369         * delegate.cs:
1370           Added overriden DocCommentHeader.
1371         * enum.cs:
1372           Added overriden DocCommentHeader and GenerateDocComment().
1373
1374 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
1375
1376         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
1377         unwrapping the enumeration values, chain to
1378         DoConstantNumericPromotions again, so we can promote things to the
1379         fundamental types (takes care of enums that are bytes, sbytes).
1380
1381         Fixes bug #62054.
1382
1383 2004-12-01  Raja R Harinath  <rharinath@novell.com>
1384
1385         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
1386         Fix long-standing bug in type-lookup.  Use FindType instead of
1387         LookupType when ec.ResolvingTypeTree.
1388         (Attribute.ResolveType, Attribute.Resolve)
1389         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
1390         Update to changes.
1391         (Attributes.Search): Remove internal version.  Update.
1392         (Attributes.SearchMulti): Update.
1393         (Attributes.GetClsCompliantAttribute): Remove.
1394         (Attributes.GetIndexerNameAttribute): Remove.
1395         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
1396         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
1397         * class.cs (Indexer.Define): Likewise.
1398
1399 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
1400
1401         Fix bug #68790
1402         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
1403         MarshallByReference members access.
1404
1405         * expression.cs: Use CheckMarshallByRefAccess;
1406         Better error CS0197 message.
1407
1408         * report.cs: Print whole related error message.
1409
1410 2004-11-30  Raja R Harinath  <rharinath@novell.com>
1411
1412         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
1413         the current directory to help debugging.
1414
1415 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
1416
1417         * class (GetClassBases): Better error 60 report.
1418         (EventProperty): Disabled warning 67 detection.
1419
1420 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
1421
1422         Fix bug #60324
1423         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
1424
1425         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
1426         precise values.
1427
1428 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
1429
1430         Fix bug #49488
1431         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
1432
1433         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
1434
1435 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
1436
1437         * attribute.cs (Attribute.Resolve): Refine error reporting and
1438         report a cs0117 if the identifier does not exist, to distinguish
1439         from 0617 which is a miss-use of the actual identifier.
1440
1441         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
1442         between cs0070 and cs0079.
1443
1444         * class.cs (MemberBase.DoDefine): When reporting a wrong
1445         accessibility level, we use MethodCore to compare instead of
1446         Method (this was a regression in some refactoring effort).
1447
1448         So now we correctly report cs0056 again.
1449
1450         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
1451         testing the target_type (which was known to be object_type) and
1452         not the source type (which is anonymous_method).
1453
1454         Fixed reporting of error cs1660.
1455
1456         * expression.cs (UserCast.Source): Expose the underlying cast.
1457
1458         * statement.cs (Switch.SwitchGoverningType): Sort the list of
1459         allowed types to find a match to int32 first (most common).
1460
1461         In addition, it ignores any ImplicitUserConversions that did an
1462         internal implicit conversion (as the switch statement allows only
1463         one integral conversion to exist).
1464
1465         * class.cs (PartialContainer.Create): rename `name' to
1466         `member_name' for clarity.  Then replace the string calls with a
1467         call to MemberName.GetPartialName, as now using
1468         MemberName.ToString is an error (this is due to the side effects
1469         it had, that were fixed in the past).
1470
1471         This will restore the error reporting on a number of partial class
1472         errors that were missusing this (and getting an exception as a
1473         results, which is now just a plain textual warning, because
1474         yyparse debug output would crash otherwise).
1475
1476 2004-11-26  Raja R Harinath  <rharinath@novell.com>
1477
1478         * Makefile (PROGRAM_INSTALL_DIR): Remove.
1479
1480 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
1481
1482         * rootcontext.cs (LookupType): Make sure to cache lookups that
1483         don't give us a negative result. This saves about 5% of corlib
1484         compilation time.
1485
1486 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
1487
1488         * report.cs (AbstractMessage.Print): messages are sent to stderr
1489
1490         * class.cs (TypeContainer.GetClassBases): It is an error to have a
1491         non-interface in the list of interfaces (at this point, either
1492         parent was properly set, or a base class is being listed in the
1493         interfaces section).
1494
1495         This flags error 1722, and resolves the crash from bug 69259.
1496
1497 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
1498
1499         * statement.cs (Using.EmitExpressionFinally): make this work right
1500         for valuetypes. Fixes 69926.
1501
1502 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
1503
1504         * const.cs (Const.ChangeType): Cope with the "0 literal can be
1505         converted to an enum" here, before we try to change the underlying
1506         type.  This code exists, but it is a different code path than the
1507         one used while encoding constants.
1508
1509         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
1510         old bug: when converting from the null literal to a pointer,
1511         return an EmptyCast, not the NullLiteral.
1512
1513         This fixes #69921, the recent null_type changes probably made this
1514         bug more prominent.
1515
1516         (ImplicitReferenceConversionExists): In addition, resynchronized
1517         the code here, so it matches the same code in
1518         ImplicitReferenceConversionExists for the `from any class-type S
1519         to any interface-type T'.
1520         
1521
1522 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
1523
1524         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
1525
1526 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
1527
1528         * cs-parser.jay: Use verbosity accordingly. 
1529
1530 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
1531
1532         * expression.cs (Unary.ResolveOperator): Do not report warning;
1533         AddressOf reads from variable.
1534         
1535         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
1536
1537 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
1538
1539         Fix bug #69462
1540
1541         * attribute.cs (Attributable): Removed CheckTargets.
1542         (Attributes.Emit): Explicit attribute targets are tested here.
1543
1544         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
1545         not enabled for interfaces.
1546
1547         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
1548         (GetAssemblyName): Ouch next bug there.
1549
1550 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
1551
1552         * expression.cs: Error 275 added.
1553         
1554 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
1555
1556         Fix bug #69177 (Implemented decimal constant support)
1557
1558         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
1559         (BinaryFold): Add DecimalConstant.
1560
1561         * const.cs (Define): Decimal constant 
1562         (is not constant.
1563         (ChangeType): Add decimal type handling.
1564         (LookupConstantValue): Don't set value for decimal type but
1565         emit DecimalConstantAttribute. Needed for constant optimization.
1566
1567         * constant.cs (ToDecimal): New method.
1568         (ConvertToDecimal): New method.
1569         (IntConstant): Implemented ConvertToDecimal.
1570         (DecimalConstant.Emit): Emit optimized version for decimals in
1571         int range.
1572
1573         * expression.cs (ResolveOperator): Changed order of constant
1574         reduction to work correctly with native types which have
1575         overloaded operators.
1576         (ResolveMemberAccess): Extract constant value from attribute
1577         for decimal type.
1578
1579         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
1580
1581         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
1582         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
1583         (ChangeType): Decimal is special.
1584         (TypeToCoreType): Add decimal type.
1585
1586 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
1587
1588         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
1589         decimal types.
1590
1591 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
1592
1593         * class.cs (EventField.ApplyAttributeBuilder): Fix error
1594         test cs1667-5.cs.
1595
1596 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
1597
1598         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
1599
1600         * pending.cs (PendingImplementation): Grab only interfaces.
1601
1602 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
1603
1604         * statement.cs (ForeachHelperMethods): Add location member and
1605         error 202 detection.
1606
1607 2004-11-19  Raja R Harinath  <rharinath@novell.com>
1608
1609         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
1610         automatically handled by executable.make.
1611         (PROGRAM): Make profile-specific.
1612
1613 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
1614
1615         * expression.cs (DoResolveBase): Fixed wrong warning for out
1616         variables.
1617
1618 2004-11-18  Martin Baulig  <martin@ximian.com>
1619
1620         Merged latest changes into gmcs.  Please keep this comment in
1621         here, it makes it easier for me to see what changed in MCS since
1622         the last time I merged.
1623
1624 2004-11-17  Raja R Harinath  <rharinath@novell.com>
1625
1626         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
1627         (TypeHandle.GetMemberCache): New.
1628         (TypeHandle.TypeHandle): Update.
1629         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
1630         (TypeManager.LookupParentInterfacesCache):
1631         Rename from LookupInterfaceCache.  Optimize slightly.
1632         (TypeManager.MemberLookup_FindMembers): Update.
1633         * decl.cs (MemberCache.MemberCache): Set Container to null in the
1634         multi-type variant.
1635         (AddCacheContents): Rename from AddHashtable.
1636         * class.cs (TypeContainer.parent_container): Remove.
1637         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
1638         (TypeContainer.DoDefineMembers): Don't initialize it.
1639         Update to name changes.
1640         
1641 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
1642
1643         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
1644         that factors the code to check access modifiers on override.  
1645
1646         (PropertyBase): Use the code here.
1647
1648         Patch from Lluis S'anchez, fixes bug #69361.
1649
1650 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
1651
1652         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
1653         routine that is used to report the use of a captured variable
1654         whose address has been taken.
1655
1656         There are two checks: one when variables are being captured and
1657         the other check is when the address of a variable is taken. 
1658         
1659         (because an anonymous methods might be resolved before *or* after
1660         the address has been taken) and 
1661
1662         * expression.cs (Conditional.DoResolve): Remove the special
1663         casing that Martin added to trueExpr and falseExpr being both
1664         NullLiteral.  We get the right behavior now just by introducing
1665         the null_type into the compiler. 
1666
1667         * convert.cs (ExplicitConversion): Change the code to use
1668         null_type instead of testing `expr is NullLiteral'.
1669         (ImplicitConversionStandard): use null_type too.
1670         (ImplicitReferenceConversionExists): use null_type too.
1671         (ImplicitReferenceConversion): use null_type too.
1672
1673         * literal.cs: The type of `NullLiteral' is now null_type instead
1674         of object_type. 
1675         (Resolve): Set the type here.
1676
1677         * typemanager.cs: Introduce null_type.
1678
1679 2004-11-17  Martin Baulig  <martin@ximian.com>
1680
1681         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
1682         direction, like FindMembers() does.  Fixes #69546, testcase is in
1683         test-315.cs.    
1684
1685 2004-11-16  Martin Baulig  <martin@ximian.com>
1686
1687         This is based on a patch from Marek Safar, see bug #69082.
1688         Fixes bugs #63705 and #67130.
1689
1690         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
1691         method; create a MemberCache for an interface type and cache the
1692         result.
1693
1694         * decl.cs (IMemberContainer.ParentContainer): Removed.
1695         (IMemberContainer.ParentCache): New property.
1696         (MemberCache.SetupCacheForInterface): Removed.
1697         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
1698         to create a cache for an interface's "parent".
1699
1700         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
1701         interfaces too.
1702
1703 2004-11-16  Martin Baulig  <martin@ximian.com>
1704
1705         Merged back from gmcs; these changes already went into gmcs a
1706         couple of weeks ago.
1707
1708         * typemanager.cs
1709         (TypeManager.AddUserType): Removed the `ifaces' argument.
1710         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
1711         `TypeExpr []'.
1712         (TypeManager.AddUserInterface): Removed.
1713         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
1714         `TypeExpr []'.
1715         (TypeManager.GetInterfaces): Likewise.
1716         (TypeManager.GetExplicitInterfaces): Likewise.
1717
1718         * ecore.cs (TypeExpr.GetInterfaces): Removed.
1719
1720         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
1721         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
1722
1723 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
1724
1725         * statement.cs: Avoid adding bools to a hashtable.
1726
1727 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
1728
1729         * expression.cs (Invocation.OverloadResolve): Flag error if we are
1730         calling an unsafe method from a safe location.
1731
1732 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
1733
1734         Fix #69167
1735         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
1736
1737 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
1738
1739         * namespace.cs (VerifyUsing): use GetPartialName instead of
1740         ToString. 
1741
1742 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
1743
1744         * statement.cs (Return.Resolve): Fix regression in typo: if
1745         `in_exc', we have to request a NeedReturnLabel, this was a typo
1746         introduced in the anonymous method check-in.  Fixes #69131.
1747
1748         * Indexers were using the ShortName when defining themselves,
1749         causing a regression in the compiler bootstrap when applying the
1750         patch from 2004-11-02 (first part), now they use their full name
1751         and the bug is gone.
1752
1753 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
1754
1755         * driver.cs: Strip the path from the names of embedded resources. Fixes
1756         #68519.
1757
1758 2004-11-04  Raja R Harinath  <rharinath@novell.com>
1759
1760         Fix error message regression: cs0104-2.cs.
1761         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
1762         (AliasEntry.Resolve): Update.
1763         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
1764         'silent' flag.
1765         (RootContext.LookupType): Update.
1766
1767 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
1768
1769         * cs-parser.jay: Add support for handling accessor modifiers
1770         * class: Add support port accessor modifiers and error checking,
1771         define PropertyMethod.Define as virtual (not abstract anymore)
1772         * ecore.cs: Add checking for proeprties access with access modifiers
1773         * iterators.cs: Modify Accessor constructor call based in the modified
1774         constructor
1775 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
1776
1777         * expression.cs (StringConcat): Handle being called twice,
1778         as when we have a concat in a field init with more than two
1779         ctors in the class
1780
1781 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
1782
1783         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
1784         special case explicit implementations, we should always produce
1785         the .property or .event declaration.
1786         
1787         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
1788         since it will not return correct data if people use this
1789         unresolved in the presence of using statements (see test-313).
1790
1791         * class.cs (MethodData.Define): If we are an explicit interface
1792         implementation, set the method name to the full name of the
1793         interface plus the name of the method.  
1794
1795         Notice that using the method.MethodName.GetFullName() does not
1796         work, as it will only contain the name as declared on the source
1797         file (it can be a shorthand in the presence of using statements)
1798         and not the fully qualifed type name, for example:
1799
1800         using System;
1801
1802         class D : ICloneable {
1803                 object ICloneable.Clone ()  {
1804                 }
1805         }
1806
1807         Would produce a method called `ICloneable.Clone' instead of
1808         `System.ICloneable.Clone'.
1809
1810         * namespace.cs (Alias.Resolve): Use GetPartialName.
1811         
1812 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1813
1814         * cs-parser.jay: Add error 1055 report.
1815
1816 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
1817
1818         * assign.cs (Assign.DoResolve): Only do the transform of
1819         assignment into a New if the types are compatible, if not, fall
1820         through and let the implicit code deal with the errors and with
1821         the necessary conversions. 
1822
1823 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
1824
1825         * cs-parser.jay: Add error 1031 report.
1826
1827         * cs-tokenizer.cs: Add location for error 1038.
1828
1829 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1830
1831         * cs-parser.jay: Add error 1016 report.
1832
1833 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1834
1835         * cs-parser.jay: Add errors 1575,1611 report.
1836
1837 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1838
1839         * cs-parser.jay: Add error 1001 report.
1840
1841 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1842
1843         Fix #68850
1844         * attribute.cs (GetMarshal): Add method argument for
1845         caller identification.
1846
1847         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
1848         agument for GetMarshal and RuntimeMissingSupport.
1849
1850 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
1851
1852         * attribute.cs (ExtractSecurityPermissionSet): Removed
1853         TypeManager.code_access_permission_type.
1854
1855         * typemanager.cs: Removed TypeManager.code_access_permission_type.
1856
1857 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
1858
1859         * expression.cs (LocalVariableReference.DoResolveLValue): Check
1860         for obsolete use of a variable here.   Fixes regression on errors
1861         cs0619-25 and cs0619-26.
1862
1863 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
1864
1865         Fix #62358, implemented security attribute encoding.
1866
1867         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
1868         Tests permitted SecurityAction for assembly or other types.
1869         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
1870         data from SecurityPermissionAttribute to PermisionSet class.
1871
1872         * class.cs (ApplyAttributeBuilder): Added special handling
1873         for System.Security.Permissions.SecurityAttribute based types.
1874
1875         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
1876         special handling for System.Security.Permissions.SecurityAttribute
1877         based types.
1878
1879         * enum.cs (ApplyAttributeBuilder): Added special handling
1880         for System.Security.Permissions.SecurityAttribute based types.
1881
1882         * parameter.cs (ApplyAttributeBuilder): Added special handling
1883         for System.Security.Permissions.SecurityAttribute based types.
1884
1885         * rootcontext.cs: Next 2 core types.
1886
1887         * typemanager.cs (TypeManager.security_permission_attr_type):
1888         Built in type for the SecurityPermission Attribute.
1889         (code_access_permission_type): Build in type.
1890
1891 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
1892
1893         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
1894         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
1895         all of this information into
1896         EmitContext.EmitCapturedVariableInstance.
1897         
1898         * codegen.cs (EmitCapturedVariableInstance): move here the
1899         funcionality of emitting an ldarg.0 in the presence of a
1900         remapping.   This centralizes the instance emit code.
1901
1902         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
1903         then emit a load of this: it means that we have reached the
1904         topmost ScopeInfo: the one that contains the pointer to the
1905         instance of the class hosting the anonymous method.
1906
1907         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
1908         captures to the topmost CaptureContext.
1909
1910 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
1911
1912         * expression.cs (LocalVariableReference): Move the knowledge about
1913         the iterators into codegen's EmitCapturedVariableInstance.
1914
1915 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
1916
1917         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
1918         all code paths return a value from an anonymous method (it is the
1919         same as the 161 error, but for anonymous methods).
1920
1921 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
1922
1923         The introduction of anonymous methods in the compiler changed
1924         various ways of doing things in the compiler.  The most
1925         significant one is the hard split between the resolution phase
1926         and the emission phases of the compiler.
1927
1928         For instance, routines that referenced local variables no
1929         longer can safely create temporary variables during the
1930         resolution phase: they must do so from the emission phase,
1931         since the variable might have been "captured", hence access to
1932         it can not be done with the local-variable operations from the runtime.
1933         
1934         * statement.cs 
1935
1936         (Block.Flags): New flag `IsTopLevel' to indicate that this block
1937         is a toplevel block.
1938
1939         (ToplevelBlock): A new kind of Block, these are the blocks that
1940         are created by the parser for all toplevel method bodies.  These
1941         include methods, accessors and anonymous methods.
1942
1943         These contain some extra information not found in regular blocks:
1944         A pointer to an optional CaptureContext (for tracking captured
1945         local variables and parameters).  A pointer to the parent
1946         ToplevelBlock.
1947         
1948         (Return.Resolve): Catch missmatches when returning a value from an
1949         anonymous method (error 1662).
1950         Invoke NeedReturnLabel from the Resolve phase instead of the emit
1951         phase.
1952
1953         (Break.Resolve): ditto.
1954
1955         (SwitchLabel): instead of defining the labels during the
1956         resolution phase, we now turned the public ILLabel and ILLabelCode
1957         labels into methods called GetILLabelCode() and GetILLabel() that
1958         only define the label during the Emit phase.
1959
1960         (GotoCase): Track the SwitchLabel instead of the computed label
1961         (its contained therein).  Emit the code by using
1962         SwitchLabel.GetILLabelCode ().
1963
1964         (LocalInfo.Flags.Captured): A new flag has been introduce to track
1965         whether the Local has been captured or not.
1966
1967         (LocalInfo.IsCaptured): New property, used to tell whether the
1968         local has been captured.
1969         
1970         * anonymous.cs: Vastly updated to contain the anonymous method
1971         support.
1972
1973         The main classes here are: CaptureContext which tracks any
1974         captured information for a toplevel block and ScopeInfo used to
1975         track the activation frames for various local variables.   
1976
1977         Each toplevel block has an optional capture context associated
1978         with it.  When a method contains an anonymous method both the
1979         toplevel method and the anonymous method will create a capture
1980         context.   When variables or parameters are captured, they are
1981         recorded on the CaptureContext that owns them, for example:
1982
1983         void Demo () {
1984              int a;
1985              MyDelegate d = delegate {
1986                  a = 1;
1987              }
1988         }
1989
1990         Here `a' will be recorded as captured on the toplevel
1991         CapturedContext, the inner captured context will not have anything
1992         (it will only have data if local variables or parameters from it
1993         are captured in a nested anonymous method.
1994
1995         The ScopeInfo is used to track the activation frames for local
1996         variables, for example:
1997
1998         for (int i = 0; i < 10; i++)
1999                 for (int j = 0; j < 10; j++){
2000                    MyDelegate d = delegate {
2001                         call (i, j);
2002                    }
2003                 }
2004
2005         At runtime this captures a single captured variable `i', but it
2006         captures 10 different versions of the variable `j'.  The variable
2007         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
2008         recorded on a child.  
2009
2010         The toplevel ScopeInfo will also track information like the `this'
2011         pointer if instance variables were referenced (this is necessary
2012         as the anonymous method lives inside a nested class in the host
2013         type of the method). 
2014
2015         (AnonymousMethod): Expanded to track the Toplevel, implement
2016         `AnonymousMethod.Compatible' to tell whether an anonymous method
2017         can be converted to a target delegate type. 
2018
2019         The routine now also produces the anonymous method content
2020
2021         (AnonymousDelegate): A helper class that derives from
2022         DelegateCreation, this is used to generate the code necessary to
2023         produce the delegate for the anonymous method that was created. 
2024
2025         * assign.cs: API adjustments for new changes in
2026         Convert.ImplicitStandardConversionExists.
2027
2028         * class.cs: Adjustments to cope with the fact that now toplevel
2029         blocks are of type `ToplevelBlock'. 
2030
2031         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
2032         insteda of standard blocks.
2033
2034         Flag errors if params arguments are passed to anonymous methods.
2035
2036         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
2037         `CurrentAnonymousMethod' which points to the current Anonymous
2038         Method.  The variable points to the AnonymousMethod class that
2039         holds the code being compiled.  It is set in the new EmitContext
2040         created for the anonymous method.
2041
2042         (EmitContext.Phase): Introduce a variable and an enumeration to
2043         assist in enforcing some rules about when and where we are allowed
2044         to invoke certain methods (EmitContext.NeedsReturnLabel is the
2045         only one that enfonces this right now).
2046
2047         (EmitContext.HaveCaptureInfo): new helper method that returns
2048         whether we have a CapturedContext initialized.
2049
2050         (EmitContext.CaptureVariable): New method used to register that a
2051         LocalInfo must be flagged for capturing. 
2052
2053         (EmitContext.CapturedParameter): New method used to register that a
2054         parameters must be flagged for capturing. 
2055         
2056         (EmitContext.CapturedField): New method used to register that a
2057         field must be flagged for capturing. 
2058
2059         (EmitContext.HaveCapturedVariables,
2060         EmitContext.HaveCapturedFields): Return whether there are captured
2061         variables or fields. 
2062
2063         (EmitContext.EmitMethodHostInstance): This is used to emit the
2064         instance for the anonymous method.  The instance might be null
2065         (static methods), this (for anonymous methods that capture nothing
2066         and happen to live side-by-side with the current method body) or a
2067         more complicated expression if the method has a CaptureContext.
2068
2069         (EmitContext.EmitTopBlock): Routine that drives the emission of
2070         code: it will first resolve the top block, then emit any metadata
2071         and then emit the code.  The split is done so that we can extract
2072         any anonymous methods and flag any captured variables/parameters.
2073         
2074         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
2075         during this phase, the ILGenerator should not be used as labels
2076         and local variables declared here might not be accessible to any
2077         code that is part of an anonymous method.  
2078
2079         Exceptions to this include the temporary variables that are
2080         created by some statements internally for holding temporary
2081         variables. 
2082         
2083         (EmitContext.EmitMeta): New routine, in charge of emitting all the
2084         metadata for a cb
2085
2086         (EmitContext.TemporaryReturn): This method is typically called
2087         from the Emit phase, and its the only place where we allow the
2088         ReturnLabel to be defined other than the EmitMeta.  The reason is
2089         that otherwise we would have to duplicate a lot of logic in the
2090         Resolve phases of various methods that today is on the Emit
2091         phase. 
2092
2093         (EmitContext.NeedReturnLabel): This no longer creates the label,
2094         as the ILGenerator is not valid during the resolve phase.
2095
2096         (EmitContext.EmitThis): Extended the knowledge in this class to
2097         work in anonymous methods in addition to iterators. 
2098
2099         (EmitContext.EmitCapturedVariableInstance): This emits whatever
2100         code is necessary on the stack to access the instance to a local
2101         variable (the variable will be accessed as a field).
2102
2103         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
2104         EmitContext.EmitAddressOfParameter): Routines to support
2105         parameters (not completed at this point). 
2106         
2107         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
2108         will also remove the parameters.
2109
2110         * convert.cs (Convert): Define a `ConstantEC' which points to a
2111         null.  This is just to prefity some code that uses
2112         ImplicitStandardConversion code and do not have an EmitContext
2113         handy.
2114
2115         The idea is to flag explicitly that at that point in time, it is
2116         known that the conversion will not trigger the delegate checking
2117         code in implicit conversions (which requires a valid
2118         EmitContext). 
2119
2120         Everywhere: pass new EmitContext parameter since
2121         ImplicitStandardConversionExists now requires it to check for
2122         anonymous method conversions. 
2123
2124         (Convert.ImplicitStandardConversionExists): If the type of an
2125         expression is the anonymous_method_type, and the type is a
2126         delegate, we invoke the AnonymousMethod.Compatible method to check
2127         whether an implicit conversion is possible. 
2128
2129         (Convert.ImplicitConversionStandard): Only do implicit method
2130         group conversions if the language level is not ISO_1.
2131
2132         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
2133         MethodInfo for the Invoke method.  used by Delegate and
2134         AnonymousDelegate.
2135
2136         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
2137         method conversions if the target type is a delegate.
2138
2139         Removed extra debugging nops.
2140
2141         (LocalVariableReference): Turn the `local_info' into a public
2142         field. 
2143
2144         Add `prepared' field, the same hack used for FieldExprs to cope
2145         with composed assignments, as Local variables do not necessarily
2146         operate purely on the stack as they used to: they can be captured
2147         fields. 
2148
2149         Add `temp' for a temporary result, like fields.
2150
2151         Refactor DoResolve and DoResolveLValue into DoResolveBase.
2152
2153         It now copes with Local variables that are captured and emits the
2154         proper instance variable to load it from a field in the captured
2155         case. 
2156
2157         (ParameterReference.DoResolveBase): During the resolve phase,
2158         capture parameters if we are in an anonymous method.
2159
2160         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
2161         anonymous method, use the EmitContext helper routines to emit the
2162         parameter reference.
2163
2164         * iterators.cs: Set RemapToProxy to true/false during the
2165         EmitDispose class.
2166
2167         * parameters.cs (GetParameterByName): New helper method. 
2168
2169         * typemanager.cs (anonymous_method_type) a new type that
2170         represents an anonyous method.  This is always an internal type,
2171         used as a fencepost to test against the anonymous-methodness of an
2172         expression. 
2173         
2174 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
2175
2176         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
2177         561 report.
2178         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
2179
2180 2004-10-18  Martin Baulig  <martin@ximian.com>
2181
2182         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
2183         `Type' directly, but call ResolveType() on it.
2184         (Catch.Resolve): Likewise.
2185         (Foreach.Resolve): Likewise.
2186
2187 2004-10-18  Martin Baulig  <martin@ximian.com>
2188
2189         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
2190         `Type' directly, but call ResolveType() on it.
2191         (Probe.DoResolve): Likewise.
2192         (ArrayCreation.LookupType): Likewise.
2193         (TypeOf.DoResolve): Likewise.
2194         (SizeOf.DoResolve): Likewise.
2195
2196 2004-10-18  Martin Baulig  <martin@ximian.com>
2197
2198         * expression.cs (Invocation.BetterFunction): Put back
2199         TypeManager.TypeToCoreType().
2200
2201 2004-10-18  Raja R Harinath  <rharinath@novell.com>
2202
2203         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
2204         the ResolveType.
2205
2206 2004-10-18  Martin Baulig  <martin@ximian.com>
2207
2208         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
2209         `Type' directly, but call ResolveType() on it.
2210
2211 2004-10-18  Martin Baulig  <martin@ximian.com>
2212
2213         * class.cs (FieldMember.Define): Don't access the TypeExpr's
2214         `Type' directly, but call ResolveType() on it.
2215         (MemberBase.DoDefine): Likewise.
2216
2217         * expression.cs (New.DoResolve): Don't access the TypeExpr's
2218         `Type' directly, but call ResolveType() on it.
2219         (ComposedCast.DoResolveAsTypeStep): Likewise.
2220
2221         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
2222         `Type' directly, but call ResolveType() on it.
2223
2224 2004-10-17  John Luke  <john.luke@gmail.com>
2225
2226         * class.cs (Operator.GetSignatureForError): use CSharpName
2227
2228         * parameter.cs (Parameter.GetSignatureForError): Returns
2229         correct name even if was not defined.
2230
2231 2004-10-13  Raja R Harinath  <rharinath@novell.com>
2232
2233         Fix #65816.
2234         * class.cs (TypeContainer.EmitContext): New property.
2235         (DefineNestedTypes): Create an emitcontext for each part.
2236         (MethodCore.DoDefineParameters): Use container's emitcontext.
2237         Pass type array to InternalParameters.
2238         (MemberBase.DoDefine): Use container's emitcontext.
2239         (FieldMember.Define): Likewise.
2240         (Event.Define): Likewise.
2241         (SetMethod.GetParameterInfo): Change argument to EmitContext.
2242         Pass type array to InternalParameters.
2243         (SetIndexerMethod.GetParameterInfo): Likewise.
2244         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
2245         * delegate.cs (Define): Pass emitcontext to
2246         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
2247         array to InternalParameters.
2248         * expression.cs (ParameterReference.DoResolveBase): Pass
2249         emitcontext to GetParameterInfo.
2250         (ComposedCast.DoResolveAsTypeStep): Remove check on
2251         ec.ResolvingTypeTree.
2252         * parameter.cs (Parameter.Resolve): Change argument to
2253         EmitContext.  Use ResolveAsTypeTerminal.
2254         (Parameter.GetSignature): Change argument to EmitContext.
2255         (Parameters.ComputeSignature): Likewise.
2256         (Parameters.ComputeParameterTypes): Likewise.
2257         (Parameters.GetParameterInfo): Likewise.
2258         (Parameters.ComputeAndDefineParameterTypes): Likewise.
2259         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
2260         * support.cs (InternalParameters..ctor): Remove variant that takes
2261         a DeclSpace.
2262         * typemanager.cs (system_intptr_expr): New.
2263         (InitExpressionTypes): Initialize it.
2264
2265 2004-10-12  Chris Toshok  <toshok@ximian.com>
2266
2267         * cs-parser.jay: fix location for try_statement and catch_clause.
2268
2269 2004-10-11  Martin Baulig  <martin@ximian.com>
2270
2271         * report.cs: Don't make --fatal abort on warnings, we have
2272         -warnaserror for that.
2273
2274 2004-10-07  Raja R Harinath  <rharinath@novell.com>
2275
2276         More DeclSpace.ResolveType avoidance.
2277         * decl.cs (MemberCore.InUnsafe): New property.
2278         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
2279         with newly created EmitContext.
2280         (FieldMember.Define): Likewise.
2281         * delegate.cs (Delegate.Define): Likewise.
2282         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
2283         only if normal name-lookup fails.
2284         (TypeExpr.DoResolve): Enable error-checking.
2285         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
2286         (SizeOf.DoResolve): Likewise.
2287         (ComposedCast.DoResolveAsTypeStep): Likewise.
2288         (StackAlloc.DoResolve): Likewise.
2289         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
2290         (Block.Unsafe): New property.
2291         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
2292         (Unsafe): Set 'unsafe' flag of contained block.
2293         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
2294         (Fixed.Resolve): Likewise.
2295         (Catch.Resolve): Likewise.
2296         (Using.ResolveLocalVariableDecls): Likewise.
2297         (Foreach.Resolve): Likewise.
2298
2299 2004-10-05  John Luke <john.luke@gmail.com>
2300
2301         * cs-parser.jay: add location to error CS0175
2302
2303 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
2304
2305         * ecore.cs (Expression.Constantity): Add support for turning null
2306         into a constant.
2307
2308         * const.cs (Const.Define): Allow constants to be reference types
2309         as long as the value is Null.
2310
2311 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
2312
2313         * namespace.cs (NamespaceEntry.Using): No matter which warning
2314         level is set, check if this namespace name has already been added.
2315
2316 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
2317
2318         * expression.cs: reftype [!=]= null should always use br[true,false].
2319         # 67410
2320
2321 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
2322
2323         Fix #67108
2324         * attribute.cs: Enum conversion moved to 
2325         GetAttributeArgumentExpression to be applied to the all
2326         expressions.
2327
2328 2004-10-01  Raja R Harinath  <rharinath@novell.com>
2329
2330         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
2331         * class.c (TypeContainer.DefineType): Flag error if
2332         base types aren't accessible due to access permissions.
2333         * decl.cs (DeclSpace.ResolveType): Move logic to
2334         Expression.ResolveAsTypeTerminal.
2335         (DeclSpace.ResolveTypeExpr): Thin layer over
2336         Expression.ResolveAsTypeTerminal.
2337         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
2338         Refactor code into NestedAccess.  Use it.
2339         (DeclSpace.NestedAccess): New.
2340         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
2341         argument to silence errors.  Check access permissions.
2342         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
2343         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
2344         (Cast.DoResolve): Likewise.
2345         (New.DoResolve): Likewise.
2346         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
2347         (TypeOf.DoResolve): Likewise.
2348
2349         * expression.cs (Invocation.BetterConversion): Return the Type of
2350         the better conversion.  Implement section 14.4.2.3 more faithfully.
2351         (Invocation.BetterFunction): Make boolean.  Make correspondence to
2352         section 14.4.2.2 explicit.
2353         (Invocation.OverloadResolve): Update.
2354         (Invocation): Remove is_base field.
2355         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
2356         (Invocation.Emit): Likewise.
2357
2358 2004-09-27  Raja R Harinath  <rharinath@novell.com>
2359
2360         * README: Update to changes.
2361
2362 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
2363
2364         * cs-parser.jay: Reverted 642 warning fix.
2365
2366 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2367
2368         Fix bug #66615
2369         * decl.cs (FindMemberWithSameName): Indexer can have more than
2370         1 argument.
2371
2372 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2373
2374         * expression.cs (LocalVariableReference.DoResolveLValue):
2375         Do not report warning 219 for out values.
2376         (EmptyExpression.Null): New member to avoid extra allocations.
2377
2378 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2379
2380         * cs-parser.jay: Fix wrong warning 642 report.
2381
2382         * cs-tokenizer.cs (CheckNextToken): New helper;
2383         Inspect next character if is same as expected.
2384
2385 2004-09-23  Martin Baulig  <martin@ximian.com>
2386
2387         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
2388         (Convert.ImplicitReferenceConversionExists): Likewise.
2389
2390 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
2391
2392         * class.cs (Operator.Define): Add error 448 and 559 report.
2393
2394 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2395
2396         * class.cs (MemberBase.IsTypePermitted): New protected
2397         method for checking error CS0610.
2398
2399 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2400
2401         * class.cs (TypeContainer.HasExplicitLayout): New property
2402         Returns whether container has StructLayout attribute set Explicit.
2403         (FieldMember): New abstract class for consts and fields.
2404         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
2405         (Field): Reuse FieldMember.
2406
2407         * const.cs (Const): Reuse FieldMember.
2408
2409         * rootcontext.cs: EmitConstants call moved to class.
2410
2411 2004-09-22  Martin Baulig  <martin@ximian.com>
2412
2413         Thanks to Peter Sestoft for this bug report.
2414
2415         * expression.cs (Conditional): If both the `trueExpr' and the
2416         `falseExpr' is a NullLiteral, return a NullLiteral.
2417
2418 2004-09-22  Martin Baulig  <martin@ximian.com>
2419
2420         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
2421         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
2422         for the "get_Current" call.
2423
2424 2004-09-22  Martin Baulig  <martin@ximian.com>
2425
2426         Marek and me just fixed one of our oldest bugs: #28562 :-)
2427
2428         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
2429
2430         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
2431         we're an EnumConstant, just return that.
2432         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
2433         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
2434         to get the value which'll actually be written into the attribute.
2435         However, we have to use GetValue() to access the attribute's value
2436         in the compiler.        
2437
2438 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
2439
2440         * constant.cs (Constant.IsNegative): New abstract property
2441         IsNegative.
2442
2443         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
2444         (StackAlloc.DoResolve): Reused IsNegative.
2445
2446 2004-09-21  Martin Baulig  <martin@ximian.com>
2447
2448         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
2449         if we're used in an iterator, we may be called from different
2450         methods.
2451
2452         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
2453         we actually have an exception block.
2454
2455 2004-09-20  John Luke <jluke@cfl.rr.com>
2456
2457         * class.cs, cs-parser.jay: Improve the error report for 1520:
2458         report the actual line where the error happens, not where the
2459         class was declared.
2460
2461         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
2462         Pass location information that was available elsewhere.
2463
2464 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
2465
2466         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
2467         runtime to delay sign assemblies.
2468
2469 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
2470
2471         * cs-parser.jay: Do not report the stack trace, this is barely
2472         used nowadays.
2473
2474 2004-08-22  John Luke  <john.luke@gmail.com>
2475  
2476         * driver.cs : check that a resource id is not already used
2477         before adding it, report CS1508 if it is, bug #63637
2478
2479 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
2480
2481         * ecore.cs: Removed dead code.
2482
2483 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
2484
2485         * class.cs: Do not report warning CS0067 on the interfaces.
2486
2487 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
2488
2489         * cs-parser.jay: Add error 504 report.
2490
2491 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
2492
2493         * rootcontext.cs: WarningLevel is 4 by default now.
2494
2495         * statement.cs (Fixed.Resolve): Do not null
2496         VariableInfo.
2497
2498 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
2499
2500         Fixed bug #55780
2501         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
2502         deep search when property is not virtual.
2503         (PropertyExpr.ResolveAccessors): Make one call for both
2504         accessors.
2505
2506 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
2507
2508         Fixed bug #65766
2509         * statement.cs: Error 152 report constains also location.
2510
2511 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
2512
2513         Fixed bug #65766
2514         * const.cs: Explicitly set constant as static.
2515
2516 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
2517
2518         Fixed bug #64226
2519         * cs-parser.jay: Add error 1017 report.
2520
2521 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
2522
2523         Fixed bug #59980, #64224
2524         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
2525
2526         * typemanager.cs (IsSpecialMethod): Simplified
2527
2528 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
2529
2530         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
2531         condition with better params.
2532
2533 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
2534
2535         Fixed bug #65238
2536         * attribute.cs (Resolve): Property has to have both
2537         accessors.
2538
2539 2004-09-14  Martin Baulig  <martin@ximian.com>
2540
2541         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
2542
2543 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
2544
2545         Fixed bug #61902
2546         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
2547         called and is obsolete then this member suppress message
2548         when call is inside next [Obsolete] method or type.
2549
2550         * expression.cs: Use TestObsoleteMethodUsage member.
2551
2552 2004-09-14  Martin Baulig  <martin@ximian.com>
2553
2554         * cs-parser.jay: Sync a bit with the GMCS version.
2555
2556 2004-09-14  Martin Baulig  <martin@ximian.com>
2557
2558         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
2559         (CSharpParser.yacc_verbose_flag): New public field.
2560
2561         * genericparser.cs: Removed.
2562
2563 2004-09-14  Raja R Harinath  <rharinath@novell.com>
2564
2565         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
2566
2567 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
2568
2569         * class.cs (MethodCore.CheckBase): Fix bug #65757.
2570
2571 2004-09-10  Martin Baulig  <martin@ximian.com>
2572
2573         Backported my MemberName changes from GMCS into MCS.
2574
2575         - we are now using a special `MemberName' class instead of using
2576         strings; in GMCS, the `MemberName' also contains the type
2577         arguments.
2578
2579         - changed the grammar rules a bit:
2580           * the old `member_name' is now a `namespace_or_type_name':
2581             The rule is that we use `namespace_or_type_name' everywhere
2582             where we expect either a "member name" (GetEnumerator) or a
2583             "member name" with an explicit interface name
2584             (IEnumerable.GetEnumerator).
2585             In GMCS, the explicit interface name may include type arguments
2586             (IEnumerable<T>.GetEnumerator).
2587           * we use `member_name' instead of just `IDENTIFIER' for
2588             "member names":
2589             The rule is that we use `member_name' wherever a member may
2590             have type parameters in GMCS.       
2591
2592         * decl.cs (MemberName): New public class.
2593         (MemberCore.MemberName): New public readonly field.
2594         (MemberCore.ctor): Take a `MemberName' argument, not a string.
2595         (DeclSpace): Likewise.
2596
2597         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
2598         * enum.cs (Enum.ctor): Likewise.
2599
2600         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
2601         MemberName.     
2602         (AliasEntry.ctor): Take a MemberName, not an Expression.
2603         (AliasEntry.UsingAlias): Likewise.
2604
2605         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
2606         (IMethodData.MemberName): Changed type from string to MemberName.
2607         (MemberBase.ExplicitInterfaceName): Likewise.
2608         (AbstractPropertyEventMethod.SetupName): Make this private.
2609         (AbstractPropertyEventMethod.ctor): Added `string prefix'
2610         argument; compute the member name here.
2611         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
2612         on the `member.MemberName' and the `prefix'.
2613
2614         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
2615         not `type_name'.
2616         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
2617         thus, we get a `MemberName' instead of a `string'.  These
2618         declarations may have type parameters in GMCS.
2619         (interface_method_declaration, delegate_declaration): Likewise.
2620         (class_declaration, interface_declaration): Likewise.
2621         (method_header): Use `namespace_or_type_name' instead of
2622         `member_name'.  We may be an explicit interface implementation.
2623         (property_declaration, event_declaration): Likewise.
2624         (member_name): This is now just an `IDENTIFIER', not a
2625         `namespace_or_type_name'.
2626         (type_name, interface_type): Removed.
2627         (namespace_or_type_name): Return a MemberName, not an Expression.
2628         (primary_expression): Use `member_name' instead of `IDENTIFIER';
2629         call GetTypeExpression() on the MemberName to get an expression.
2630         (IndexerDeclaration.interface_type): Changed type from string to
2631         MemberName.
2632         (MakeName): Operate on MemberName's instead of string's.
2633
2634 2004-09-13  Raja R Harinath  <rharinath@novell.com>
2635
2636         Fix bug #55770.
2637         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
2638         (NamespaceEntry.Lookup): Add new argument to flag if we want the
2639         lookup to avoid symbols introduced by 'using'.
2640         * rootcontext.cs (NamespaceLookup): Update.
2641
2642 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
2643
2644         * class.cs (TypeContainer.DoDefineMembers): Do not call
2645         DefineDefaultConstructor for static classes.
2646
2647 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
2648
2649         * attribute.cs (Attribute.Resolve): Add error 653 report.
2650
2651         * class.cs (Class.ApplyAttributeBuilder): Add error 641
2652         report.
2653         (Method.ApplyAttributeBuilder): Add error 685 report.
2654         (Operator.Define): Add error 564 report.
2655
2656         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
2657
2658         * expression.cs (Invocation.DoResolve): Add error
2659         245 and 250 report.
2660
2661         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
2662         error 674 report.
2663
2664 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2665
2666         * class.cs (ConstructorInitializer.Resolve):
2667         Wrong error number (515->516).
2668
2669 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2670
2671         * class.cs (Indexer.Define): Add error 631 report.
2672
2673 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2674
2675         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
2676
2677 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
2678
2679         * expression.cs (Probe.DoResolve): Add error CS0241 report.
2680
2681 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
2682
2683         * cs-parser.jay: Added error CS0241 report.
2684
2685 2004-09-10  Raja R Harinath  <rharinath@novell.com>
2686
2687         * cs-parser.jay (fixed_statement): Introduce a scope for the
2688         declaration in the 'fixed' statement.
2689
2690 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2691
2692         * cs-parser.jay: Added CS0230 error report.
2693
2694 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2695
2696         * cs-parser.jay: Added errors CS0231 and CS0257 report.
2697
2698 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2699
2700         * expression.cs (Argument.Resolve): Added error CS0192 and
2701         CS0199 report.
2702
2703 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
2704
2705         C# 2.0 #pragma warning feature
2706
2707         * cs-tokenizer.cs (PreProcessPragma): New method; 
2708         Handles #pragma directive.
2709
2710         * report.cs (WarningRegions): New class; Support
2711         class for #pragma warning directive. It tests whether
2712         warning is enabled for a given line.
2713
2714 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
2715
2716         * const.cs: Add more descriptive error report, tahnks to
2717         Sebastien. 
2718
2719 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
2720
2721         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
2722
2723 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
2724
2725         * expression.cs: Apply patch from Ben: Remove dead code from
2726         ArrayCreation, and remove the TurnintoConstant call in const.cs,
2727         as that code just threw an exception anwyays.
2728
2729         * const.cs: Remove the call to the turnintoconstant, for details
2730         see bug: #63144
2731         
2732         * literal.cs: The type of the null-literal is the null type;  So
2733         we use a placeholder type (literal.cs:System.Null, defined here)
2734         for it.
2735
2736         * expression.cs (Conditional.DoResolve): Remove some old code that
2737         is no longer needed, conversions have been fixed.
2738
2739         (ArrayCreationExpression.DoResolve): Return false if we fail to
2740         resolve the inner expression.
2741
2742 2004-09-07  Raja R Harinath  <rharinath@novell.com>
2743
2744         Fix test-290.cs.
2745         * cs-parser.jay (delegate_declaration): Record a delegate
2746         declaration as a type declaration.
2747         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
2748
2749 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
2750
2751         * parameter.cs: Do not crash if the type can not be resolved. 
2752
2753         * expression.cs: Report errors with unsafe pointers, fixes #64896
2754
2755 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
2756
2757         * expression.cs: Pointer arith always needs to do a conv.i
2758         if the operand is a long. fix 65320
2759
2760 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2761
2762         Fixed cs0619-37.cs, cs0619-38.cs
2763
2764         * enum.cs (GetObsoleteAttribute): Removed.
2765
2766         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
2767         on Enum member is double staged. The first is tested member
2768         and then enum.
2769
2770 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
2771
2772         Fixed #56986, #63631, #65231
2773
2774         * class.cs: (TypeContainer.AddToMemberContainer): New method,
2775         adds member to name container.
2776         (TypeContainer.AddToTypeContainer): New method, adds type to
2777         name container.
2778         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
2779         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
2780         AddOperator): Simplified by reusing AddToMemberContainer.
2781         (TypeContainer.UserDefinedStaticConstructor): Changed to property
2782         instead of field.
2783         (Method.CheckForDuplications): Fixed implementation to test all
2784         possibilities.
2785         (MemberBase): Detection whether member is explicit interface
2786         implementation is now in constructor.
2787         (MemberBase.UpdateMemberName): Handles IndexerName.
2788         (Accessor): Changed to keep also location information.
2789         (AbstractPropertyEventMethod): Is derived from MemberCore.
2790         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
2791         will be emited or not.
2792         (PropertyBase.AreAccessorsDuplicateImplementation):
2793         Tests whether accessors are not in collision with some method.
2794         (Operator): Is derived from MethodCore to simplify common
2795         operations.
2796
2797         * decl.cs (Flags.TestMethodDuplication): Test for duplication
2798         must be performed.
2799         (DeclSpace.AddToContainer): Adds the member to defined_names
2800         table. It tests for duplications and enclosing name conflicts.
2801
2802         * enum.cs (EnumMember): Clean up to reuse the base structures
2803
2804 2004-09-03  Martin Baulig  <martin@ximian.com>
2805
2806         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
2807         into TypeContainer, to make partial classes work again.
2808
2809 2004-09-03  Martin Baulig  <martin@ximian.com>
2810
2811         * rootcontext.cs (RootContext.V2): Removed.
2812
2813 2004-03-23  Martin Baulig  <martin@ximian.com>
2814
2815         * expression.cs (Invocation.OverloadResolve): Added `bool
2816         may_fail' argument and use it instead of the Location.IsNull() hack.
2817
2818 2004-09-03  Martin Baulig  <martin@ximian.com>
2819
2820         Merged latest changes into gmcs.  Please keep this comment in
2821         here, it makes it easier for me to see what changed in MCS since
2822         the last time I merged.
2823
2824 2004-09-03  Raja R Harinath  <rharinath@novell.com>
2825
2826         Fix #61128.
2827         * expression.cs (BetterConversion): Don't allow either conversion 
2828         to be null.  Remove redundant implicit conversion test when 'q ==
2829         null' -- when this function is invoked, we already know that the
2830         implicit conversion exists.
2831         (BetterFunction): Assume that 'best' is non-null.  Remove
2832         redundant reimplementation of IsApplicable when 'best' is null.
2833         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
2834         number of arguments.
2835         (IsAncestralType): Extract from OverloadResolve.
2836         (OverloadResolve): Make robust to the MethodGroupExpr being
2837         unsorted.  Implement all the logic of Section 14.5.5.1, and
2838         support overloading of methods from multiple applicable types.
2839         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
2840
2841         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
2842         (RealError, Warning): Append type of report to related symbol.
2843
2844 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
2845
2846         * enum.cs: Fixed CLS-Compliance checks for enum members.
2847         Error tests cs3008-8.cs, cs3014-8.cs
2848
2849 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
2850
2851         Fixed bug #62342, #63102
2852         * class.cs: ImplementIndexer uses member.IsExplicitImpl
2853         like ImplementMethod.
2854
2855 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
2856
2857         * attribute.cs (Attribute.GetAttributeArgumentExpression):
2858         Fixed bug #65170.
2859
2860 2004-09-02  Martin Baulig  <martin@ximian.com>
2861
2862         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
2863         TypeManager.GetArgumentTypes() rather than calling GetParameters()
2864         on the MethodBase.
2865
2866 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
2867
2868         C# 2.0 Static classes implemented
2869
2870         * class.cs (TypeContainer): instance_constructors,
2871         initialized_fields, initialized_static_fields,
2872         default_constructor, base_inteface_types are protected to be
2873         accessible from StaticClass.
2874         (TypeContainer.DefineDefaultConstructor): New virtual method
2875         for custom default constructor generating
2876         (StaticClass): New class to handle "Static classes" feature.
2877
2878         * cs-parser.jay: Handle static keyword on class like instance
2879         of StaticClass.
2880
2881         * driver.cs: Added "/langversion" command line switch with two
2882         options (iso-1, default).
2883
2884 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
2885
2886         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
2887
2888 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
2889
2890         * delegate.cs: Style.
2891
2892 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
2893
2894         * delegate.cs: Add seperate instance expr field for miguel.
2895
2896 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
2897
2898         * PointerArithmetic (Resolve): make sure we are not doing
2899         pointer arith on void*. Also, make sure we are resolved
2900         by not setting eclass until resolve.
2901
2902         All callers: Make sure that PointerArithmetic gets resolved.
2903
2904 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
2905
2906         * ArrayCreation (LookupType): If the type does not resolve 
2907         to an array, give an error.
2908
2909 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
2910
2911         * statement.cs (Try.Resolve): Fixed bug #64222
2912
2913 2004-08-27  Martin Baulig  <martin@ximian.com>
2914
2915         * class.cs
2916         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
2917         crash here.     
2918
2919 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
2920
2921         * ecore.cs (Constantify): Get underlying type via
2922         System.Enum.GetUnderlyingType to avoid StackOverflow on the
2923         Windows in special cases.
2924
2925 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
2926
2927         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
2928         for obtaining also private methods.
2929         (GetRemoveMethod): Used GetRemoveMethod (true)
2930         for obtaining also private methods.
2931
2932 2004-08-24  Martin Baulig  <martin@ximian.com>
2933
2934         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
2935         MethodAttributes.HideBySig for operators.
2936
2937 2004-08-23  Martin Baulig  <martin@ximian.com>
2938
2939         Back to the old error reporting system :-)
2940
2941         * report.cs (Message): Removed.
2942         (Report.MessageData, ErrorData, WarningData): Removed.
2943         (Report.Error, Warning): Back to the old system.
2944
2945 2004-08-23  Martin Baulig  <martin@ximian.com>
2946
2947         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
2948
2949         * class.cs (TypeContainer.ParentContainer): New public virtual
2950         method; replaces the explicit interface implementation.
2951         (ClassPart.ParentContainer): Override.
2952
2953 2004-08-23  Martin Baulig  <martin@ximian.com>
2954
2955         * statement.cs (Switch): Added support for constant switches; see
2956         #59428 or test-285.cs.
2957
2958 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
2959
2960         Fixed bug #62740.
2961         * statement.cs (GetEnumeratorFilter): Removed useless
2962         logic because C# specs is strict. GetEnumerator must be
2963         public.
2964
2965 2004-08-22  Martin Baulig  <martin@ximian.com>
2966
2967         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
2968         a switch and may break, reset the barrier.  Fixes #59867.
2969
2970 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
2971
2972         CLS-Compliance speed up (~5% for corlib)
2973
2974         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
2975         New method. Tests container for CLS-Compliant names
2976
2977         * class.cs (TypeContainer.VerifyClsName): New method.
2978         Checks whether container name is CLS Compliant.
2979         (Constructor): Implements IMethodData.
2980
2981         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
2982         low-case table for CLS Compliance test.
2983         (MemberCache.VerifyClsParameterConflict): New method.
2984         Checks method parameters for CS3006 error.
2985
2986         * enum.cs (EnumMember): Is derived from MemberCore.
2987         (Enum.VerifyClsName): Optimized for better performance.
2988
2989 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
2990
2991         * report.cs: Renamed Error_T to Error and changed all
2992         references.
2993
2994 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
2995
2996         * class.cs (TypeContainer.IndexerArrayList): New inner class
2997         container for indexers.
2998         (TypeContainer.DefaultIndexerName): New constant for default
2999         indexer name. Replaced all "Item" with this constant.
3000         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
3001
3002         * typemanager.cs (TypeManager.default_member_ctor): Cache here
3003         DefaultMemberAttribute constructor.
3004
3005 2004-08-05  Martin Baulig  <martin@ximian.com>
3006
3007         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
3008         Fix bug #59429.
3009
3010 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
3011
3012         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
3013         multi platforms problem.
3014
3015         * compiler.csproj: Included shared files.
3016
3017 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
3018
3019         Fix bug 60333, 55971 in the more general way
3020         * attribute.cs (Attribute.GetAttributeArgumentExpression):
3021         Added arg_type argument for constant conversion.
3022         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
3023
3024 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
3025
3026         Fix bug #59760
3027         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
3028         OperatorArrayList, MethodCoreArrayList for typecontainer
3029         containers. Changed class member types to these new types.
3030         (MethodArrayList.DefineMembers): Added test for CS0659.
3031
3032 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
3033
3034         * cfold.cs: Synchronize the folding with the code in expression.cs
3035         Binary.DoNumericPromotions for uint operands.
3036
3037         * attribute.cs: Revert patch from Raja, it introduced a regression
3038         while building Blam-1.2.1 (hard to isolate a test case).
3039
3040 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
3041
3042         Fix for #55382
3043         * class.cs:
3044         (TypeContainer.Define): Renamed to DefineContainerMembers because of
3045         name collision.
3046         (MethodCore.parent_method): New member. The method we're overriding
3047         if this is an override method.
3048         (MethodCore.CheckBase): Moved from Method class and made common.
3049         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
3050         private.
3051         (MethodCore.CheckForDuplications): New abstract method. For custom
3052         member duplication search in a container
3053         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
3054         method and its return type.
3055         (Event.conflict_symbol): New member. Symbol with same name in the
3056         parent class.
3057
3058         * decl.cs:
3059         (MemberCache.FindMemberWithSameName): New method. The method
3060         is looking for conflict with inherited symbols.
3061
3062 2004-08-04  Martin Baulig  <martin@ximian.com>
3063
3064         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
3065
3066         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
3067
3068 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
3069
3070         * report.cs (Message): New enum for better error, warning reference in
3071         the code.
3072         (MessageData): New inner abstract class. It generally handles printing of
3073         error and warning messages.
3074         Removed unused Error, Warning, Message methods.
3075
3076 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
3077
3078         Fix for cs0592-8.cs test
3079         * attribute.cs
3080         (Attributable.ValidAttributeTargets): Made public.
3081         (Attribute.ExplicitTarget): New member for explicit target value.
3082         (Attribute.CheckTargets): Now we translate explicit attribute
3083         target to Target here.
3084
3085 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
3086
3087         * ecore.cs (MethodGroupExpr): new IsBase property.
3088
3089         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
3090
3091         * delegate.cs (DelegateCreation): store a MethodGroupExpr
3092         rather than an instance expr.
3093
3094         (DelegateCreation.Emit): Use the method group rather than
3095         the instance expression. Also, if you have base.Foo as the
3096         method for a delegate, make sure to emit ldftn, not ldftnvirt.
3097
3098         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
3099
3100         (NewDelegate.DoResolve): Only check for the existance of Invoke
3101         if the method is going to be needed. Use MethodGroupExpr.
3102
3103         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
3104
3105         * expression.cs: For pointer arith., make sure to use
3106         the size of the type, not the size of the pointer to
3107         the type.
3108
3109 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
3110
3111         Fix for #60722
3112         * class.cs (Class): Added error CS0502 test.
3113
3114 2004-08-03  John Luke  <jluke@cfl.rr.com>
3115             Raja R Harinath  <rharinath@novell.com>
3116
3117         Fix for #60997.
3118         * attribute.cs (Attribute.complained_before): New flag.
3119         (Attribute.ResolveType, Attribute.Resolve),
3120         (Attribute.DefinePInvokeMethod): Set it.
3121         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
3122         
3123 2004-08-03  Martin Baulig  <martin@ximian.com>
3124
3125         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
3126         use a user-defined operator; we still need to do numeric
3127         promotions in case one argument is a builtin type and the other
3128         one has an implicit conversion to that type.  Fixes #62322.
3129
3130 2004-08-02  Martin Baulig  <martin@ximian.com>
3131
3132         * statement.cs (LocalInfo.Flags): Added `IsThis'.
3133         (LocalInfo.IsThis): New public property.
3134         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
3135
3136 2004-08-01  Martin Baulig  <martin@ximian.com>
3137
3138         * class.cs (TypeContainer.GetClassBases): Don't set the default
3139         here since we may get called from GetPartialBases().
3140         (TypeContainer.DefineType): If GetClassBases() didn't return a
3141         parent, use the default one.
3142
3143 2004-07-30  Duncan Mak  <duncan@ximian.com>
3144
3145         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
3146
3147 2004-07-30  Martin Baulig  <martin@ximian.com>
3148
3149         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
3150
3151         * class.cs (SourceMethod): New public class, derive from the
3152         symbol writer's ISourceMethod.
3153         (Method): Use the new symbol writer API.
3154
3155         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
3156         as argument and use the new symbol writer.
3157
3158         * location.cs
3159         (SourceFile): Implement the symbol writer's ISourceFile.
3160         (Location.SymbolDocument): Removed.
3161         (Location.SourceFile): New public property.
3162
3163         * symbolwriter.cs: Use the new symbol writer API.
3164
3165 2004-07-30  Raja R Harinath  <rharinath@novell.com>
3166
3167         * Makefile (install-local): Remove.  Functionality moved to
3168         executable.make.
3169
3170 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
3171
3172         * Makefile: Install mcs.exe.config file together with mcs.exe.
3173         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
3174         correct runtime version.
3175         
3176 2004-07-25  Martin Baulig  <martin@ximian.com>
3177
3178         * class.cs
3179         (TypeContainer.RegisterOrder): Removed, this was unused.
3180         (TypeContainer, interface_order): Removed.
3181         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
3182         TypeContainer as argument since we can also be called with a
3183         `PartialContainer' for a partial class/struct/interface.
3184         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
3185         of checking whether we're an `Interface' - we could be a
3186         `PartialContainer'.
3187         (PartialContainer.Register): Override; call
3188         AddClass()/AddStruct()/AddInterface() on our parent.
3189
3190         * cs-parser.jay (interface_member_declaration): Add things to the
3191         `current_container', not the `current_class'.
3192
3193         * rootcontext.cs (RegisterOrder): The overloaded version which
3194         takes an `Interface' was unused, removed.
3195
3196         * typemanager.cs (TypeManager.LookupInterface): Return a
3197         `TypeContainer', not an `Interface'.
3198         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
3199         contain a `PartialContainer' for an interface, so check it's
3200         `Kind' to figure out what it is.
3201
3202 2004-07-25  Martin Baulig  <martin@ximian.com>
3203
3204         * class.cs (Class.DefaultTypeAttributes): New public constant.
3205         (Struct.DefaultTypeAttributes): Likewise.
3206         (Interface.DefaultTypeAttributes): Likewise.
3207         (PartialContainer.TypeAttr): Override this and add the
3208         DefaultTypeAttributes.
3209
3210 2004-07-25  Martin Baulig  <martin@ximian.com>
3211
3212         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
3213         we can just use the `Parent' field instead.
3214
3215 2004-07-25  Martin Baulig  <martin@ximian.com>
3216
3217         * class.cs (TypeContainer.Emit): Renamed to EmitType().
3218
3219 2004-07-25  Martin Baulig  <martin@ximian.com>
3220
3221         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
3222         our parts before defining any methods.
3223         (TypeContainer.VerifyImplements): Make this virtual.
3224         (ClassPart.VerifyImplements): Override and call VerifyImplements()
3225         on our PartialContainer.
3226
3227 2004-07-25  Martin Baulig  <martin@ximian.com>
3228
3229         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
3230
3231         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
3232         argument, we can just use the `Parent' field instead.
3233
3234         * class.cs
3235         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
3236         (MemberBase.DoDefine): Likewise.
3237
3238 2004-07-24  Martin Baulig  <martin@ximian.com>
3239
3240         * decl.cs (MemberCore.Parent): New public field.
3241         (DeclSpace.Parent): Moved to MemberCore.
3242
3243         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
3244         (MemberBase.ctor): Added TypeContainer argument, pass it to our
3245         parent's .ctor.
3246         (FieldBase, Field, Operator): Likewise.
3247         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
3248         (EventField, Event): Likewise.
3249
3250 2004-07-23  Martin Baulig  <martin@ximian.com>
3251
3252         * class.cs (PartialContainer): New public class.
3253         (ClassPart): New public class.
3254         (TypeContainer): Added support for partial classes.
3255         (TypeContainer.GetClassBases): Splitted some of the functionality
3256         out into GetNormalBases() and GetPartialBases().
3257
3258         * cs-tokenizer.cs (Token.PARTIAL): New token.
3259         (Tokenizer.consume_identifier): Added some hacks to recognize
3260         `partial', but only if it's immediately followed by `class',
3261         `struct' or `interface'.
3262
3263         * cs-parser.jay: Added support for partial clases.
3264
3265 2004-07-23  Martin Baulig  <martin@ximian.com>
3266
3267         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
3268         a `DeclSpace' and also made it readonly.
3269         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
3270         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
3271         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
3272
3273         * cs-parser.jay: Pass the `current_class', not the
3274         `current_container' (at the moment, this is still the same thing)
3275         to a new Method, Property, Event, Indexer or Constructor.
3276
3277 2004-07-23  Martin Baulig  <martin@ximian.com>
3278
3279         * cs-parser.jay (CSharpParser): Added a new `current_class' field
3280         and removed the `current_interface' one.
3281         (struct_declaration, class_declaration, interface_declaration):
3282         Set `current_class' to the newly created class/struct/interface;
3283         set their `Bases' and call Register() before parsing their body.
3284
3285 2004-07-23  Martin Baulig  <martin@ximian.com>
3286
3287         * class.cs (Kind): New public enum.
3288         (TypeContainer): Made this class abstract.
3289         (TypeContainer.Kind): New public readonly field.
3290         (TypeContainer.CheckDef): New public method; moved here from
3291         cs-parser.jay.
3292         (TypeContainer.Register): New public abstract method.
3293         (TypeContainer.GetPendingImplementations): New public abstract
3294         method.
3295         (TypeContainer.GetClassBases): Removed the `is_class' and
3296         `is_iface' parameters.
3297         (TypeContainer.DefineNestedTypes): Formerly known as
3298         DoDefineType().
3299         (ClassOrStruct): Made this class abstract.
3300
3301         * tree.cs (RootTypes): New public type. 
3302
3303 2004-07-20  Martin Baulig  <martin@ximian.com>
3304
3305         * tree.cs (Tree.RecordNamespace): Removed.
3306         (Tree.Namespaces): Removed.
3307
3308         * rootcontext.cs (RootContext.IsNamespace): Removed.
3309
3310         * cs-parser.jay (namespace_declaration): Just create a new
3311         NamespaceEntry here.
3312
3313 2004-07-20  Martin Baulig  <martin@ximian.com>
3314
3315         * statement.cs (ExceptionStatement): New abstract class.  This is
3316         now used as a base class for everyone who's using `finally'.
3317         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
3318         our local variables before using them.
3319
3320         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
3321         virtual method.  This is used by Yield.Resolve() to "steal" an
3322         outer block's `finally' clauses.
3323         (FlowBranchingException): The .ctor now takes an ExceptionStatement
3324         argument.
3325
3326         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
3327         version which takes an ExceptionStatement.  This version must be
3328         used to create exception branchings.
3329
3330         * iterator.cs
3331         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
3332         (Iterator.EmitMoveNext): Added exception support; protect the
3333         block with a `fault' clause, properly handle 'finally' clauses.
3334         (Iterator.EmitDispose): Run all the `finally' clauses here.
3335
3336 2004-07-20  Martin Baulig  <martin@ximian.com>
3337
3338         * iterator.cs: This is the first of a set of changes in the
3339         iterator code.  Match the spec more closely: if we're an
3340         IEnumerable, then GetEnumerator() must be called.  The first time
3341         GetEnumerator() is called, it returns the current instance; all
3342         subsequent invocations (if any) must create a copy.
3343
3344 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
3345
3346         * expression.cs: Resolve the constant expression before returning
3347         it. 
3348
3349 2004-07-19  Martin Baulig  <martin@ximian.com>
3350
3351         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
3352         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
3353         the return type of the new EmitContext.
3354
3355 2004-07-18  Martin Baulig  <martin@ximian.com>
3356
3357         * class.cs (Property.Define): Fix iterators.
3358
3359         * iterators.cs (Iterator.Define): Moved the
3360         `container.AddInterator (this)' call here from the .ctor; only do
3361         it if we resolved successfully.
3362
3363 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
3364
3365         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
3366         `true' for preprocessing directives that we parse.  The return
3367         value indicates whether we should return to regular tokenizing or
3368         not, not whether it was parsed successfully.
3369
3370         In the past if we were in: #if false ... #line #endif, we would
3371         resume parsing after `#line'.  See bug 61604.
3372
3373         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
3374         building: IsEnumType should return true only for enums, not for
3375         enums or System.Enum itself.  This fixes #61593.
3376
3377         Likely what happened is that corlib was wrong: mcs depended on
3378         this bug in some places.  The bug got fixed, we had to add the
3379         hack, which caused bug 61593.
3380
3381         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
3382         that was a workaround for the older conditions.
3383
3384 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
3385
3386         * assign.cs: IAssignMethod has a new interface, as documented
3387         inline. All assignment code now uses this new api.
3388
3389         * ecore.cs, expression.cs: All classes which implement
3390         IAssignMethod now use the new interface.
3391
3392         * expression.cs (Invocation): add a hack to EmitCall so that
3393         IndexerAccess can be the target of a compound assignment without
3394         evaluating its arguments twice.
3395
3396         * statement.cs: Handle changes in Invocation api.
3397
3398 2004-07-16  Martin Baulig  <martin@ximian.com>
3399
3400         * iterators.cs: Rewrote this.  We're now using one single Proxy
3401         class for both the IEnumerable and the IEnumerator interface and
3402         `Iterator' derives from Class so we can use the high-level API.
3403
3404         * class.cs (TypeContainer.AddIterator): New method.
3405         (TypeContainer.DoDefineType): New protected virtual method, which
3406         is called from DefineType().
3407         (TypeContainer.DoDefineMembers): Call DefineType() and
3408         DefineMembers() on all our iterators.
3409         (TypeContainer.Emit): Call Emit() on all our iterators.
3410         (TypeContainer.CloseType): Call CloseType() on all our iterators.
3411
3412         * codegen.cs (EmitContext.CurrentIterator): New public field.
3413
3414 2004-07-15  Martin Baulig  <martin@ximian.com>
3415
3416         * typemanager.cs
3417         (TypeManager.not_supported_exception_type): New type.   
3418
3419 2004-07-14  Martin Baulig  <martin@ximian.com>
3420
3421         * iterators.cs: Use real error numbers.
3422
3423 2004-07-14  Martin Baulig  <martin@ximian.com>
3424
3425         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
3426         requires this to be a System.Collection.IEnumerable and not a
3427         class implementing that interface.
3428         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
3429
3430 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
3431
3432         * class.cs: Fixed previous fix, it broke some error tests.
3433
3434 2004-07-12  Martin Baulig  <martin@ximian.com>
3435
3436         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
3437         Fixes #61293.
3438
3439 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
3440
3441         * assign.cs (LocalTemporary): Add new argument: is_address,If
3442         `is_address' is true, then the value that we store is the address
3443         to the real value, and not the value itself.
3444         
3445         * ecore.cs (PropertyExpr): use the new local temporary
3446         stuff to allow us to handle X.Y += z (where X is a struct)
3447
3448 2004-07-08  Martin Baulig  <martin@ximian.com>
3449
3450         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
3451         not always return, just like we're doing in Using.Resolve().
3452
3453 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
3454
3455         * cs-parser.jay (fixed_statement): flag this as Pinned.
3456
3457 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
3458
3459         * typemanager.cs (TypeManager): Removed MakePinned method, this
3460         mechanism is replaced with the .NET 2.x compatible mechanism of
3461         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
3462
3463         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
3464         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
3465         `IsFixed' property which has a different meaning.
3466
3467 2004-07-02  Raja R Harinath  <rharinath@novell.com>
3468
3469         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
3470         visible from inside a nested class, not just the names of the
3471         immediately enclosing class.
3472         Fix for bug #60730.
3473
3474 2004-06-24  Raja R Harinath  <rharinath@novell.com>
3475
3476         * expression.cs (BetterConversion): Remove buggy special-case
3477         handling of "implicit constant expression conversions".  At this
3478         point, we already know that the conversion is possible -- we're
3479         only checking to see which is better.
3480
3481 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3482
3483         * cs-parser.jay: Added error CS0210 test.
3484
3485 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3486
3487         * cs-parser.jay: Added error CS0134 test.
3488
3489 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3490
3491         Fix bug #52507
3492         * cs-parser.jay: Added error CS0145 test.
3493
3494 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
3495
3496         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
3497
3498 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
3499         
3500         * expression.cs (StackAlloc.Resolve): The argument may not
3501         be a constant; deal with this case.
3502         
3503 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
3504
3505         * attribute.cs (IndexerName_GetIndexerName): Renamed to
3506         GetIndexerAttributeValue.
3507         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
3508
3509         * class.cs (Indexer.Define): Added error tests for CS0415,
3510         CS0609.
3511
3512 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
3513
3514         * attribute.cs (Attribute.Resolve): Keep field code in sync with
3515         property code.
3516
3517 2004-06-23  Martin Baulig  <martin@ximian.com>
3518
3519         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
3520         neither return nor throw, reset the barrier as well.  Fixes #60457.
3521
3522 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
3523
3524         * class.cs : EventAttributes is now set to None by default.
3525           This fixes bug #60459.
3526
3527 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
3528
3529         Fix bug #60219
3530         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
3531         Don't throw exception but return null (it's sufficient now).
3532
3533 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
3534
3535         * typemanager.cs (GetArgumentTypes): Faster implementation.
3536
3537 2004-06-18  Martin Baulig  <martin@ximian.com>
3538
3539         * attribute.cs (Attribute.Resolve): Check whether we're an
3540         EmptyCast which a Constant child.  Fixes #60333.
3541
3542 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
3543
3544         * statement.cs (EmitCollectionForeach): Account for the fact that
3545         not all valuetypes are in areas which we can take the address of.
3546         For these variables, we store to a temporary variable. Also, make
3547         sure that we dont emit a `callvirt' on a valuetype method.
3548
3549 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3550
3551         * expression.cs (StackAlloc.DoReSolve): Added test for
3552         negative parameter (CS0247).
3553
3554 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3555
3556         Fix bug #59792
3557         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
3558
3559 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
3560
3561         Fix bug #59781
3562         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
3563         ulong.
3564
3565 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
3566
3567         Fix bug #58254 & cs1555.cs, cs1556.cs
3568         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
3569
3570 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
3571
3572         * cs-parser.jay: Added error CS1669 test for indexers.
3573
3574 2004-06-11  Martin Baulig  <martin@ximian.com>
3575
3576         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
3577         call this twice: for params and varargs methods.
3578
3579 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3580
3581         * class.cs:
3582         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
3583
3584 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3585
3586         * attribute.cs (Attribute.GetValidTargets): Made public.
3587
3588         * class.cs: 
3589         (AbstractPropertyEventMethod): New class for better code sharing.
3590         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
3591         CS1667 report.
3592         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
3593
3594 2004-06-11  Raja R Harinath  <rharinath@novell.com>
3595
3596         Fix bug #59477.
3597         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
3598         that the call to Resolve is part of a MemberAccess.
3599         (Expression.Resolve): Use it for SimpleName resolution.
3600         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
3601         Add 'intermediate' boolean argument.
3602         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
3603         error message when the SimpleName can be resolved ambiguously
3604         between an expression and a type.
3605         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
3606         public.
3607         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
3608         call on the left-side.
3609
3610 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3611
3612         * class.cs:
3613         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
3614
3615 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3616
3617         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
3618
3619 2004-06-11  Martin Baulig  <martin@ximian.com>
3620
3621         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
3622         varargs methods if applicable.
3623
3624 2004-06-11  Martin Baulig  <martin@ximian.com>
3625
3626         * expression.cs (Invocation.EmitCall): Don't use
3627         `method.CallingConvention == CallingConventions.VarArgs' since the
3628         method could also have `CallingConventions.HasThis'.
3629
3630 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
3631
3632         * class.cs (Event.GetSignatureForError): Implemented.
3633         Fixed crash in error test cs3010.cs
3634
3635 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
3636
3637         * cs-tokenizer.cs: Change the way we track __arglist to be
3638         consistent with the other keywords.
3639
3640 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
3641
3642         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
3643         tomorrow.
3644
3645 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
3646
3647         * codegen.cs: Check that all referenced assemblies have a strongname
3648         before strongnaming the compiled assembly. If not report error CS1577.
3649         Fix bug #56563. Patch by Jackson Harper.
3650         * typemanager.cs: Added a method to return all referenced assemblies.
3651         Fix bug #56563. Patch by Jackson Harper.
3652
3653 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
3654
3655         * class.cs:
3656         (Method.ApplyAttributeBuilder): Moved and added conditional
3657         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
3658
3659         * delegate.cs:
3660         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
3661
3662 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
3663
3664         Fixed #59640
3665         * class.cs: (EventField.attribute_targets): Changed default target.
3666
3667 2004-06-08  Martin Baulig  <martin@ximian.com>
3668
3669         * expression.cs (Invocation.EmitCall): Enable varargs methods.
3670
3671 2004-06-08  Martin Baulig  <martin@ximian.com>
3672
3673         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
3674
3675 2004-06-07  Martin Baulig  <martin@ximian.com>
3676
3677         Added support for varargs methods.
3678
3679         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
3680         keyword.
3681
3682         * cs-parser.jay: Added support for `__arglist'.
3683
3684         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
3685
3686         * expression.cs (Argument.AType): Added `ArgList'.
3687         (Invocation): Added support for varargs methods.
3688         (ArglistAccess): New public class.
3689         (Arglist): New public class.
3690
3691         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
3692
3693         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
3694         a method's top-level block if the method has varargs.
3695
3696         * support.cs (ReflectionParameters, InternalParameters): Added
3697         support for varargs methods.    
3698
3699 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
3700
3701         * class.cs: Provide location in indexer error report.
3702
3703         * driver.cs: Use standard names.
3704
3705         * namespace.cs: Catch the use of using after a namespace has been
3706         declared also on using aliases.
3707
3708 2004-06-03  Raja R Harinath  <rharinath@novell.com>
3709
3710         Bug #50820.
3711         * typemanager.cs (closure_private_ok, closure_invocation_type)
3712         (closure_qualifier_type, closure_invocation_assembly)
3713         (FilterWithClosure): Move to ...
3714         (Closure): New internal nested class.
3715         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
3716         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
3717         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
3718         (MemberLookup, MemberLookupFailed): Use it.
3719         * expression.cs (New.DoResolve): Treat the lookup for the
3720         constructor as being qualified by the 'new'ed type.
3721         (Indexers.GetIndexersForTypeOrInterface): Update.
3722
3723 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
3724
3725         * attribute.cs
3726         (GetConditionalAttributeValue): New method. Returns
3727         condition of ConditionalAttribute.
3728         (SearchMulti): New method.  Returns all attributes of type 't'.
3729         Use it when attribute is AllowMultiple = true.
3730         (IsConditionalMethodExcluded): New method.
3731
3732         * class.cs
3733         (Method.IsExcluded): Implemented. Returns true if method has conditional
3734         attribute and the conditions is not defined (method is excluded).
3735         (IMethodData): Extended interface for ConditionalAttribute support.
3736         (PropertyMethod.IsExcluded): Implemented.
3737
3738         * decl.cs
3739         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
3740
3741         * expression.cs
3742         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
3743         on the method.
3744
3745 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
3746
3747         * expression.cs (ArrayCreationExpression): Make this just an
3748         `expression'. It can't be a statement, so the code here was
3749         dead.
3750
3751 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
3752
3753         Fixed #59072
3754         * typemanager.cs (GetFullNameSignature): New method for
3755         MethodBase types.
3756
3757 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
3758
3759         Fixed #56452
3760         * class.cs (MemberBase.GetSignatureForError): New virtual method.
3761         Use this method when MethodBuilder is null.
3762         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
3763         Added test for error CS0626 (MONO reports error for this situation).
3764         (IMethodData.GetSignatureForError): Extended interface.
3765
3766 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
3767
3768         * attribute.cs
3769         (AttributeTester.GetObsoleteAttribute): Returns instance of
3770         ObsoleteAttribute when type is obsolete.
3771
3772         * class.cs
3773         (TypeContainer.VerifyObsoleteAttribute): Override.
3774         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
3775         (MethodCode.VerifyObsoleteAttribute): Override.
3776         (MemberBase.VerifyObsoleteAttribute): Override.
3777
3778         * decl.cs
3779         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
3780         and report proper error.
3781
3782         *delegate.cs
3783         Delegate.VerifyObsoleteAttribute): Override.
3784
3785         * ecore.cs
3786         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
3787         and report proper error.
3788         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
3789
3790         * enum.cs
3791         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
3792         and enum member.
3793
3794         * expression.cs
3795         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
3796         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
3797         Added test for ObsoleteAttribute.
3798
3799         * statement.cs
3800         (Catch): Derived from Statement.
3801
3802 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
3803  
3804         Fixed bug #59071 & cs0160.cs
3805  
3806         * statement.cs (Try.Resolve): Check here whether order of catch
3807         clauses matches their dependencies.
3808
3809 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
3810
3811         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
3812         caused a regression: #59343.  Referencing nested classes from an
3813         assembly stopped working.
3814
3815 2004-05-31  Martin Baulig  <martin@ximian.com>
3816
3817         MCS is now frozen for beta 2.
3818
3819 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3820
3821         * convert.cs: add a trivial cache for overload operator resolution.
3822
3823 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3824
3825         * decl.cs: If possible, use lookuptypedirect here. We can only do
3826         this if there is no `.' after the namespace. Avoids using
3827         LookupType, which does lots of slow processing.
3828         (FindNestedType) New method, does what it says :-).
3829         * namespace.cs: use LookupTypeDirect.
3830         * rootcontext.cs: use membercache, if possible.
3831         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
3832
3833 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3834
3835         * expression.cs:
3836         According to the spec, 
3837
3838         In a member access of the form E.I, if E is a single identifier,
3839         and if the meaning of E as a simple-name (§7.5.2) is a constant,
3840         field, property, localvariable, or parameter with the same type as
3841         the meaning of E as a type-name (§3.8), then both possible
3842         meanings of E are permitted.
3843
3844         We did not check that E as a simple-name had the same type as E as
3845         a type name.
3846
3847         This trivial check gives us 5-7% on bootstrap time.
3848
3849 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
3850
3851         * expression.cs (Invocation.OverloadResolve): Avoid the
3852         use of hashtables and boxing here by allocating on demand.
3853
3854 2004-05-30  Martin Baulig  <martin@ximian.com>
3855
3856         * rootcontext.cs (RootContext.LookupType): Don't cache things if
3857         we're doing a silent lookup.  Don't try to lookup nested types in
3858         TypeManager.object_type (thanks to Ben Maurer).
3859
3860 2004-05-30  Martin Baulig  <martin@ximian.com>
3861
3862         Committing a patch from Ben Maurer.
3863
3864         * rootcontext.cs (RootContext.LookupType): Cache negative results.
3865
3866 2004-05-29  Martin Baulig  <martin@ximian.com>
3867
3868         * class.cs (IMethodData.ShouldIgnore): New method.
3869
3870         * typemanager.cs (TypeManager.MethodFlags): Don't take a
3871         `Location' argument, we don't need it anywhere.  Use
3872         `IMethodData.ShouldIgnore ()' instead of
3873         `MethodData.GetMethodFlags ()'.
3874         (TypeManager.AddMethod): Removed.
3875         (TypeManager.AddMethod2): Renamed to AddMethod.
3876
3877 2004-05-29  Martin Baulig  <martin@ximian.com>
3878
3879         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
3880
3881         * convert.cs (Convert.ImplicitReferenceConversion): If we're
3882         converting from a class type S to an interface type and we already
3883         have an object on the stack, don't box it again.  Fixes #52578.
3884
3885 2004-05-29  Martin Baulig  <martin@ximian.com>
3886
3887         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
3888         Added support for `params' parameters.  Fixes #59267.
3889
3890 2004-05-29  Martin Baulig  <martin@ximian.com>
3891
3892         * literal.cs (NullPointer): Provide a private .ctor which sets
3893         `type' to TypeManager.object_type.  Fixes #59048.
3894
3895 2004-05-29  Martin Baulig  <martin@ximian.com>
3896
3897         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
3898         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
3899
3900         * ecore.cs (EventExpr.instance_expr): Make the field private.
3901
3902 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
3903
3904         Fixed bug #50080 & cs0214-2.cs
3905         * expression.cs (Cast.DoResolve): Check unsafe context here.
3906         
3907         * statement.cs (Resolve.DoResolve): Likewise.
3908
3909 2004-05-26  Martin Baulig  <martin@ximian.com>
3910
3911         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
3912
3913         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
3914         (RootContext.LookupType): Pass down the `silent' flag.
3915
3916 2004-05-25  Martin Baulig  <martin@ximian.com>
3917
3918         * expression.cs
3919         (MethodGroupExpr.IdenticalTypeName): New public property.
3920         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
3921         expression actually refers to a type.
3922
3923 2004-05-25  Martin Baulig  <martin@ximian.com>
3924
3925         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
3926         for #56176 and made it actually work.
3927
3928 2004-05-25  Martin Baulig  <martin@ximian.com>
3929
3930         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
3931         (FieldExpr, PropertyExpr): Override and implement
3932         CacheTemporaries.  Fixes #52279.
3933
3934 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
3935
3936         * location.cs: In the new compiler listing a file twice is a
3937         warning, not an error.
3938
3939 2004-05-24  Martin Baulig  <martin@ximian.com>
3940
3941         * enum.cs (Enum.DefineType): For the `BaseType' to be a
3942         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
3943
3944 2004-05-24  Martin Baulig  <martin@ximian.com>
3945
3946         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
3947         walking the `using' list.  Fixes #53921.
3948
3949 2004-05-24  Martin Baulig  <martin@ximian.com>
3950
3951         * const.cs (Const.LookupConstantValue): Added support for
3952         EmptyCast's; fixes #55251.
3953
3954 2004-05-24  Martin Baulig  <martin@ximian.com>
3955
3956         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
3957         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
3958         which does the CS0135 check.  The reason is that we first need to
3959         check whether the variable actually exists.
3960
3961 2004-05-24  Martin Baulig  <martin@ximian.com>
3962
3963         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
3964         than RootContext.LookupType() to find the explicit interface
3965         type.  Fixes #58584.
3966
3967 2004-05-24  Raja R Harinath  <rharinath@novell.com>
3968
3969         * Makefile: Simplify.  Use executable.make.
3970         * mcs.exe.sources: New file.  List of sources of mcs.exe.
3971
3972 2004-05-24  Anders Carlsson  <andersca@gnome.org>
3973
3974         * decl.cs:
3975         * enum.cs:
3976         Use the invariant culture when doing String.Compare for CLS case
3977         sensitivity.
3978         
3979 2004-05-23  Martin Baulig  <martin@ximian.com>
3980
3981         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
3982         don't have any dots.  Fixes #52622, added cs0246-8.cs.
3983
3984         * namespace.cs (NamespaceEntry.Lookup): Likewise.
3985         
3986 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
3987
3988         * class.cs (MemberBase.Define): Reuse MemberType member for 
3989         resolved type. Other methods can use it too.
3990
3991 2004-05-23  Martin Baulig  <martin@ximian.com>
3992
3993         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
3994         the variable also exists in the current block (otherwise, we need
3995         to report a CS0103).  Fixes #58670.
3996
3997 2004-05-23  Martin Baulig  <martin@ximian.com>
3998
3999         * flowanalysis.cs (Reachability.Reachable): Compute this
4000         on-the-fly rather than storing it as a field.
4001
4002 2004-05-23  Martin Baulig  <martin@ximian.com>
4003
4004         * flowanalysis.cs (Reachability.And): Manually compute the
4005         resulting `barrier' from the reachability.      
4006        
4007 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
4008
4009         Fix bug #57835
4010         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
4011         instance of ObsoleteAttribute when symbol is obsolete.
4012
4013         * class.cs
4014         (IMethodData): Extended interface for ObsoleteAttribute support.
4015
4016 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
4017
4018         * attribute.cs: Fix bug #55970
4019
4020 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
4021
4022         Fix bug #52705
4023         * attribute.cs
4024         (GetObsoleteAttribute): New method. Creates the instance of
4025         ObsoleteAttribute.
4026         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
4027         ObsoleteAttribute when member is obsolete.
4028         (AttributeTester.Report_ObsoleteMessage): Common method for
4029         Obsolete error/warning reporting.
4030
4031         * class.cs
4032         (TypeContainer.base_classs_type): New member for storing parent type.
4033
4034         * decl.cs
4035         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
4036         for this MemberCore.
4037
4038 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
4039
4040         * attribute.cs, const.cs: Fix bug #58590
4041
4042 2004-05-21  Martin Baulig  <martin@ximian.com>
4043
4044         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
4045         out parameters if the end of the method is unreachable.  Fixes
4046         #58098. 
4047
4048 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
4049
4050         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
4051         Hari was right, why extra method.
4052
4053 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
4054
4055         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
4056
4057 2004-05-20  Martin Baulig  <martin@ximian.com>
4058
4059         Merged this back from gmcs to keep the differences to a minumum.
4060
4061         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
4062         instead of a Declspace.
4063         (Attribute.ResolveType): Likewise.
4064         (Attributes.Search): Likewise.
4065         (Attributes.Contains): Likewise.
4066         (Attributes.GetClsCompliantAttribute): Likewise.
4067
4068         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
4069         argument.
4070         (MethodData.ApplyAttributes): Take an EmitContext instead of a
4071         DeclSpace.
4072
4073 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
4074
4075         Fix bug #58688 (MCS does not report error when the same attribute
4076         is assigned twice)
4077
4078         * attribute.cs (Attribute.Emit): Distinction between null and default.
4079
4080 2004-05-19  Raja R Harinath  <rharinath@novell.com>
4081
4082         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
4083         of a top-level attribute without an attribute target.
4084         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
4085         Make non-static.
4086         (Attribute.Conditional_GetConditionName), 
4087         (Attribute.Obsolete_GetObsoleteMessage): Update.
4088         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
4089         part of ScanForIndexerName.
4090         (Attribute.CanIgnoreInvalidAttribute): New function.
4091         (Attribute.ScanForIndexerName): Move to ...
4092         (Attributes.ScanForIndexerName): ... here.
4093         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
4094         (Attributes.Search): New internal variant that can choose not to
4095         complain if types aren't resolved.  The original signature now
4096         complains.
4097         (Attributes.GetClsCompliantAttribute): Use internal variant, with
4098         complaints suppressed.
4099         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
4100         only if it not useful.
4101         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
4102         top-level for attributes that are shared between the assembly
4103         and a top-level class.
4104         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
4105         * class.cs: Update to reflect changes.
4106         (DefineIndexers): Fuse loops.
4107         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
4108         a couple more variants of attribute names.
4109
4110 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
4111
4112         Fix bug #52585 (Implemented explicit attribute declaration)
4113
4114         * attribute.cs:
4115         (Attributable.ValidAttributeTargets): New abstract method. It gets
4116         list of valid attribute targets for explicit target declaration.
4117         (Attribute.Target): It holds target itself.
4118         (AttributeSection): Removed.
4119         (Attribute.CheckTargets): New method. It checks whether attribute
4120         target is valid for the current element.
4121
4122         * class.cs:
4123         (EventProperty): New class. For events that are declared like
4124         property (with add and remove accessors).
4125         (EventField): New class. For events that are declared like field.
4126         class.cs
4127
4128         * cs-parser.jay: Implemented explicit attribute target declaration.
4129
4130         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
4131         Override ValidAttributeTargets.
4132
4133         * parameter.cs:
4134         (ReturnParameter): Class for applying custom attributes on 
4135         the return type.
4136         (ParameterAtribute): New class. Class for applying custom
4137         attributes on the parameter type.
4138
4139 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
4140
4141         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
4142         definitions. 
4143
4144         (Method): Allow UNSAFE here.
4145
4146         * modifiers.cs: Support unsafe reporting.
4147
4148 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
4149
4150         * decl.cs: Fix bug #58478.
4151
4152 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
4153
4154         * statement.cs: When checking for unreachable code on an EmptyStatement,
4155         set the location. Fixes bug #58488.
4156
4157 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
4158
4159         * driver.cs: Add -pkg handling.
4160
4161         From Gonzalo: UseShelLExecute=false
4162
4163 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
4164
4165         * attribute.cs:
4166         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
4167         for attribute.
4168         (Attribute.IsClsCompliaceRequired): Moved to base for better
4169         accesibility.
4170         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
4171         when attribute is AttributeUsageAttribute.
4172         (Attribute.GetValidTargets): Simplified.
4173         (Attribute.GetAttributeUsage): New method returns AttributeUsage
4174         attribute for this type.
4175         (Attribute.ApplyAttributes): Method renamed to Emit and make
4176         non-static.
4177         (GlobalAttributeSection): New class for special handling of global
4178         attributes (assembly, module).
4179         (AttributeSection.Emit): New method.
4180
4181         * class.cs: Implemented Attributable abstract methods.
4182         (MethodCore.LabelParameters): Moved to Parameter class.
4183         (Accessor): Is back simple class.
4184         (PropertyMethod): Implemented Attributable abstract class.
4185         (DelegateMethod): Implemented Attributable abstract class.
4186         (Event): New constructor for disctintion between normal Event
4187         and Event with accessors.
4188
4189         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
4190
4191         * codegen.cs, const.cs, decl.cs, delegate.cs:
4192         (CommonAssemblyModulClass): Implemented Attributable abstract class
4193         and simplified.
4194
4195         * enum.cs: Implement IAttributeSupport interface.
4196         (EnumMember): New class for emum members. Implemented Attributable
4197         abstract class
4198
4199         * parameter.cs:
4200         (ParameterBase): Is abstract.
4201         (ReturnParameter): New class for easier [return:] attribute handling.
4202
4203         * typemanager.cs: Removed builder_to_attr.
4204
4205 2004-05-11  Raja R Harinath  <rharinath@novell.com>
4206
4207         Fix bug #57151.
4208         * attribute.cs (Attribute.GetPositionalValue): New function.
4209         * class.cs (TypeContainer.VerifyMembers): New function.
4210         (TypeContainer.Emit): Use it.
4211         (ClassOrStruct): New base class for Class and Struct.
4212         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
4213         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
4214         class.
4215         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
4216         then each non-static field should have a FieldOffset attribute.
4217         Otherwise, none of the fields should have a FieldOffset attribute.
4218         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
4219         and FieldOffset attributes.
4220         * typemanager.cs (TypeManager.struct_layout_attribute_type)
4221         (TypeManager.field_offset_attribute_type): New core types.
4222         (TypeManager.InitCoreTypes): Initialize them.
4223
4224 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
4225
4226         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
4227         Return correct type.
4228         From bug #58270.
4229
4230 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
4231
4232         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
4233         be implicitly converted to ulong.
4234         
4235         * expression.cs: The logic for allowing operator &, | and ^ worked
4236         was wrong, it worked before because we did not report an error in
4237         an else branch.  Fixes 57895.
4238
4239         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
4240         allow volatile fields to be reference types.
4241
4242 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
4243
4244         * driver.cs: Add support for /debug-
4245
4246 2004-05-07  Raja R Harinath  <rharinath@novell.com>
4247
4248         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
4249         Add a 'complain' parameter to silence errors.
4250         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
4251         silently overlooked type-resolutions.
4252         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
4253         to reflect changes.
4254         (Attributes.Search): New function.
4255         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
4256         (Attributes.GetAttributeFullName): Remove hack.
4257         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
4258         Update to reflect changes.
4259         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
4260         Use Attributes.Search instead of nested loops.
4261
4262 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
4263
4264         * decl.cs:
4265         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
4266         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
4267         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
4268
4269         * report.cs: (Report.Warning): Renamed to Warning_T because of
4270         parameter collision.
4271
4272 2004-05-05  Raja R Harinath  <rharinath@novell.com>
4273
4274         * expression.cs (MemberAccess.ResolveMemberAccess):
4275         Exit with non-zero status after Report.Error.
4276         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
4277         Likewise.
4278         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
4279
4280 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
4281
4282         * support.cs: Don't hang when the file is empty.
4283
4284 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
4285
4286         * support.cs: In SeekableStreamReader, compute the preamble size of the
4287           underlying stream. Position changes should take into account that initial
4288           count of bytes.
4289
4290 2004-05-03  Todd Berman  <tberman@sevenl.net>
4291
4292         * driver.cs: remove unused GetSysVersion function.
4293
4294 2004-05-03  Todd Berman  <tberman@sevenl.net>
4295
4296         * driver.cs: Remove the hack from saturday, as well as the hack
4297         from jackson (LoadAssemblyFromGac), also adds the CWD to the
4298         link_paths to get that bit proper.
4299
4300 2004-05-01  Todd Berman  <tberman@sevenl.net>
4301
4302         * driver.cs: Try a LoadFrom before a Load, this checks the current
4303         path. This is currently a bug in mono that is be fixed, however, this
4304         provides a workaround for now. This will be removed when the bug
4305         is fixed.
4306
4307 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
4308
4309         * CryptoConvert.cs: Updated to latest version. Fix issue with 
4310         incomplete key pairs (#57941).
4311
4312 2004-05-01  Todd Berman  <tberman@sevenl.net>
4313
4314         * driver.cs: Remove '.' from path_chars, now System.* loads properly
4315         from the GAC
4316
4317 2004-04-30  Jackson Harper  <jackson@ximian.com>
4318
4319         * codegen.cs: Open keys readonly.
4320         
4321 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
4322
4323         * typemanager.cs: don't report cyclic struct layout when a struct
4324         contains 2 or more fields of the same type. Failed for Pango.AttrShape
4325         which has 2 Pango.Rectangle fields.
4326
4327 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4328
4329         * expression.cs: Handle IntPtr comparisons with IL code
4330         rather than a method call.
4331
4332 2004-04-29  Martin Baulig  <martin@ximian.com>
4333
4334         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
4335         the list of PropertyInfo's in class hierarchy and find the
4336         accessor.  Fixes #56013.
4337
4338 2004-04-29  Martin Baulig  <martin@ximian.com>
4339
4340         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
4341
4342 2004-04-29  Martin Baulig  <martin@ximian.com>
4343
4344         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
4345
4346         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
4347
4348 2004-04-29  Martin Baulig  <martin@ximian.com>
4349
4350         * class.cs (ConstructorInitializer.Resolve): Check whether the
4351         parent .ctor is accessible.  Fixes #52146.
4352
4353 2004-04-29  Martin Baulig  <martin@ximian.com>
4354
4355         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
4356
4357         * statement.cs (Using.EmitLocalVariableDecls): Use
4358         TypeManager.idisposable_type, not typeof (IDisposable).
4359         (Foreach.EmitCollectionForeach): Added support for valuetypes.
4360
4361 2004-04-29  Martin Baulig  <martin@ximian.com>
4362
4363         * class.cs (Event.Define): Don't emit the field and don't set
4364         RTSpecialName and SpecialName for events on interfaces.  Fixes
4365         #57703. 
4366
4367 2004-04-29  Raja R Harinath  <rharinath@novell.com>
4368
4369         Refactor Attribute.ApplyAttributes.
4370         * attribute.cs (Attributable): New base class for objects that can
4371         have Attributes applied on them.
4372         (Attribute): Make AttributeUsage fields public.
4373         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
4374         (Attribute.IsInternalCall): New property.
4375         (Attribute.UsageAttr): Convert to a public read-only property.
4376         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
4377         (Attribute.ResolveType, Attribute.Resolve)
4378         (Attribute.ScanForIndexerName): Update to reflect changes.
4379         (Attribute.CheckAttributeTarget): Re-format.
4380         (Attribute.ApplyAttributes): Refactor, to various
4381         Attributable.ApplyAttributeBuilder methods.
4382         * decl.cs (MemberCore): Make Attributable.
4383         * class.cs (Accessor): Make Attributable.
4384         (MethodData.ApplyAttributes): Use proper attribute types, not
4385         attribute names.
4386         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
4387         (TypeContainer.ApplyAttributeBuilder)
4388         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
4389         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
4390         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
4391         (Operator.ApplyAttributeBuilder): New factored-out methods.
4392         * const.cs (Const.ApplyAttributeBuilder): Likewise.
4393         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
4394         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
4395         * parameter.cs (ParameterBase): New Attributable base class
4396         that can also represent Return types.
4397         (Parameter): Update to the changes.
4398
4399 2004-04-29  Jackson Harper  <jackson@ximian.com>
4400
4401         * driver.cs: Prefer the corlib system version when looking for
4402         assemblies in the GAC. This is still a hack, but its a better hack
4403         now.
4404         
4405 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
4406
4407         * decl.cs, enum.cs: Improved error 3005 reporting.
4408   
4409         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
4410         (related_symbols): New private member for list of symbols
4411         related to reported error/warning.
4412         
4413         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
4414
4415 2004-04-29  Martin Baulig  <martin@ximian.com>
4416
4417         * ecore.cs (Expression.Constantify): If we're an enum and
4418         TypeManager.TypeToCoreType() doesn't give us another type, use
4419         t.UnderlyingSystemType.  Fixes #56178.  
4420
4421 2004-04-29  Martin Baulig  <martin@ximian.com>
4422
4423         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
4424         interfaces and for each interface, only add members directly
4425         declared in that interface.  Fixes #53255.
4426
4427 2004-04-28  Martin Baulig  <martin@ximian.com>
4428
4429         * expression.cs (ConditionalLogicalOperator): Use a temporary
4430         variable for `left' to avoid that we evaluate it more than once;
4431         bug #52588.
4432
4433 2004-04-28  Martin Baulig  <martin@ximian.com>
4434
4435         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
4436         `void[]' (CS1547).
4437
4438 2004-04-28  Martin Baulig  <martin@ximian.com>
4439
4440         * statement.cs (LocalInfo.Resolve): Check whether the type is not
4441         void (CS1547).
4442
4443         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
4444         whether the type is not void (CS1547).
4445
4446 2004-04-28  Martin Baulig  <martin@ximian.com>
4447
4448         * expression.cs (Unary.DoResolveLValue): Override this and report
4449         CS0131 for anything but Operator.Indirection.
4450
4451 2004-04-28  Martin Baulig  <martin@ximian.com>
4452
4453         Committing a patch from Ben Maurer; see bug #50820.
4454
4455         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
4456         check for classes.
4457
4458         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
4459         classes.        
4460
4461 2004-04-28  Martin Baulig  <martin@ximian.com>
4462
4463         Committing a patch from Ben Maurer; see bug #50820.
4464
4465         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
4466         check for classes.
4467
4468         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
4469         classes.        
4470
4471 2004-04-28  Martin Baulig  <martin@ximian.com>
4472
4473         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
4474         (Block.AddLabel): Call DoLookupLabel() to only search in the
4475         current block.
4476
4477 2004-04-28  Martin Baulig  <martin@ximian.com>
4478
4479         * cfold.cs (ConstantFold.BinaryFold): Added special support for
4480         comparing StringConstants and NullLiterals in Equality and Inequality.
4481
4482 2004-04-28  Jackson Harper  <jackson@ximian.com>
4483
4484         * driver.cs: Attempt to load referenced assemblies from the
4485         GAC. This is the quick and dirty version of this method that
4486         doesnt take into account versions and just takes the first
4487         canidate found. Will be good enough for now as we will not have more
4488         then one version installed into the GAC until I update this method.
4489
4490 2004-04-28  Martin Baulig  <martin@ximian.com>
4491
4492         * typemanager.cs (TypeManager.CheckStructCycles): New public
4493         static method to check for cycles in the struct layout.
4494
4495         * rootcontext.cs (RootContext.PopulateTypes): Call
4496         TypeManager.CheckStructCycles() for each TypeContainer.
4497         [Note: We only need to visit each type once.]
4498
4499 2004-04-28  Martin Baulig  <martin@ximian.com>
4500
4501         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
4502
4503         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
4504         success and added `out object value'.  Use a `bool resolved' field
4505         to check whether we've already been called rather than
4506         `ConstantValue != null' since this breaks for NullLiterals.
4507
4508 2004-04-28  Raja R Harinath  <rharinath@novell.com>
4509
4510         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
4511         setting of this flag, since the 'set' method may be non-public.
4512
4513 2004-04-28  Raja R Harinath  <rharinath@novell.com>
4514
4515         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
4516         check on current_vector.Block.
4517
4518 2004-04-27  Martin Baulig  <martin@ximian.com>
4519
4520         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
4521         a field initializer.  Fixes #56459.
4522
4523 2004-04-27  Martin Baulig  <martin@ximian.com>
4524
4525         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
4526         we're not attempting to use an indexer.  Fixes #52154.
4527
4528 2004-04-27  Martin Baulig  <martin@ximian.com>
4529
4530         * statement.cs (Return): Don't create a return label if we don't
4531         need it; reverts my change from January 20th.  Thanks to Ben
4532         Maurer for this.
4533
4534 2004-04-27  Martin Baulig  <martin@ximian.com>
4535
4536         According to the spec, `goto' can only leave a nested scope, but
4537         never enter it.
4538
4539         * statement.cs (Block.LookupLabel): Only lookup in the current
4540         block, don't recurse into parent or child blocks.
4541         (Block.AddLabel): Check in parent and child blocks, report
4542         CS0140/CS0158 if we find a duplicate.
4543         (Block): Removed this indexer for label lookups.
4544         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
4545         this already does the error reporting for us.
4546
4547         * flowanalysis.cs
4548         (FlowBranching.UsageVector.Block): New public variable; may be null.
4549         (FlowBranching.CreateSibling): Added `Block' argument.
4550         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
4551         label for the target of a `goto' and check whether we're not
4552         leaving a `finally'.
4553
4554 2004-04-27  Martin Baulig  <martin@ximian.com>
4555
4556         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
4557         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
4558         just for returns).
4559
4560 2004-04-27  Martin Baulig  <martin@ximian.com>
4561
4562         * statement.cs (Block.AddLabel): Also check for implicit blocks
4563         and added a CS0158 check.
4564
4565 2004-04-27  Martin Baulig  <martin@ximian.com>
4566
4567         * flowanalysis.cs (FlowBranchingLoop): New class.
4568         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
4569         UsageVector's instead of an ArrayList.
4570         (FlowBranching.Label): Likewise.
4571         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
4572         (FlowBranching.AddBreakVector): New method.
4573
4574 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
4575
4576         * attribute.cs: Small regression fix: only convert the type if we
4577         the type is different, fixes System.Drawing build.
4578
4579 2004-04-27  Martin Baulig  <martin@ximian.com>
4580
4581         * attribute.cs (Attribute.Resolve): If we have a constant value
4582         for a named field or property, implicity convert it to the correct
4583         type.
4584
4585 2004-04-27  Raja R Harinath  <rharinath@novell.com>
4586
4587         * statement.cs (Block.Block): Implicit blocks share
4588         'child_variable_names' fields with parent blocks.
4589         (Block.AddChildVariableNames): Remove.
4590         (Block.AddVariable): Mark variable as "used by a child block" in
4591         every surrounding block.
4592         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
4593         been used in a child block, complain about violation of "Invariant
4594         meaning in blocks" rule.
4595         * cs-parser.jay (declare_local_variables): Don't use
4596         AddChildVariableNames.
4597         (foreach_statement): Don't create an implicit block: 'foreach'
4598         introduces a scope.
4599
4600 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
4601
4602         * convert.cs (ImplicitNumericConversion): 0 is also positive when
4603         converting from 0L to ulong.  Fixes 57522.
4604
4605 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
4606
4607         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
4608         derived class hides via 'new' keyword field from base class (test-242.cs).
4609         TODO: Handle this in the more general way.
4610         
4611         * class.cs (CheckBase): Ditto.
4612
4613 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
4614
4615         * decl.cs (caching_flags): New member for storing cached values
4616         as bit flags.
4617         (MemberCore.Flags): New enum where bit flags for caching_flags
4618         are defined.
4619         (MemberCore.cls_compliance): Moved to caching_flags.
4620         (DeclSpace.Created): Moved to caching_flags.
4621
4622         * class.cs: Use caching_flags instead of DeclSpace.Created
4623         
4624 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
4625
4626         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
4627         if we are only a derived class, not a nested class.
4628
4629         * typemanager.cs: Same as above, but do this at the MemberLookup
4630         level (used by field and methods, properties are handled in
4631         PropertyExpr).   Allow for the qualified access if we are a nested
4632         method. 
4633
4634 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
4635
4636         * class.cs: Refactoring.
4637         (IMethodData): New inteface; Holds links to parent members
4638         to avoid member duplication (reduced memory allocation).
4639         (Method): Implemented IMethodData interface.
4640         (PropertyBase): New inner classes for get/set methods.
4641         (PropertyBase.PropertyMethod): Implemented IMethodData interface
4642         (Event): New inner classes for add/remove methods.
4643         (Event.DelegateMethod): Implemented IMethodData interface.
4644
4645         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
4646         EmitContext (related to class.cs refactoring).
4647
4648 2004-04-21  Raja R Harinath  <rharinath@novell.com>
4649
4650         * delegate.cs (Delegate.VerifyApplicability): If the number of
4651         arguments are the same as the number of parameters, first try to
4652         verify applicability ignoring  any 'params' modifier on the last
4653         parameter.
4654         Fixes #56442.
4655
4656 2004-04-16  Raja R Harinath  <rharinath@novell.com>
4657
4658         * class.cs (TypeContainer.AddIndexer): Use
4659         'ExplicitInterfaceName' to determine if interface name was
4660         explicitly specified.  'InterfaceType' is not initialized at this time.
4661         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
4662         Indexers array is already in the required order.  Initialize
4663         'IndexerName' only if there are normal indexers.
4664         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
4665         (TypeContainer.Emit): Emit DefaultMember attribute only if
4666         IndexerName is initialized.
4667         Fixes #56300.
4668
4669 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
4670
4671         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
4672         Fixes #57007
4673
4674 2004-04-15  Raja R Harinath  <rharinath@novell.com>
4675
4676         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
4677         attributes.
4678         Fix for #56456.
4679
4680         * attribute.cs (Attribute.Resolve): Check for duplicate named
4681         attributes.
4682         Fix for #56463.
4683
4684 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
4685
4686         * iterators.cs (MarkYield): track whether we are in an exception,
4687         and generate code accordingly.  Use a temporary value to store the
4688         result for our state.
4689
4690         I had ignored a bit the interaction of try/catch with iterators
4691         since their behavior was not entirely obvious, but now it is
4692         possible to verify that our behavior is the same as MS .NET 2.0
4693
4694         Fixes 54814
4695
4696 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
4697
4698         * iterators.cs: Avoid creating temporaries if there is no work to
4699         do. 
4700
4701         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
4702         Enumerations, use TypeManager.EnumToUnderlying and call
4703         recursively. 
4704
4705         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
4706         bug #57013
4707
4708         (This.Emit): Use EmitContext.EmitThis to emit our
4709         instance variable.
4710
4711         (This.EmitAssign): Ditto.
4712
4713         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
4714         codepaths, we will move all the functionality into
4715         Mono.CSharp.This 
4716
4717         (FieldExpr.EmitAssign): Ditto.
4718
4719         This fixes several hidden bugs that I uncovered while doing a code
4720         review of this today.
4721
4722         * codegen.cs (EmitThis): reworked so the semantics are more clear
4723         and also support value types "this" instances.
4724
4725         * iterators.cs: Changed so that for iterators in value types, we
4726         do not pass the value type as a parameter.  
4727
4728         Initialization of the enumerator helpers is now done in the caller
4729         instead of passing the parameters to the constructors and having
4730         the constructor set the fields.
4731
4732         The fields have now `assembly' visibility instead of private.
4733
4734 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
4735
4736         * expression.cs (Argument.Resolve): Check if fields passed as ref
4737         or out are contained in a MarshalByRefObject.
4738
4739         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
4740         another compiler type.
4741
4742 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
4743
4744         * class.cs (Indexer.Define): use the new name checking method.
4745         Also, return false on an error.
4746         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
4747         (is_identifier_[start/part]_character): make static.
4748
4749 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
4750
4751         * expression.cs (Binary.ResolveOperator): Do no append strings
4752         twice: since we can be invoked more than once (array evaluation)
4753         on the same concatenation, take care of this here.  Based on a fix
4754         from Ben (bug #56454)
4755
4756 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
4757
4758         * codegen.cs: Fix another case where CS1548 must be reported (when 
4759         delay-sign isn't specified and no private is available #56564). Fix
4760         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
4761         error when MCS is used on the MS runtime and we need to delay-sign 
4762         (which seems unsupported by AssemblyBuilder - see #56621).
4763
4764 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
4765
4766         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
4767         (TypeManager.ComputeNamespaces): Faster implementation for
4768         Microsoft runtime.
4769
4770         * compiler.csproj: Updated AssemblyName to mcs.
4771
4772 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
4773
4774         * rootcontext.cs: Add new types to the boot resolution.
4775
4776         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
4777         MulticastDelegate is not allowed.
4778
4779         * typemanager.cs: Add new types to lookup: System.TypedReference
4780         and ArgIterator.
4781
4782         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
4783         check for TypedReference or ArgIterator, they are not allowed. 
4784
4785         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
4786         makes us properly catch 1510 in some conditions (see bug 56016 for
4787         details). 
4788
4789 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
4790
4791         * CryptoConvert.cs: update from corlib version
4792         with endian fixes.
4793
4794 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
4795
4796         * class.cs (Indexer.Define): Check indexername declaration
4797
4798 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
4799
4800         * attribute.cs (IsClsCompliant): Fixed problem with handling
4801         all three states (compliant, not-compliant, undetected).
4802
4803 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
4804
4805         * attribute.cs (Attribute): Location is now public.
4806         (Resolve): Store resolved arguments (pos_values) in attribute class.
4807         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
4808         (GetClsCompliantAttributeValue): New method that gets
4809         CLSCompliantAttribute value.
4810         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
4811         if exists else null.
4812         (AttributeTester): New class for CLS-Compliant verification routines.
4813
4814         * class.cs (Emit): Add CLS-Compliant verification.
4815         (Method.GetSignatureForError): Implemented.
4816         (Constructor.GetSignatureForError): Implemented
4817         (Constructor.HasCompliantArgs): Returns if constructor has
4818         CLS-Compliant arguments.
4819         (Constructor.Emit): Override.
4820         (Construcor.IsIdentifierClsCompliant): New method; For constructors
4821         is needed to test only parameters.
4822         (FieldBase.GetSignatureForError): Implemented.
4823         (TypeContainer): New member for storing base interfaces.
4824         (TypeContainer.FindMembers): Search in base interfaces too.
4825
4826         * codegen.cs (GetClsComplianceAttribute): New method that gets
4827         assembly or module CLSCompliantAttribute value.
4828         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
4829         for assembly.
4830         (ModuleClass.Emit): Add error 3012 test.
4831
4832         * const.cs (Emit): Override and call base for CLS-Compliant tests.
4833
4834         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
4835         state for all decl types.
4836         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
4837         if CLS-Compliant tests are required.
4838         (IsClsCompliaceRequired): New method. Analyze whether code
4839         must be CLS-Compliant.
4840         (IsExposedFromAssembly): New method. Returns true when MemberCore
4841         is exposed from assembly.
4842         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
4843         value or gets cached value.
4844         (HasClsCompliantAttribute): New method. Returns true if MemberCore
4845         is explicitly marked with CLSCompliantAttribute.
4846         (IsIdentifierClsCompliant): New abstract method. This method is
4847         used to testing error 3005.
4848         (IsIdentifierAndParamClsCompliant): New method. Common helper method
4849         for identifier and parameters CLS-Compliant testing.
4850         (VerifyClsCompliance): New method. The main virtual method for
4851         CLS-Compliant verifications.
4852         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
4853         null. I don't know why is null (too many public members !).
4854         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
4855         and get value of first CLSCompliantAttribute that found.
4856
4857         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
4858         (VerifyClsCompliance): Override and add extra tests.
4859
4860         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
4861         clscheck- disable CLS-Compliant verification event if assembly is has
4862         CLSCompliantAttribute(true).
4863
4864         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
4865         ApllyAttribute is now called in emit section as in the other cases.
4866         Possible future Emit integration.
4867         (IsIdentifierClsCompliant): New override.
4868         (VerifyClsCompliance): New override.
4869         (GetEnumeratorName): Returns full enum name.
4870
4871         * parameter.cs (GetSignatureForError): Implemented.
4872
4873         * report.cs (WarningData): New struct for Warning message information.
4874         (LocationOfPreviousError): New method.
4875         (Warning): New method. Reports warning based on the warning table.
4876         (Error_T): New method. Reports error based on the error table.
4877
4878         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
4879         verifications are done here.
4880
4881         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
4882
4883         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
4884         CLSCompliantAttribute.
4885         (all_imported_types): New member holds all imported types from other
4886         assemblies.
4887         (LoadAllImportedTypes): New method fills static table with exported types
4888         from all referenced assemblies.
4889         (Modules): New property returns all assembly modules.
4890
4891 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
4892
4893         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
4894         throwing a parser error.
4895
4896         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
4897         which removes the hardcoded get_/set_ prefixes for properties, as
4898         IL allows for the properties to be named something else.  
4899
4900         Bug #56013
4901
4902         * expression.cs: Do not override operand before we know if it is
4903         non-null.  Fix 56207
4904
4905 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4906
4907         * typemanager.cs: support for pinned variables.
4908
4909 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4910
4911         * decl.cs, typemanager.cs: Avoid using an arraylist
4912         as a buffer if there is only one result set.
4913
4914 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
4915
4916         * expression.cs: Make sure you cant call a static method
4917         with an instance expression, bug #56174.
4918
4919 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
4920
4921         * class.cs (IsDuplicateImplementation): Improve error reporting to
4922         flag 663 (method only differs in parameter modifier).
4923
4924         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
4925         in preprocessor directives.
4926
4927         * location.cs (LookupFile): Allow for the empty path.
4928
4929         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
4930         better approach for some of that patch, but its failing with the
4931         CharSet enumeration.  For now try/catch will do.
4932
4933         * typemanager.cs: Do not crash if a struct does not have fields.
4934         Fixes 56150.
4935
4936 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4937
4938         * expression.cs: cs0213, cant fix a fixed expression.
4939         fixes 50231.
4940
4941 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4942
4943         * cs-parser.jay: detect invalid embeded statements gracefully.
4944         bug #51113.
4945
4946 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
4947
4948         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
4949         As a regex:
4950         s/
4951         the invocation type may not be a subclass of the tye of the item/
4952         The type of the item must be a subclass of the invocation item.
4953         /g
4954
4955         Fixes bug #50820.
4956
4957 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
4958
4959         * attribute.cs: Added methods to get a string and a bool from an
4960         attribute. Required to information from AssemblyKeyFileAttribute,
4961         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
4962         * codegen.cs: Modified AssemblyName creation to include support for
4963         strongnames. Catch additional exceptions to report them as CS1548.
4964         * compiler.csproj: Updated include CryptoConvert.cs.
4965         * compiler.csproj.user: Removed file - user specific configuration.
4966         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
4967         Mono.Security assembly. The original class is maintained and tested in
4968         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
4969         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
4970         like CSC 8.0 (C# v2) supports.
4971         * Makefile: Added CryptoConvert.cs to mcs sources.
4972         * rootcontext.cs: Added new options for strongnames.
4973
4974 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
4975
4976         * driver.cs: For --expect-error, report error code `2'
4977         if the program compiled with no errors, error code `1' if
4978         it compiled with an error other than the one expected.
4979
4980 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
4981
4982         * compiler.csproj: Updated for Visual Studio .NET 2003.
4983         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
4984         * compiler.sln: Updated for Visual Studio .NET 2003.
4985
4986 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
4987
4988         * expression.cs: Fix bug #47234. We basically need to apply the
4989         rule that we prefer the conversion of null to a reference type
4990         when faced with a conversion to 'object' (csc behaviour).
4991
4992 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4993
4994         * statement.cs: Shorter form for foreach, eliminates
4995         a local variable. r=Martin.
4996
4997 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
4998
4999         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
5000         checks if we can use brtrue/brfalse to test for 0.
5001         * expression.cs: use the above in the test for using brtrue/brfalse.
5002         cleanup code a bit.
5003
5004 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5005
5006         * expression.cs: Rewrite string concat stuff. Benefits:
5007
5008         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
5009         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
5010         rather than a concat chain.
5011
5012         * typemanager.cs: Add lookups for more concat overloads.
5013
5014 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5015
5016         * expression.cs: Emit shorter il code for array init.
5017
5018         newarr
5019         dup
5020         // set 1
5021
5022         // set 2
5023
5024         newarr
5025         stloc.x
5026
5027         ldloc.x
5028         // set 1
5029
5030         ldloc.x
5031         // set 2
5032
5033 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
5034
5035         * statement.cs: Before, two switch blocks would be merged if the
5036         total size of the blocks (end_item - begin_item + 1) was less than
5037         two times the combined sizes of the blocks.
5038
5039         Now, it will only merge if after the merge at least half of the
5040         slots are filled.
5041
5042         fixes 55885.
5043
5044 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
5045
5046         * class.cs : csc build fix for GetMethods(). See bug #52503.
5047
5048 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
5049
5050         * expression.cs: Make sure fp comparisons work with NaN.
5051         This fixes bug #54303. Mig approved this patch a long
5052         time ago, but we were not able to test b/c the runtime
5053         had a related bug.
5054
5055 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
5056
5057         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
5058
5059 2004-03-19  Martin Baulig  <martin@ximian.com>
5060
5061         * class.cs (MemberCore.IsDuplicateImplementation): Report the
5062         error here and not in our caller.
5063
5064 2004-03-19  Martin Baulig  <martin@ximian.com>
5065
5066         * interface.cs: Completely killed this file.
5067         (Interface): We're now a TypeContainer and live in class.cs.
5068
5069         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
5070         argument; we're now also called for interfaces.
5071         (TypeContainer.DefineMembers): Allow this method being called
5072         multiple times.
5073         (TypeContainer.GetMethods): New public method; formerly known as
5074         Interface.GetMethod().  This is used by PendingImplementation.
5075         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
5076         it's now private and non-static.
5077         (Interface): Moved this here; it's now implemented similar to
5078         Class and Struct.
5079         (Method, Property, Event, Indexer): Added `bool is_interface'
5080         argument to their .ctor's.
5081         (MemberBase.IsInterface): New public field.
5082
5083         * cs-parser.jay: Create normal Method, Property, Event, Indexer
5084         instances instead of InterfaceMethod, InterfaceProperty, etc.
5085         (opt_interface_base): Removed; we now use `opt_class_base' instead.
5086         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
5087
5088 2004-03-19  Martin Baulig  <martin@ximian.com>
5089
5090         * class.cs (MethodCore.IsDuplicateImplementation): New private
5091         method which does the CS0111 checking.
5092         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
5093         Use IsDuplicateImplementation().
5094
5095 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
5096
5097         * decl.cs (FindMemberToOverride): New method to find the correct
5098         method or property to override in the base class.
5099         * class.cs
5100             - Make Method/Property use the above method to find the
5101               version in the base class.
5102             - Remove the InheritableMemberSignatureCompare as it is now
5103               dead code.
5104
5105         This patch makes large code bases much faster to compile, as it is
5106         O(n) rather than O(n^2) to do this validation.
5107
5108         Also, it fixes bug 52458 which is that nested classes are not
5109         taken into account when finding the base class member.
5110
5111         Reviewed/Approved by Martin.
5112
5113 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
5114
5115         * interface.cs: In all interface classes removed redundant
5116         member initialization.
5117
5118 2004-03-16  Martin Baulig  <martin@ximian.com>
5119
5120         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
5121
5122 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
5123
5124         * decl.cs (DefineTypeAndParents): New helper method to define a
5125         type's containers before the type itself is defined;  This is a
5126         bug exposed by the recent changes to Windows.Forms when an
5127         implemented interface was defined inside a class that had not been
5128         built yet.   
5129
5130         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
5131
5132         (Check): Loop correctly to report errors modifiers
5133         (UNSAFE was not in the loop, since it was the same as TOP).
5134
5135         * interface.cs: Every interface member now takes a ModFlags,
5136         instead of a "is_new" bool, which we set on the base MemberCore. 
5137
5138         Every place where we called "UnsafeOk" in the interface, now we
5139         call the proper member (InterfaceMethod.UnsafeOK) instead to get
5140         the unsafe settings from the member declaration instead of the
5141         container interface. 
5142
5143         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
5144
5145         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
5146         `set_indexer_name' to the pending bits (one per type).
5147
5148         We fixed a bug today that was picking the wrong method to
5149         override, since for properties the existing InterfaceMethod code
5150         basically ignored the method name.  Now we make sure that the
5151         method name is one of the valid indexer names.
5152
5153 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
5154  
5155         * support.cs (SeekableStreamReader): Keep track of stream byte
5156         positions and don't mix them with character offsets to the buffer.
5157
5158         Patch from Gustavo Giráldez
5159
5160 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
5161
5162         * interface.cs (InterfaceSetGetBase): Removed double member
5163         initialization, base class does it as well.
5164
5165 2004-03-13  Martin Baulig  <martin@ximian.com>
5166
5167         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
5168         when compiling corlib.
5169
5170 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
5171
5172         * convert.cs (ExplicitConversion): We were reporting an error on
5173         certain conversions (object_type source to a value type, when the
5174         expression was `null') before we had a chance to pass it through
5175         the user defined conversions.
5176
5177         * driver.cs: Replace / and \ in resource specifications to dots.
5178         Fixes 50752
5179
5180         * class.cs: Add check for duplicate operators.  Fixes 52477
5181
5182 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
5183
5184         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
5185         that are in the middle of the statements, not only at the end.
5186         Fixes #54987
5187
5188         * class.cs (TypeContainer.AddField): No longer set the
5189         `HaveStaticConstructor' flag, now we call it
5190         `UserDefineStaticConstructor' to diferentiate the slightly
5191         semantic difference.
5192
5193         The situation is that we were not adding BeforeFieldInit (from
5194         Modifiers.TypeAttr) to classes that could have it.
5195         BeforeFieldInit should be set to classes that have no static
5196         constructor. 
5197
5198         See:
5199
5200         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
5201
5202         And most importantly Zoltan's comment:
5203
5204         http://bugzilla.ximian.com/show_bug.cgi?id=44229
5205
5206         "I think beforefieldinit means 'it's ok to initialize the type sometime 
5207          before its static fields are used', i.e. initialization does not need
5208          to be triggered by the first access to the type. Setting this flag
5209          helps the JIT to compile better code, since it can run the static
5210          constructor at JIT time, and does not need to generate code to call it
5211          (possibly lots of times) at runtime. Unfortunately, mcs does not set
5212          this flag for lots of classes like String. 
5213          
5214          csc sets this flag if the type does not have an explicit static 
5215          constructor. The reasoning seems to be that if there are only static
5216          initalizers for a type, and no static constructor, then the programmer
5217          does not care when this initialization happens, so beforefieldinit
5218          can be used.
5219          
5220          This bug prevents the AOT compiler from being usable, since it 
5221          generates so many calls to mono_runtime_class_init that the AOT code
5222          is much slower than the JITted code. The JITted code is faster, 
5223          because it does not generate these calls if the vtable is type is
5224          already initialized, which is true in the majority of cases. But the
5225          AOT compiler can't do this."
5226
5227 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
5228
5229         * class.cs (MethodData.Emit): Refactor the code so symbolic
5230         information is generated for destructors;  For some reasons we
5231         were taking a code path that did not generate symbolic information
5232         before. 
5233
5234 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
5235
5236         * class.cs: Create a Constructor.CheckBase method that
5237         takes care of all validation type code. The method
5238         contains some code that was moved from Define.
5239
5240         It also includes new code that checks for duplicate ctors.
5241         This fixes bug #55148.
5242
5243 2004-03-09  Joshua Tauberer <tauberer@for.net>
5244
5245         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
5246         a { ... }-style array creation invokes EmitStaticInitializers
5247         which is not good for reference-type arrays.  String, decimal
5248         and now null constants (NullCast) are not counted toward
5249         static initializers.
5250
5251 2004-03-05  Martin Baulig  <martin@ximian.com>
5252
5253         * location.cs (SourceFile.HasLineDirective): New public field;
5254         specifies whether the file contains or is referenced by a "#line"
5255         directive.
5256         (Location.DefineSymbolDocuments): Ignore source files which
5257         either contain or are referenced by a "#line" directive.        
5258
5259 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
5260
5261         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
5262         direct access to our parent, so check the method inline there.
5263
5264 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
5265
5266         * expression.cs (Invocation.EmitCall): Miguel's last commit
5267         caused a regression. If you had:
5268
5269             T t = null;
5270             t.Foo ();
5271
5272         In Foo the implict this would be null.
5273
5274 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
5275
5276         * expression.cs (Invocation.EmitCall): If the method is not
5277         virtual, do not emit a CallVirt to it, use Call.
5278
5279         * typemanager.cs (GetFullNameSignature): Improve the method to
5280         cope with ".ctor" and replace it with the type name.
5281
5282         * class.cs (ConstructorInitializer.Resolve): Now the method takes
5283         as an argument the ConstructorBuilder where it is being defined,
5284         to catch the recursive constructor invocations.
5285
5286 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
5287
5288         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
5289         routines to check if a type is an enumerable/enumerator allow
5290         classes that implement the IEnumerable or IEnumerator interfaces.
5291
5292         * class.cs (Property, Operator): Implement IIteratorContainer, and
5293         implement SetYields.
5294
5295         (Property.Define): Do the block swapping for get_methods in the
5296         context of iterators.   We need to check if Properties also
5297         include indexers or not.
5298
5299         (Operator): Assign the Block before invoking the
5300         OperatorMethod.Define, so we can trigger the Iterator code
5301         replacement. 
5302
5303         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
5304         Property and Operator classes are not created when we parse the
5305         declarator but until we have the block completed, so we use a
5306         singleton SimpleIteratorContainer.Simple to flag whether the
5307         SetYields has been invoked.
5308
5309         We propagate this setting then to the Property or the Operator to
5310         allow the `yield' to function.
5311
5312 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
5313
5314         * codegen.cs: Implemented attribute support for modules.
5315         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
5316         Assembly/Module functionality.
5317
5318         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
5319         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
5320         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
5321
5322 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
5323
5324         * interface.cs (FindMembers): The operation is performed on all base
5325         interfaces and not only on the first. It is required for future CLS Compliance patch.
5326
5327 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
5328
5329         * statement.cs, codegen.cs:
5330         This patch deals with patterns such as:
5331
5332         public class List : IEnumerable {
5333
5334                 public MyEnumerator GetEnumerator () {
5335                         return new MyEnumerator(this);
5336                 }
5337
5338                 IEnumerator IEnumerable.GetEnumerator () {
5339                         ...
5340                 }
5341                 
5342                 public struct MyEnumerator : IEnumerator {
5343                         ...
5344                 }
5345         }
5346
5347         Before, there were a few things we did wrong:
5348         1) we would emit callvirt on a struct, which is illegal
5349         2) we emited ldarg when we needed to emit ldarga
5350         3) we would mistakenly call the interface methods on an enumerator
5351         type that derived from IEnumerator and was in another assembly. For example:
5352
5353         public class MyEnumerator : IEnumerator
5354
5355         Would have the interface methods called, even if there were public impls of the
5356         method. In a struct, this lead to invalid IL code.
5357
5358 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
5359
5360         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
5361           renamed to Emit.
5362
5363         * delegate.cs (Define): Fixed crash when delegate type is undefined.
5364
5365 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
5366
5367         * cs-parser.jay: Fix small regression: we were not testing V2
5368         compiler features correctly.
5369
5370         * interface.cs: If the emit context is null, then create one
5371
5372 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
5373
5374         * decl.cs (GetSignatureForError): New virtual method to get full name
5375           for error messages.
5376
5377         * attribute.cs (IAttributeSupport): New interface for attribute setting.
5378           Now it is possible to rewrite ApplyAttributes method to be less if/else.
5379
5380         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
5381           Duplicated members and code in these classes has been removed.
5382           Better encapsulation in these classes.
5383
5384 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
5385
5386         * assign.cs (Assign.DoResolve): When dealing with compound
5387         assignments, there is a new rule in ECMA C# 2.4 (might have been
5388         there before, but it is documented here) that states that in:
5389
5390         a op= b;
5391
5392         If b is of type int, and the `op' is a shift-operator, then the
5393         above is evaluated as:
5394
5395         a = (int) a op b 
5396
5397         * expression.cs (Binary.ResolveOperator): Instead of testing for
5398         int/uint/long/ulong, try to implicitly convert to any of those
5399         types and use that in pointer arithmetic.
5400
5401         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
5402         method to print information for from the type, not from the
5403         null-method we were given.
5404
5405 2004-02-01  Duncan Mak  <duncan@ximian.com>
5406
5407         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
5408         parsing for cmd, fixes bug #53694.
5409
5410 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
5411
5412         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
5413         in the member name duplication tests. Property and operator name duplication
5414         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
5415
5416 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
5417
5418         * interface.cs (PopulateMethod): Fixed crash when interface method
5419         returns not existing type (error test cs0246-3.cs).
5420
5421 2004-02-02  Ravi Pratap M <ravi@ximian.com>
5422
5423         * cs-parser.jay (interface_accessors): Re-write actions to also
5424         store attributes attached to get and set methods. Fix spelling
5425         while at it.
5426
5427         (inteface_property_declaration): Modify accordingly.
5428
5429         (InterfaceAccessorInfo): New helper class to store information to pass
5430         around between rules that use interface_accessors.
5431
5432         * interface.cs (Emit): Apply attributes on the get and set
5433         accessors of properties and indexers too.
5434
5435         * attribute.cs (ApplyAttributes): Modify accordingly to use the
5436         right MethodBuilder when applying attributes to the get and set accessors.
5437
5438 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
5439
5440         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
5441
5442 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
5443
5444         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
5445
5446 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
5447
5448         * cs-parser.jay: Remove YIELD token, instead use the new grammar
5449         changes that treat `yield' specially when present before `break'
5450         or `return' tokens.
5451
5452         * cs-tokenizer.cs: yield is no longer a keyword.
5453
5454 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
5455
5456         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
5457         setting for default constructors.
5458         For default constructors are almost every time set wrong Modifier. The
5459         generated IL code has been alright. But inside mcs this values was
5460         wrong and this was reason why several of my CLS Compliance tests
5461         failed.
5462
5463 2004-01-22  Martin Baulig  <martin@ximian.com>
5464
5465         * cs-parser.jay (namespace_or_type_name): Return an Expression,
5466         not a QualifiedIdentifier.  This is what `type_name_expression'
5467         was previously doing.
5468         (type_name_expression): Removed; the code is now in
5469         `namespace_or_type_name'.
5470         (qualified_identifier): Removed, use `namespace_or_type_name'
5471         instead.
5472         (QualifiedIdentifier): Removed this class.      
5473
5474 2004-01-22  Martin Baulig  <martin@ximian.com>
5475
5476         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
5477         not a string as alias name.
5478
5479 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
5480
5481         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
5482         #52730 bug, and instead compute correctly the need to use a
5483         temporary variable when requesting an address based on the
5484         static/instace modified of the field and the constructor.
5485  
5486 2004-01-21  Martin Baulig  <martin@ximian.com>
5487
5488         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
5489         class and namespace before looking up aliases.  Fixes #52517.
5490
5491 2004-01-21  Martin Baulig  <martin@ximian.com>
5492
5493         * flowanalysis.cs (UsageVector.Merge): Allow variables being
5494         assinged in a 'try'; fixes exception4.cs.
5495
5496 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5497         * class.cs : Implemented parameter-less constructor for TypeContainer
5498
5499         * decl.cs: Attributes are now stored here. New property OptAttributes
5500
5501         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
5502
5503         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
5504
5505 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5506
5507         * typemanager.cs (CSharpSignature): Now reports also inner class name.
5508           (CSharpSignature): New method for indexer and property signature.
5509
5510 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5511
5512         * pending.cs (IsVirtualFilter): Faster implementation.
5513
5514 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5515
5516         * typemanager.cs: Avoid inclusion of same assembly more than once.
5517
5518 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5519
5520         * cs-parser.jay: Fixed problem where the last assembly attribute
5521           has been applied also to following declaration (class, struct, etc.)
5522           
5523 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
5524
5525         * class.cs: Added error CS0538, CS0539 reporting.
5526         Fixed crash on Microsoft runtime when field type is void.
5527
5528         * cs-parser.jay: Added error CS0537 reporting.
5529
5530         * pending.cs: Added error CS0535 reporting.
5531         Improved error report for errors CS0536, CS0534.
5532
5533 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
5534
5535         Merge a few bits from the Anonymous Method MCS tree.
5536
5537         * statement.cs (ToplevelBlock): New class for toplevel methods,
5538         will hold anonymous methods, lifted variables.
5539
5540         * cs-parser.jay: Create toplevel blocks for delegates and for
5541         regular blocks of code. 
5542
5543 2004-01-20  Martin Baulig  <martin@ximian.com>
5544
5545         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
5546         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
5547         and `NeedExplicitReturn'; added `IsLastStatement'.
5548         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
5549         have a `ReturnLabel' or we're not unreachable.
5550
5551         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
5552         child's reachability; don't just override ours with it.  Fixes
5553         #58058 (lluis's example).
5554         (FlowBranching): Added public InTryOrCatch(), InCatch(),
5555         InFinally(), InLoop(), InSwitch() and
5556         BreakCrossesTryCatchBoundary() methods.
5557
5558         * statement.cs (Return): Do all error checking in Resolve().
5559         Unless we are the last statement in a top-level block, always
5560         create a return label and jump to it.
5561         (Break, Continue): Do all error checking in Resolve(); also make
5562         sure we aren't leaving a `finally'.
5563         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
5564         statement in a top-level block.
5565         (Block.Flags): Added `IsDestructor'.
5566         (Block.IsDestructor): New public property.
5567
5568 2004-01-20  Martin Baulig  <martin@ximian.com>
5569
5570         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
5571
5572 2004-01-20  Martin Baulig  <martin@ximian.com>
5573
5574         * statement.cs (Statement.ResolveUnreachable): New public method.
5575         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
5576         (Block.Resolve): Resolve unreachable statements.
5577
5578 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
5579
5580         * expression.cs: We need to fix the case where we do
5581         not have a temp variable here.
5582
5583         * assign.cs: Only expression compound assignments need
5584         temporary variables.
5585
5586 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
5587
5588         * flowanalysis.cs: Reduce memory allocation in a few ways:
5589           - A block with no variables should not allocate a bit
5590             vector for itself.
5591           - A method with no out parameters does not need any tracking
5592             for assignment of the parameters, so we need not allocate
5593             any data for it.
5594           - The arrays:
5595                 public readonly Type[] VariableTypes;
5596                 public readonly string[] VariableNames;
5597             Are redundant. The data is already stored in the variable
5598             map, so we need not allocate another array for it.
5599           - We need to add alot of checks for if (params | locals) == null
5600             due to the first two changes.
5601
5602 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
5603
5604         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
5605         implement IMemoryLocation, we store a copy on a local variable and
5606         take the address of it.  Patch from Benjamin Jemlich
5607
5608         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
5609         to use a special "type_name_expression" rule which reduces the
5610         number of "QualifiedIdentifier" classes created, and instead
5611         directly creates MemberAccess expressions.
5612
5613 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
5614
5615         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
5616         that fixes #52853.  Null literal assignment to ValueType
5617
5618         * class.cs (MethodData.Emit): Instead of checking the name of the
5619         method to determine if its a destructor, create a new derived
5620         class from Method called Destructor, and test for that.  
5621
5622         * cs-parser.jay: Create a Destructor object instead of a Method.  
5623
5624         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
5625
5626         Fixes: 52933
5627
5628 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
5629
5630         * expression.cs (Binary.ResolveOperator): Perform an implicit
5631         conversion from MethodGroups to their delegate types on the
5632         Addition operation.
5633
5634         * delegate.cs: Introduce a new class DelegateCreation that is the
5635         base class for `NewDelegate' and `ImplicitDelegateCreation',
5636         factor some code in here.
5637
5638         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
5639         conversion from MethodGroups to compatible delegate types. 
5640
5641         * ecore.cs (Expression.Resolve): Do not flag error 654
5642         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
5643         we allow conversions from MethodGroups to delegate types now.
5644
5645         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
5646         assignments in v2 either.
5647
5648 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
5649
5650         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
5651         static read-only fields in ctors.
5652
5653         Applied patch from Benjamin Jemlich 
5654
5655         * expression.cs (UnaryMutator): Avoid leaking local variables. 
5656
5657 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
5658
5659         * cs-tokenizer.cs (IsCastToken): Allow the various native types
5660         here to return true, as they can be used like this:
5661
5662                 (XXX) int.MEMBER ()
5663
5664         Fixed 49836 and all the other dups
5665
5666 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
5667
5668         * driver.cs: Implement /win32res and /win32icon.
5669
5670 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
5671
5672         * cs-parser.jay: Add a rule to improve error handling for the
5673         common mistake of placing modifiers after the type.
5674
5675 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
5676
5677         * cs-parser.jay (interface_event_declaration): Catch
5678         initialization of events on interfaces, and report cs0068
5679
5680         * cs-parser.jay (interface_event_declaration): Catch
5681         initialization of events. 
5682
5683         * ecore.cs: Better report missing constructors.
5684
5685         * expression.cs (Binary.ResolveOperator): My previous bug fix had
5686         the error reporting done in the wrong place.  Fix.
5687
5688         * expression.cs (Binary.ResolveOperator): Catch the 
5689         operator + (E x, E y) error earlier, and later allow for implicit
5690         conversions in operator +/- (E e, U x) from U to the underlying
5691         type of E.
5692
5693         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
5694         52596, if the container class is abstract, the default constructor
5695         is protected otherwise its public (before, we were always public).
5696
5697         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
5698         fixed statement.
5699
5700         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
5701         Jemlich that fixes bug #52597, MCS was generating invalid code for
5702         idisposable structs.   Thanks to Ben for following up with this
5703         bug as well.
5704
5705 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
5706
5707         * driver.cs: Allow assemblies without code to be generated, fixes
5708         52230.
5709
5710 2004-01-07  Nick Drochak <ndrochak@gol.com>
5711
5712         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
5713
5714 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
5715
5716         * cs-parser.jay: Add rules to improve error reporting if fields or
5717         methods are declared at the namespace level (error 116)
5718
5719         * Add rules to catch event add/remove
5720
5721 2004-01-04  David Sheldon <dave-mono@earth.li>
5722
5723   * expression.cs: Added matching ")" to error message for 
5724   CS0077
5725
5726 2004-01-03 Todd Berman <tberman@gentoo.org>
5727
5728         * ecore.cs, attribute.cs:
5729         Applying fix from #52429.
5730
5731 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5732
5733         * ecore.cs, expression.cs, statement.cs:
5734         Total rewrite of how we handle branching. We
5735         now handle complex boolean expressions with fewer
5736         jumps. As well if (x == 0) no longer emits a ceq.
5737
5738         if (x is Foo) is much faster now, because we generate
5739         better code.
5740
5741         Overall, we get a pretty big improvement on our benchmark
5742         tests. The code we generate is smaller and more readable.
5743
5744         I did a full two-stage bootstrap. The patch was reviewed
5745         by Martin and Miguel.
5746
5747 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5748
5749         * cs-parser.jay: Make primary_expression not take a QI.
5750         we dont need this because the member_access rule covers
5751         us here. So we replace the rule with just IDENTIFIER.
5752
5753         This has two good effects. First, we remove a s/r conflict.
5754         Second, we allocate many fewer QualifiedIdentifier objects.
5755
5756 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5757
5758         * attribute.cs: Handle MarshalAs attributes as pseudo, and
5759         set the correct information via SRE. This prevents
5760         hanging on the MS runtime. Fixes #29374.
5761
5762 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
5763
5764         * convert.cs: correctly handle conversions to value types
5765         from Enum and ValueType as unboxing conversions.
5766
5767         Fixes bug #52569. Patch by Benjamin Jemlich.
5768
5769 2004-01-02  Ravi Pratap  <ravi@ximian.com>
5770
5771         * expression.cs (BetterConversion): Prefer int -> uint
5772         over int -> ulong (csc's behaviour). This fixed bug #52046.
5773
5774 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
5775
5776         * decl.cs (MemberCache.FindMembers): now returns a
5777         MemberInfo [].
5778
5779         * typemanager.cs: In general, go with with ^^.
5780         (CopyNewMethods): take an IList.
5781         (RealMemberLookup): Only allocate an arraylist
5782         if we copy from two sets of methods.
5783
5784         This change basically does two things:
5785         1) Fewer array lists allocated due to CopyNewMethods.
5786         2) the explicit cast in MemberList costed ALOT.
5787
5788 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
5789
5790         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
5791         a hashtable to avoid needless string allocations when an identifier is
5792         used more than once (the common case).
5793
5794 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
5795
5796         * pending.cs: MS's TypeBuilder.GetInterfaces ()
5797         is broken, it will not return anything. So, we
5798         have to use the information we have in mcs to
5799         do the task.
5800
5801         * typemanager.cs: Add a cache for GetInterfaces,
5802         since this will now be used more often (due to ^^)
5803
5804         (GetExplicitInterfaces) New method that gets the
5805         declared, not effective, interfaces on a type
5806         builder (eg, if you have interface IFoo, interface
5807         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
5808         { IBar }.
5809
5810         This patch makes MCS able to bootstrap itself on
5811         Windows again.
5812
5813 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
5814
5815         * expression.cs: Remove the Nop's that Miguel put
5816         in by mistake.
5817
5818 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5819
5820         * report.cs, codegen.cs: Give the real stack trace to
5821         the error when an exception is thrown.
5822
5823 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5824
5825         * decl.cs: only allocate hashtables for ifaces if 
5826         it is an iface!
5827
5828 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
5829
5830         * expression.cs: fix the error from cs0121-2.cs
5831         (a parent interface has two child interfaces that
5832         have a function with the same name and 0 params
5833         and the function is called through the parent).
5834
5835 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
5836
5837         * class.cs, rootcontext.cs, typmanager.cs: do not
5838         leak pointers.
5839
5840 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
5841
5842         * codegen.cs: remove stack for the ec flow branching.
5843         It is already a linked list, so no need.
5844
5845 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
5846
5847         * Makefile: Allow custom profiler here.
5848
5849 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
5850
5851         * typemanager.cs (LookupType):
5852           - Use a static char [], because split takes
5853             a param array for args, so it was allocating
5854             every time.
5855           - Do not store true in a hashtable, it boxes.
5856
5857 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
5858
5859         * flowanalysis.cs: bytify common enums.
5860
5861 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5862
5863         * modifiers.cs: Add a new set of flags for the
5864         flags allowed on explicit interface impls.
5865         * cs-parser.jay: catch the use of modifiers in
5866         interfaces correctly.
5867         * class.cs: catch private void IFoo.Blah ().
5868
5869         All related to bug #50572.
5870
5871 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5872
5873         * decl.cs: Rewrite the consistant accessability checking.
5874         Accessability is not linear, it must be implemented in
5875         a tableish way. Fixes #49704.
5876
5877 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
5878
5879         * expression.cs: Handle negation in a checked context.
5880         We must use subtraction from zero. Fixes #38674.
5881
5882 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5883
5884         * class.cs: Ignore static void main in DLLs.
5885         * rootcontext.cs: Handle the target type here,
5886         since we are have to access it from class.cs
5887         * driver.cs: account for the above.
5888
5889 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
5890
5891         * report.cs: Give line numbers and files if available.
5892
5893 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
5894
5895         * driver.cs: Implement /addmodule.
5896
5897         * typemanager.cs:  Change 'modules' field so it now contains Modules not
5898         ModuleBuilders.
5899
5900 2003-12-20  Martin Baulig  <martin@ximian.com>
5901
5902         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
5903         (FieldBase.IsAssigned): Removed this field.
5904         (FieldBase.SetAssigned): New public method.
5905         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
5906
5907 2003-12-20  Martin Baulig  <martin@ximian.com>
5908
5909         * expression.cs (LocalVariableReference.DoResolve): Don't set
5910         `vi.Used' if we're called from DoResolveLValue().
5911
5912         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
5913         returns the usage vector it just merged into the current one -
5914         pass this one to UsageWarning().
5915         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
5916         of the `EmitContext', don't call this recursively on our children.
5917
5918 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
5919
5920         * driver.cs: Implement /target:module.
5921
5922 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
5923
5924         * support.cs (CharArrayHashtable): New helper class.
5925
5926         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
5927         char arrays, not strings, so we can avoid creating a string in
5928         consume_identifier if the identifier is a keyword.
5929
5930 2003-12-16  Martin Baulig  <martin@ximian.com>
5931
5932         * statement.cs (LocalInfo.Assigned): Removed this property.
5933         (LocalInfo.Flags): Removed `Assigned'.
5934         (LocalInfo.IsAssigned): New public method; takes the EmitContext
5935         and uses flow analysis.
5936         (Block.UsageWarning): Made this method private.
5937         (Block.Resolve): Call UsageWarning() if appropriate.
5938
5939         * expression.cs (LocalVariableReference.DoResolve): Always set
5940         LocalInfo.Used here.
5941
5942 2003-12-13  Martin Baulig  <martin@ximian.com>
5943
5944         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
5945         any value here; we're now using flow analysis to figure out
5946         whether a statement/block returns a value.
5947
5948 2003-12-13  Martin Baulig  <martin@ximian.com>
5949
5950         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
5951         working again.
5952         (FlowBranching.MergeFinally): Don't call
5953         `branching.CheckOutParameters()' here, this is called in
5954         MergeTopBlock().
5955         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
5956         when adding the `finally' vector.       
5957
5958 2003-12-13  Martin Baulig  <martin@ximian.com>
5959
5960         * flowanalysis.cs
5961         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
5962         actually work and also fix #48962.
5963
5964 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
5965
5966         * decl.cs: Do not check System.Object for nested types,
5967         since we know it does not have any. Big bang for buck:
5968
5969         BEFORE:
5970            Run 1:   8.35 seconds
5971            Run 2:   8.32 seconds
5972            corlib:  17.99 seconds
5973         AFTER:
5974            Run 1:   8.17 seconds
5975            Run 2:   8.17 seconds
5976            corlib:  17.39 seconds
5977
5978 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
5979
5980         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
5981         time we are returning 0 members, so we save alot here.
5982
5983 2003-12-11  Martin Baulig  <martin@ximian.com>
5984
5985         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
5986         `MergeChild()', also just take the `FlowBranching' as argument;
5987         call Merge() on it and return the result.
5988         (FlowBranching.Merge): We don't need to do anything if we just
5989         have one sibling.
5990
5991 2003-12-11  Martin Baulig  <martin@ximian.com>
5992
5993         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
5994         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
5995         Maurer for this idea.
5996
5997 2003-12-11  Martin Baulig  <martin@ximian.com>
5998
5999         * flowanalysis.cs (MergeResult): This class is now gone; we now
6000         use the `UsageVector' for this.  The reason for this is that if a
6001         branching just has one sibling, we don't need to "merge" them at
6002         all - that's the next step to do.
6003         (FlowBranching.Merge): We now return a `UsageVector' instead of a
6004         `MergeResult'.
6005
6006 2003-12-11  Martin Baulig  <martin@ximian.com>
6007
6008         Reworked flow analyis and made it more precise and bug-free.  The
6009         most important change is that we're now using a special `Reachability'
6010         class instead of having "magic" meanings of `FlowReturns'.  I'll
6011         do some more cleanups and optimizations and also add some more
6012         documentation this week.
6013
6014         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
6015         largely reworked this class.
6016         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
6017         the new `Reachability' class instead of having "magic" values here.
6018         (FlowBranching): We're now using an instance of `Reachability'
6019         instead of having separate `Returns', `Breaks' etc. fields.
6020
6021         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
6022         based on flow analysis; ignore the return value of block.Emit ().
6023
6024 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
6025
6026         * driver.cs typemanager.cs: Find the mono extensions to corlib even
6027         if they are private.
6028
6029 2003-12-09  Martin Baulig  <martin@ximian.com>
6030
6031         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
6032         call them directly on the UsageVector.
6033
6034 2003-12-09  Martin Baulig  <martin@ximian.com>
6035
6036         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
6037         Changed return type from `FlowReturns' to `Reachability'.
6038
6039 2003-12-09  Martin Baulig  <martin@ximian.com>
6040
6041         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
6042         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
6043         `Reachable' fields with a single `Reachability' one.
6044
6045 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6046
6047         * class.cs (FindMembers): Remove foreach's.
6048
6049         Bootstrap times:
6050
6051         BEFORE
6052                 Run 1:   8.74 seconds
6053                 Run 2:   8.71 seconds
6054
6055         AFTER
6056                 Run 1:   8.64 seconds
6057                 Run 2:   8.58 seconds
6058
6059
6060 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6061
6062         * cs-parser.jay:
6063         * gen-treedump.cs:
6064         * statement.cs:
6065         This patch does a few things:
6066                 1. EmptyStatement is now a singleton, so it is never reallocated.
6067                 2. All blah is EmptyStatement constructs have been changed to
6068                    blah == EmptyStatement.Value, which is much faster and valid
6069                    now that EmptyStatement is a singleton.
6070                 3. When resolving a block, rather than allocating a new array for
6071                    the non-empty statements, empty statements are replaced with
6072                    EmptyStatement.Value
6073                 4. Some recursive functions have been made non-recursive.
6074         Mainly the performance impact is from (3), however (1) and (2) are needed for
6075         this to work. (4) does not make a big difference in normal situations, however
6076         it makes the profile look saner.
6077
6078         Bootstrap times:
6079
6080         BEFORE
6081         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
6082         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
6083         Total memory allocated: 56397 KB
6084
6085         AFTER
6086         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
6087         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
6088         Total memory allocated: 55666 KB
6089
6090 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6091
6092         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
6093         than the hashtable in a hashtable version
6094
6095         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
6096         we always end up concating a string. This results in a huge perf
6097         loss, because many strings have to be tracked by the GC. In this
6098         patch, we first use a hashtable that works with two keys, so that
6099         the strings do not need to be concat'ed.
6100
6101         Bootstrap times:
6102         BEFORE
6103                 Run 1:   8.74 seconds
6104                 Run 2:   8.71 seconds
6105
6106         AFTER
6107                 Run 1:   8.65 seconds
6108                 Run 2:   8.56 seconds
6109
6110 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
6111
6112         * Makefile: Add a new target `do-time' that does a quick and simple
6113         profile, leaving easy to parse output.
6114
6115 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
6116
6117         * codegen.cs (Init): Create the dynamic assembly with 
6118         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
6119
6120 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
6121
6122         * support.cs: Make the PtrHashtable use only one
6123         instance of its comparer.
6124
6125 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
6126
6127         * typemanager.cs: Fix lookup of GetNamespaces.
6128
6129 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
6130
6131         * expression.cs: Removed redundant line.
6132
6133         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
6134         ArrayLists, use for loops with bounds.  
6135
6136         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
6137         arraylist.
6138
6139         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
6140         arraylists, use for loop with bounds.
6141
6142         The above three changes give us a 0.071 second performance
6143         improvement out of 3.294 seconds down to 3.223.  On my machine
6144         the above changes reduced the memory usage by 1,387 KB during
6145         compiler bootstrap.
6146
6147         * cs-parser.jay (QualifiedIdentifier): New class used to represent
6148         QualifiedIdentifiers.  Before we created a new string through
6149         concatenation, and mostly later on, the result would be
6150         manipulated by DecomposeQI through string manipulation.
6151
6152         This reduced the compiler memory usage for bootstrapping from
6153         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
6154         compile times in 0.05 seconds.
6155
6156 2003-11-28  Dick Porter  <dick@ximian.com>
6157
6158         * support.cs: Do string compares with the Invariant culture.
6159
6160         * rootcontext.cs: 
6161         * gen-treedump.cs: 
6162         * expression.cs: 
6163         * driver.cs: 
6164         * decl.cs: 
6165         * codegen.cs: 
6166         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
6167         the comparison is done with the Invariant culture.
6168
6169 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
6170
6171         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
6172         GetEnumerator method.
6173
6174         (ProbeCollectionType): Iterate starting at the most specific type
6175         upwards looking for a GetEnumerator
6176
6177         * expression.cs: Shift count can be up to 31 for int/uint and 63
6178         for long/ulong.
6179
6180 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
6181
6182         * statement.cs (Block.LookupLabel): Also look for the label on the
6183         children blocks.  Use a hash table to keep track of visited
6184         nodes. 
6185
6186         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
6187         we actually did transform the other operand, otherwise fall back
6188         to the common codepath that casts to long.
6189
6190         * cs-tokenizer.cs: Use the same code pattern as the int case.
6191         Maybe I should do the parsing myself, and avoid depending on the
6192         Parse routines to get this done.
6193
6194 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
6195
6196         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
6197         which fixes bug 51347.  This time test it.
6198
6199         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
6200         attributes for example can not tell the difference between these.
6201         The difference was only a syntax feature of the language. 
6202
6203         * attribute.cs: Apply attributes to delegates.
6204
6205         * delegate.cs: Call the apply attributes method.
6206
6207 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
6208
6209         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
6210         comparing 0 vs Byte.MinValue, not the value
6211
6212         (ImplicitConversionRequired): When reporting a conversion error,
6213         use error 31 to print out the constant error instead of the
6214         simpler 29.
6215
6216         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
6217         which fixes bug 51347.
6218
6219 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
6220
6221         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
6222         which fixes the -warnaserror command line option.
6223
6224 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
6225
6226         * cfold.cs (DoNumericPromotions): During constant folding of
6227         additions on UIntConstant, special case intconstants with
6228         IntConstants like we do on the expression binary operator. 
6229
6230 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
6231
6232         * convert.cs (ImplicitReferenceConversion): We were missing a case
6233         (System.Enum are not value types or class types, so we need to
6234         classify them separatedly).
6235
6236         * driver.cs: We do not support error 2007.
6237
6238 2003-11-12 Jackson Harper <jackson@ximian.com>
6239
6240         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
6241         system directory. Also use the full file name so users can
6242         libraries names mscorlib-o-tron.dll in a non system dir.
6243
6244 2003-11-10  Martin Baulig  <martin@ximian.com>
6245
6246         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
6247         (TypeManager.InitCoreTypes): Initialize them here, but instead of
6248         calling `ResolveType()' on them, directly assign their `Type'.
6249
6250 2003-11-08  Martin Baulig  <martin@ximian.com>
6251
6252         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
6253         return value and the `out parent' parameter.
6254         (TypeContainer.DefineType): Moved the CS0644 check into
6255         GetClassBases().  Don't pass the interface types to the
6256         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
6257         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
6258
6259         * ecore.cs (TypeExpr.IsAttribute): New property.
6260         (TypeExpr.GetInterfaces): New method.
6261
6262         * interface.cs (Interface.GetInterfaceTypeByName): Return a
6263         TypeExpr instead of a Type.
6264         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
6265         (Interface.DefineType): Don't pass the interface types to the
6266         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
6267         them later and then call `TypeBulider.AddInterfaceImplementation()'.
6268
6269         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
6270         instead of a `Type[]'.
6271         (TypeManager.RegisterBuilder): Likewise.
6272         (TypeManager.AddUserInterface): Likewise.
6273         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
6274         `Type[]' and also return a `TypeExpr[]'.
6275         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
6276
6277 2003-11-08  Martin Baulig  <martin@ximian.com>
6278
6279         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
6280         Expression.     
6281
6282 2003-11-08  Martin Baulig  <martin@ximian.com>
6283
6284         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
6285         TypeManager.ResolveExpressionTypes().
6286
6287         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
6288         instead of an Expression.
6289         (TypeExpr): This is now an abstract base class for `TypeExpression'.
6290         (TypeExpression): New public class; formerly known as `TypeExpr'.
6291
6292         * expression.cs (ComposedCast): Derive from TypeExpr.
6293
6294         * typemanager.cs (TypeManager.system_*_expr): These are now
6295         TypExpr's instead of Expression's.
6296         (TypeManager.ResolveExpressionTypes): New public static function;
6297         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
6298         of them.        
6299
6300 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
6301
6302         * expression.cs (New.DoResolve): Do not dereference value that
6303         might be a null return.
6304
6305         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
6306         sure that the constant value has the right type.  Fixes an
6307         unreported bug, similar to 50425.
6308
6309         * const.cs (Const.LookupConstantValue): Call
6310         ImplicitStandardConversionExists before doing a conversion to
6311         avoid havng the TypeManager.ChangeType do conversions.
6312
6313         Reduced the number of casts used
6314
6315         (Const.ChangeType): New routine to enable reuse of the constant
6316         type changing code from statement.
6317
6318         * typemanager.cs (ChangeType): Move common initialization to
6319         static global variables.
6320
6321         Fixes #50425.
6322
6323         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
6324         every value type to go through, even if it was void.  Fix that. 
6325
6326         * cs-tokenizer.cs: Use is_identifier_start_character on the start
6327         character of the define, and the is_identifier_part_character for
6328         the rest of the string.
6329
6330 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
6331
6332         * expression.cs (UnaryMutator.EmitCode): When I updated
6333         LocalVariableReference.DoResolve, I overdid it, and dropped an
6334         optimization done on local variable references.
6335
6336 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
6337
6338         * ecore.cs: Convert the return from Ldlen into an int.
6339
6340 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
6341
6342         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
6343         the accessibility, this is a special case for toplevel non-public
6344         classes (internal for instance).
6345
6346 2003-10-20  Nick Drochak <ndrochak@gol.com>
6347
6348         * ecore.cs: Fix typo and build.  Needed another right paren.
6349
6350 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
6351
6352         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
6353         `internal' case regular and protected, but not allowing protected
6354         to be evaluated later.  Bug 49840
6355
6356 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
6357
6358         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
6359         to kb.Nlast, and not the kb.nFirst to isolate the switch
6360         statement.
6361
6362         Extract the underlying type, so enumerations of long/ulong are
6363         treated like long/ulong.
6364
6365 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
6366
6367         * expression.cs (New): Overload the meaning of RequestedType to
6368         track the possible creation of the NewDelegate type, since
6369         DoResolve is invoked more than once for new constructors on field
6370         initialization.
6371
6372         See bugs: #48800 and #37014
6373
6374         * cs-parser.jay (declare_local_constants): Take an arraylist
6375         instead of a single constant.
6376
6377         (local_constant_declaration): It should take a
6378         constant_declarators, not a constant_declarator.  Fixes 49487
6379
6380         * convert.cs: Fix error report.
6381
6382 2003-10-13 Jackson Harper <jackson@ximian.com>
6383
6384         * typemanager.cs (TypeToCoreType): Add float and double this fixes
6385         bug #49611
6386
6387 2003-10-09  Martin Baulig  <martin@ximian.com>
6388
6389         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
6390         to the .ctor.
6391         (MethodCore.DoDefineParameters): Removed the TypeContainer
6392         argument; use the DeclSpace which was passed to the .ctor instead.
6393         (MethodCore.CheckParameter): Take a DeclSpace instead of a
6394         TypeContainer; we only need a DeclSpace here.
6395
6396 2003-10-09  Martin Baulig  <martin@ximian.com>
6397
6398         * class.cs (MethodData): Added additional `DeclSpace ds' argument
6399         to the .ctor.
6400         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
6401         EmitContext's .ctor.    
6402
6403 2003-10-09  Martin Baulig  <martin@ximian.com>
6404
6405         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
6406         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
6407         AsAccessible(), moved them as well.
6408
6409         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
6410
6411 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
6412
6413         * cs-parser.jay : Renamed yyName to yyNames related to jay.
6414
6415 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
6416
6417         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
6418         generation for >=, as spotted by Paolo, bug 48679.  
6419         Patch from David Waite.
6420
6421         * cs-tokenizer.cs: Add handling for #pragma.
6422
6423         * cs-parser.jay: Allow for both yield and yield return in the
6424         syntax.  The anti-cobolization of C# fight will go on!
6425
6426         * class.cs (TypeBuilder.DefineType): Catch error condition here
6427         (Parent.DefineType erroring out and returning null).
6428
6429         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
6430         coping with enumerations variables, we were mistakenly processing
6431         them as a regular value type instead of built-in types.  Fixes the
6432         bug #48063
6433
6434         * typemanager.cs (IsBuiltinOrEnum): New method.
6435
6436 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
6437
6438         * cs-parser.jay: Upgrade: yield now needs the return clause.
6439
6440 2003-09-19  Martin Baulig  <martin@ximian.com>
6441
6442         * decl.cs (MemberCache.SetupCacheForInterface): Take a
6443         `MemberCache parent' argument.  Normally, an interface doesn't
6444         have a parent type except System.Object, but we use this in gmcs
6445         for generic type parameters.
6446
6447 2003-09-18  Martin Baulig  <martin@ximian.com>
6448
6449         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
6450         on `type.IsInterface'; don't check whether the type has a parent
6451         to determine whether it's an interface.
6452
6453 2003-09-15  Martin Baulig  <martin@ximian.com>
6454
6455         * class.cs (TypeContainer.DefineType): Added an error flag to
6456         avoid reporting duplicate CS0146's ("class definition is
6457         circular.").
6458
6459         * driver.cs (Driver.MainDriver): Abort if
6460         RootContext.ResolveTree() reported any errors.
6461
6462 2003-09-07  Martin Baulig  <martin@ximian.com>
6463
6464         * report.cs (Error, Warning): Added overloaded versions which take
6465         a `params object[] args' and call String.Format().
6466
6467 2003-09-07  Martin Baulig  <martin@ximian.com>
6468
6469         * decl.cs (DeclSpace..ctor): Don't call
6470         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
6471         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
6472         (DeclSpace.RecordDecl): New method.
6473
6474         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
6475
6476 2003-09-02  Ravi Pratap  <ravi@ximian.com>
6477
6478         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
6479         value attributes to be applied to ParameterBuilders.
6480
6481         * class.cs (MethodCore.LabelParameters): Make static and more
6482         generic so that it can be used from other places - like interface
6483         methods, for instance.
6484
6485         * interface.cs (Interface.Emit): Call LabelParameters before
6486         emitting attributes on the InterfaceMethod.
6487
6488 2003-08-26  Martin Baulig  <martin@ximian.com>
6489
6490         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
6491         resolving aliases; fixes #47927.
6492
6493 2003-08-26  Martin Baulig  <martin@ximian.com>
6494
6495         * statement.cs (Using.DoResolve): This is internally emitting a
6496         try/finally clause, so we need to set ec.NeedExplicitReturn if we
6497         do not always return.  Fixes #47681.
6498
6499 2003-08-26  Martin Baulig  <martin@ximian.com>
6500
6501         * decl.cs (MemberCore): Moved WarningNotHiding(),
6502         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
6503         into MemberBase.
6504         (AdditionResult): Make this nested in DeclSpace.
6505         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
6506         argument; call NamespaceEntry.Define() unless we're nested in a
6507         class or struct.
6508
6509         * namespace.cs (Namespace.DefineName): New public function.  This
6510         is called from DeclSpace's .ctor to add 
6511         (Namespace.Lookup): Include DeclSpaces in the lookup.
6512
6513         * class.cs (Operator): Derive from MemberBase, not MemberCore.
6514
6515         * const.cs (Const): Derive from MemberBase, not MemberCore.     
6516
6517 2003-08-25  Martin Baulig  <martin@ximian.com>
6518
6519         * convert.cs (Convert.ExplicitReferenceConversion): When
6520         converting from an interface type to a class, unbox if the target
6521         type is a struct type.  Fixes #47822.
6522
6523 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
6524
6525         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
6526         #47854.
6527
6528 2003-08-22  Martin Baulig  <martin@ximian.com>
6529
6530         * class.cs (TypeManager.DefineType): When defining a nested type,
6531         call DefineType() on our parent; fixes #47801.
6532
6533 2003-08-22  Martin Baulig  <martin@ximian.com>
6534
6535         * class.cs (MethodData.Define): While checking if a method is an
6536         interface implementation, improve the test a bit more to fix #47654.
6537
6538 2003-08-22  Martin Baulig  <martin@ximian.com>
6539
6540         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
6541         correctly; fixes #47722.
6542
6543 2003-08-22  Martin Baulig  <martin@ximian.com>
6544
6545         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
6546         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
6547
6548         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
6549
6550 2003-08-22  Martin Baulig  <martin@ximian.com>
6551
6552         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
6553         can only be assigned in static constructors.  Fixes #47161.
6554
6555 2003-08-22  Martin Baulig  <martin@ximian.com>
6556
6557         Rewrote and improved the flow analysis code.
6558
6559         * flowbranching.cs (FlowBranching): Make this class abstract.
6560         (FlowBranching.CreateBranching): New static function to create a
6561         new flow branching.
6562         (FlowBranchingBlock, FlowBranchingException): New classes.
6563         (FlowBranching.UsageVector.Type): New public readonly field.
6564         (FlowBranching.UsageVector.Breaks): Removed the setter.
6565         (FlowBranching.UsageVector.Returns): Removed the setter.
6566         (FlowBranching.UsageVector): Added Break(), Return(),
6567         NeverReachable() and Throw() methods to modify the reachability.
6568         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
6569         done by FlowBranching.Merge().
6570         (FlowBranching.UsageVector.MergeChild): New method; merges the
6571         merge result into the current vector.
6572         (FlowBranching.Merge): New abstract method to merge a branching.
6573
6574 2003-08-12  Martin Baulig  <martin@ximian.com>
6575
6576         * expression.cs (Indirection.CacheTemporaries): Create the
6577         LocalTemporary with the pointer type, not its element type.
6578
6579 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
6580
6581         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
6582         token was a keyword or not.
6583
6584         Add `error' options where an IDENTIFIER was expected;  Provide
6585         CheckToken and CheckIdentifierToken convenience error reporting
6586         functions. 
6587
6588         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
6589
6590         * decl.cs: Rename `NamespaceEntry Namespace' public field into
6591         NameSpaceEntry NameSpaceEntry.
6592
6593         (LookupInterfaceOrClass): Avoid creating a full qualified name
6594         from namespace and name: avoid doing lookups when we know the
6595         namespace is non-existant.   Use new Tree.LookupByNamespace which
6596         looks up DeclSpaces based on their namespace, name pair.
6597
6598         * driver.cs: Provide a new `parser verbose' to display the
6599         exception thrown during parsing.  This is turned off by default
6600         now, so the output of a failure from mcs is more graceful.
6601
6602         * namespace.cs: Track all the namespaces defined in a hashtable
6603         for quick lookup.
6604
6605         (IsNamespace): New method
6606
6607 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
6608
6609         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
6610         we know that we need to concatenate (full typename can never be
6611         null). 
6612
6613         * class.cs: ditto.
6614
6615         * statement.cs: Use a bitfield;  Do not initialize to null things
6616         which are done by the constructor by default.
6617
6618         * cs-parser.jay: bug fix, parameter was 4, not 3.
6619
6620         * expression.cs: Just use the property;
6621
6622         * statement.cs: No need for GetVariableInfo method.
6623
6624 2003-08-08  Martin Baulig  <martin@ximian.com>
6625
6626         * flowanalysis.cs (FlowReturns): This is now nested in the
6627         `FlowBranching' class.
6628         (MyBitVector): Moved this here from statement.cs.
6629         (FlowBranching.SiblingType): New enum type.
6630         (FlowBranching.CreateSibling): Added `SiblingType' argument.
6631
6632 2003-08-07  Martin Baulig  <martin@ximian.com>
6633
6634         * flowanalysis.cs (FlowBranchingType): This is now nested in the
6635         `FlowBranching' class and called `BranchingType'.
6636
6637 2003-08-07  Martin Baulig  <martin@ximian.com>
6638
6639         * flowanalysis.cs: Moved all the control flow analysis code into
6640         its own file.
6641
6642 2003-08-07  Martin Baulig  <martin@ximian.com>
6643
6644         * assign.cs (Assign.DoResolve): `target' must either be an
6645         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
6646         #37319.
6647
6648 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
6649
6650         * expression.cs (BinaryMethod): This kind of expression is created by the
6651         Binary class if it determines that the operator has to be handled
6652         by a method.
6653
6654         (BinaryDelegate): This kind of expression is created if we are
6655         dealing with a + or - operator on delegates.
6656
6657         (Binary): remove method, argumetns, and DelegateOperator: when
6658         dealing with methods, 
6659
6660         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
6661
6662         * statement.cs (Block): use bitfields for the three extra booleans
6663         we had in use.   Remove unused topblock parameter.
6664
6665         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
6666
6667         * assign.cs: Drop extra unneeded tests.
6668
6669 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
6670
6671         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
6672
6673         * statement.cs (Foreach): Use VariableStorage instead of
6674         LocalBuilders.   
6675
6676         * codegen.cs (VariableStorage): New class used by clients that
6677         require a variable stored: locals or fields for variables that
6678         need to live across yield.
6679
6680         Maybe provide a convenience api for EmitThis+EmitLoad?
6681
6682         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
6683         these bad boys.
6684
6685 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
6686
6687         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
6688         RemapParameterLValue): New methods that are used to turn a
6689         precomputed FieldInfo into an expression like this:
6690
6691                 instance.FieldInfo
6692
6693         The idea is to use this instead of making LocalVariableReference
6694         have more than one meaning.
6695
6696         * cs-parser.jay: Add error production to BASE.
6697
6698         * ecore.cs: Deal with TypeManager.GetField returning null, which
6699         is now a valid return value.
6700
6701         (FieldExprNoAddress): New expression for Fields whose address can
6702         not be taken.
6703
6704         * expression.cs (LocalVariableReference): During the resolve
6705         phases, create new expressions if we are in a remapping context.
6706         Remove code that dealt with remapping here.
6707
6708         (ParameterReference): same.
6709
6710         (ProxyInstance): New expression, like the `This' expression, but
6711         it is born fully resolved.  We know what we are doing, so remove
6712         the errors that are targeted to user-provided uses of `this'.
6713
6714         * statement.cs (Foreach): our variable is now stored as an
6715         Expression;  During resolution, follow the protocol, dont just
6716         assume it will return this.
6717
6718 2003-08-06  Martin Baulig  <martin@ximian.com>
6719
6720         * support.cs (SeekableStreamReader.cs): New public class.
6721
6722         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
6723         SeekableStreamReader instead of the normal StreamReader.
6724
6725 2003-08-04  Martin Baulig  <martin@ximian.com>
6726
6727         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
6728         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
6729         deambiguate casts and delegate invocations.
6730         (parenthesized_expression): Use the new tokens to ensure this is
6731         not a cast of method invocation.
6732
6733         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
6734         when reading a `)' and Deambiguate_CloseParens () was previously
6735         called.
6736
6737         * expression.cs (ParenthesizedExpression): New class.  This is
6738         just used for the CS0075 test.
6739         (Binary.DoResolve): Check for CS0075.   
6740
6741 2003-07-29  Ravi Pratap  <ravi@ximian.com>
6742
6743         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
6744         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
6745         reference comparison.
6746
6747         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
6748         examine the ReturnType for equality - this is necessary in the
6749         cases of implicit and explicit operators whose signature also
6750         includes the return type.
6751
6752 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
6753
6754         * namespace.cs: Cache the result of the namespace computation,
6755         instead of computing it every time.
6756
6757 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
6758
6759         * decl.cs: Use a global arraylist that we reuse over invocations
6760         to avoid excesive memory consumption.  Reduces memory usage on an
6761         mcs compile by one meg (45 average).
6762
6763         * typemanager.cs (LookupTypeReflection): In .NET pointers are
6764         private, work around that.
6765
6766 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
6767
6768         * literal.cs (IntLiteral): Define Zero and One static literals. 
6769
6770         * cs-parser.jay (integer_literal): use static literals to reduce
6771         memory usage for the most used literals (0, 1 and -1).  211kb
6772         reduced in memory usage.
6773
6774         Replace all calls to `new ArrayList' with `new
6775         ArrayList(4)' which is a good average number for most allocations,
6776         and also requires only 16 bytes of memory for its buffer by
6777         default. 
6778
6779         This reduced MCS memory usage in seven megabytes for the RSS after
6780         bootstrapping.
6781
6782 2003-07-28  Ravi Pratap  <ravi@ximian.com>
6783
6784         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
6785         handle params methods the correct way by forming only one
6786         applicable set with params and normal methods in them. Earlier we
6787         were looking at params methods only if we found no normal methods
6788         which was not the correct thing to do.
6789
6790         (Invocation.BetterFunction): Take separate arguments indicating
6791         when candidate and the best method are params methods in their
6792         expanded form.
6793
6794         This fixes bugs #43367 and #46199.
6795
6796         * attribute.cs: Documentation updates.
6797
6798         (CheckAttribute): Rename to CheckAttributeTarget.
6799         (GetValidPlaces): Rename to GetValidTargets.
6800
6801         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
6802         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
6803
6804         Fixes bug #44468.
6805
6806 2003-07-28  Martin Baulig  <martin@ximian.com>
6807
6808         * class.cs (TypeContainer.DefineMembers): Use the base type's full
6809         name when looking up the base class of a nested class.  Fixes #46977.
6810
6811 2003-07-26  Martin Baulig  <martin@ximian.com>
6812
6813         * expression.cs (Indexers.Indexer): New nested struct; contains
6814         getter, setter and the indexer's type.
6815         (Indexers.Properties): This is now an ArrayList of
6816         Indexers.Indexer's.
6817         (IndexerAccess.DoResolveLValue): Correctly set the type if the
6818         indexer doesn't have any getters.
6819
6820         * assign.cs (Assign.DoResolve): Also do the implicit conversions
6821         for embedded property and indexer assignments.
6822
6823 2003-07-26  Martin Baulig  <martin@ximian.com>
6824
6825         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
6826         preprocessor directive is not the first non-whitespace character
6827         on a line.
6828
6829 2003-07-26  Martin Baulig  <martin@ximian.com>
6830
6831         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
6832         namespace parsing, follow the spec more closely.
6833
6834         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
6835         NamespaceEntry.Lookup().
6836
6837 2003-07-25  Martin Baulig  <martin@ximian.com>
6838
6839         * MethodCore.cs (OverridesSomething): New public field; it's set
6840         from TypeContainer.DefineMembers if this method overrides
6841         something (which doesn't need to be a method).  Fix #39462.
6842
6843 2003-07-25  Ravi Pratap  <ravi@ximian.com>
6844
6845         * typemanager.cs (GetMembers): Ensure that the list of members is
6846         reversed. This keeps things in sync.
6847
6848         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
6849         find an AttributeUsage attribute.
6850
6851         * expression.cs (Invocation.OverloadResolve): Perform the check
6852         which disallows Invoke to be directly called on a Delegate.
6853
6854         (Error_InvokeOnDelegate): Report error cs1533.
6855
6856 2003-07-25  Martin Baulig  <martin@ximian.com>
6857
6858         * expression.cs (Indexers.GetIndexersForType): Only look in the
6859         interface hierarchy if the requested type is already an
6860         interface.  Fixes #46788 while keeping #46502 fixed.
6861
6862 2003-07-25  Martin Baulig  <martin@ximian.com>
6863
6864         * class.cs (TypeContainer.DefineMembers): Check whether all
6865         readonly fields have been assigned and report warning CS0649 if
6866         not.
6867
6868         * statement.cs (LocalInfo.IsFixed): Always return true if this is
6869         a valuetype.
6870
6871 2003-07-24  Ravi Pratap  <ravi@ximian.com>
6872
6873         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
6874         returned from GetMethods to make things consistent with the
6875         assumptions MCS makes about ordering of methods.
6876
6877         This should comprehensively fix bug #45127 and it does :-)
6878
6879         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
6880         ordering is actually reverse.
6881
6882         * Clean up some debug messages I left lying around.
6883
6884         * interface.cs (Populate*): Get rid of code which emits attributes
6885         since the stage in which we emit attributes is the 'Emit' stage,
6886         not the define stage.
6887
6888         (Emit): Move attribute emission for interface members here.
6889
6890 2003-07-22  Ravi Pratap  <ravi@ximian.com>
6891
6892         * expression.cs (Invocation.OverloadResolve): Follow the spec more
6893         closely: we eliminate methods in base types when we have an
6894         applicable method in a top-level type.
6895
6896         Please see section 14.5.5.1 for an exact description of what goes
6897         on. 
6898
6899         This fixes bug #45127 and a host of other related to corlib compilation.
6900
6901         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
6902         array is the method corresponding to the top-level type (this is
6903         because of the changes made to icall.c) so we change this
6904         accordingly.
6905
6906         (MethodGroupExpr.Name): This too.
6907
6908         * typemanager.cs (GetElementType): New method which does the right
6909         thing when compiling corlib. 
6910
6911         * everywhere: Make use of the above in the relevant places.
6912
6913 2003-07-22  Martin Baulig  <martin@ximian.com>
6914
6915         * cs-parser.jay (invocation_expression): Moved
6916         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
6917         `cast_expression', but create a InvocationOrCast which later
6918         resolves to either an Invocation or a Cast.
6919
6920         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
6921         method; call this before EmitStatement() to make sure that this
6922         expression can be used as a statement.
6923
6924         * expression.cs (InvocationOrCast): New class; resolves to either
6925         an Invocation or a Cast.
6926
6927         * statement.cs (StatementExpression): Call ResolveStatement() on
6928         the ExpressionStatement before emitting it.
6929
6930 2003-07-21  Martin Baulig  <martin@ximian.com>
6931
6932         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
6933         `ref' and `out' attributes match; fixes #46220.
6934         (MemberAccess.ResolveMemberAccess): You can't reference a type
6935         through an expression; fixes #33180.
6936         (Indexers.GetIndexersForType): Don't return the indexers from
6937         interfaces the class implements; fixes #46502.
6938
6939 2003-07-21  Martin Baulig  <martin@ximian.com>
6940
6941         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
6942         CS0661 checks; fixes bug #30442.
6943
6944 2003-07-21  Martin Baulig  <martin@ximian.com>
6945
6946         * decl.cs (AdditionResult): Added `Error'.
6947
6948         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
6949
6950         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
6951         makes cs0031.cs actually work.
6952
6953 2003-07-20  Martin Baulig  <martin@ximian.com>
6954
6955         * namespace.cs: Fixed that bug which caused a crash when compiling
6956         the debugger's GUI.
6957
6958 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
6959
6960         * typemanager.cs (LookupTypeReflection): Never expose types which
6961         are NotPublic, NestedPrivate, NestedAssembly, or
6962         NestedFamANDAssem.  We used to return these, and later do a check
6963         that would report a meaningful error, but the problem is that we
6964         would not get the real match, if there was a name override.
6965
6966 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
6967
6968         * namespace.cs (Namespace, Name): Do not compute the namespace
6969         name dynamically, compute it in the constructor.  This reduced
6970         memory usage by 1697 KB.
6971
6972         * driver.cs: Use --pause to pause at the end.
6973
6974 2003-07-17  Peter Williams  <peter@newton.cx>
6975
6976         * Makefile: Change the name of the test target so that it doesn't
6977         conflict with the recursive test target.
6978
6979 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
6980
6981         * expression.cs (LocalVariableReference.Emit, EmitAssign,
6982         AddressOf): Do not use EmitThis, that was wrong, use the actual
6983         this pointer.
6984
6985 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
6986
6987         * class.cs (MethodData.Define): While checking if a method is an
6988         interface implementation, improve the test: If we are not public
6989         (use new test here: use the computed MethodAttributes directly,
6990         instead of the parsed modifier flags) check if the `implementing'
6991         method comes from an interface or not.
6992
6993         * pending.cs (VerifyPendingMethods): Slightly better error
6994         message.
6995
6996         * makefile: add test target that does the mcs bootstrap.
6997
6998 2003-07-16  Ravi Pratap  <ravi@ximian.com>
6999
7000         * interface.cs (Define): Do nothing here since there are no
7001         members to populate etc. Move the attribute emission out of here
7002         since this was just totally the wrong place to put it. Attribute
7003         application happens during the 'Emit' phase, not in the 'Define'
7004         phase.
7005
7006         (Emit): Add this method and move the attribute emission here
7007
7008         * rootcontext.cs (EmitCode): Call the Emit method on interface
7009         types too.
7010
7011 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
7012
7013         * expression.cs (OverloadResolve): Report error only if Location
7014         is not 'Null' which means that there was a probe going on.
7015
7016 2003-07-14  Martin Baulig  <martin@ximian.com>
7017
7018         * expression.cs (ConditionalLogicalOperator): New public class to
7019         implement user defined conditional logical operators.
7020         This is section 14.11.2 in the spec and bug #40505.
7021
7022 2003-07-14  Martin Baulig  <martin@ximian.com>
7023
7024         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
7025
7026 2003-07-14  Martin Baulig  <martin@ximian.com>
7027
7028         * codegen.cs (EmitContext.InFixedInitializer): New public field.
7029
7030         * ecore.cs (IVariable.VerifyFixed): New interface method.
7031
7032         * expression.cs (Unary.ResolveOperator): When resolving the `&'
7033         operator, check whether the variable is actually fixed.  Fixes bug
7034         #36055.  Set a variable definitely assigned when taking its
7035         address as required by the spec.
7036
7037         * statement.cs (LocalInfo.IsFixed): New field.
7038         (LocalInfo.MakePinned): Set `IsFixed' to true.
7039
7040 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
7041
7042         * attribute.cs (Attribute.Resolve): While doing a Member lookup
7043         for .ctors, ensure that we only ask for members declared in the
7044         attribute type (BindingFlags.DeclaredOnly).
7045
7046         Fixes bug #43632.
7047
7048         * expression.cs (Error_WrongNumArguments): Report error 1501
7049         correctly the way CSC does.
7050
7051 2003-07-13  Martin Baulig  <martin@ximian.com>
7052
7053         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
7054         lookup on the fully qualified name, to make things like "X.X" work
7055         where "X.X" is a fully qualified type name, but we also have a
7056         namespace "X" in the using list.  Fixes #41975.
7057
7058 2003-07-13  Martin Baulig  <martin@ximian.com>
7059
7060         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
7061         function. If we're a CompoundAssign, we need to create an embedded
7062         CompoundAssign, not an embedded Assign.
7063         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
7064         Fixes #45854.
7065
7066 2003-07-13  Martin Baulig  <martin@ximian.com>
7067
7068         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
7069         work to fix bug #46088.
7070
7071 2003-07-13  Ravi Pratap <ravi@ximian.com>
7072
7073         * class.cs (Operator.Emit): Do not emit attributes here - it is
7074         taken care of by the Method class that we delegate too. This takes
7075         care of bug #45876.
7076
7077 2003-07-10  Martin Baulig  <martin@ximian.com>
7078
7079         * expression.cs (TypeOfVoid): New class.
7080         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
7081
7082 2003-07-10  Martin Baulig  <martin@ximian.com>
7083
7084         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
7085         bug #35957.
7086
7087 2003-07-10  Martin Baulig  <martin@ximian.com>
7088
7089         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
7090         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
7091
7092         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
7093
7094         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
7095
7096 2003-07-10  Martin Baulig  <martin@ximian.com>
7097
7098         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
7099         of decimal.  Fixes #42850.
7100
7101         NOTE: I also fixed the created byte blob, but this doesn't work on
7102         the MS runtime and csc never produces any byte blobs for decimal
7103         arrays.
7104
7105 2003-07-10  Martin Baulig  <martin@ximian.com>
7106
7107         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
7108         structs; fixes #32068.
7109         (Block.AddChildVariableNames): Fixed #44302.
7110
7111 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7112
7113         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
7114
7115 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7116
7117         * attribute.cs: And this test is onger needed.
7118
7119 2003-07-08  Martin Baulig  <martin@ximian.com>
7120
7121         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
7122         inaccessible types.  Fixes #36313.
7123
7124         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
7125
7126         * namespace.cs (NamespaceEntry): Create implicit entries for all
7127         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
7128         implicit entries for N1.N2 and N1.
7129
7130 2003-07-08  Martin Baulig  <martin@ximian.com>
7131
7132         Rewrote the handling of namespaces to fix a lot of the issues
7133         wrt. `using' aliases etc.
7134
7135         * namespace.cs (Namespace): Splitted this class into a
7136         per-assembly `Namespace' and a per-file `NamespaceEntry'.
7137
7138         * typemanager.cs (TypeManager.IsNamespace): Removed.
7139         (TypeManager.ComputeNamespaces): Only compute namespaces from
7140         loaded assemblies here, not the namespaces from the assembly we're
7141         currently compiling.
7142
7143 2003-07-08  Martin Baulig  <martin@ximian.com>
7144
7145         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
7146
7147 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7148
7149         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
7150         already fixed it.  
7151
7152         I thought about the memory savings here, but LookupTypeReflection
7153         is used under already very constrained scenarios.  Compiling
7154         corlib or mcs only exposes one hit, so it would not really reduce
7155         any memory consumption.
7156
7157 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
7158
7159         * typemanager.cs: fixes bug #45889 by only adding public types from
7160         other assemblies to the list of known types.
7161
7162 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
7163
7164         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
7165         on the type we resolved.
7166
7167 2003-07-05  Martin Baulig  <martin@ximian.com>
7168
7169         * pending.cs (PendingImplementation.ParentImplements): Don't
7170         create the proxy if the parent is abstract.
7171
7172         * class.cs (TypeContainer.DefineIndexers): Process explicit
7173         interface implementations first.  Fixes #37714.
7174
7175 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
7176
7177         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
7178         defined recursively;  but since we modify the input parameters
7179         (left is set to `this' temporarily), we reset this value if the
7180         left_is_explicit is false, which gives the original semantics to
7181         the code.  
7182
7183         * literal.cs (NullPointer): new class used to represent a null
7184         literal in a pointer context.
7185
7186         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
7187         type is a pointer, use a NullPointer object instead of a
7188         NullLiteral.   Closes 43687
7189
7190         (ExplicitConversion): Convert pointer values using
7191         the conv opcode to the proper type.
7192
7193         * ecore.cs (New): change ValueTypeVariable property into a method,
7194         that returns whether the valuetype is suitable for being used.
7195
7196         * expression.cs (Binary.DoNumericPromotions): Only return if we
7197         the int constant was a valid uint, and we can return both left and
7198         right as uints.  If not, we continue processing, to trigger the
7199         type conversion.  This fixes 39018.
7200
7201         * statement.cs (Block.EmitMeta): During constant resolution, set
7202         the CurrentBlock property on the emitcontext, so that we resolve
7203         constants propertly.
7204
7205 2003-07-02  Martin Baulig  <martin@ximian.com>
7206
7207         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
7208         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
7209
7210         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
7211         than emitting it here.
7212
7213         * statement.cs: Fixed some more flow analysis bugs.
7214
7215 2003-07-02  Martin Baulig  <martin@ximian.com>
7216
7217         * class.cs (MethodData.Define): When implementing interface
7218         methods, set Final unless we're Virtual.
7219
7220         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
7221         check work for interface methods.
7222
7223 2003-07-01  Martin Baulig  <martin@ximian.com>
7224
7225         * ecore.cs (EmitContext.This): Replaced this property with a
7226         GetThis() method which takes a Location argument.  This ensures
7227         that we get the correct error location for a CS0188.
7228
7229 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
7230
7231         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
7232         ImplicitStandardConversion.
7233
7234         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
7235
7236 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
7237
7238         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
7239         optimization.
7240
7241 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
7242
7243         * class.cs (Constructor.Define): Turn off initlocals for unsafe
7244         constructors.
7245
7246         (MethodData.Define): Turn off initlocals for unsafe methods.
7247
7248 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
7249
7250         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
7251         complete;  Fixes #37521.
7252
7253         * delegate.cs: Use Modifiers.TypeAttr to compute the
7254         TypeAttributes, instead of rolling our own.  This makes the flags
7255         correct for the delegates.
7256
7257 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
7258
7259         * class.cs (Constructor.Define): Set the private flag for static
7260         constructors as well.
7261
7262         * cs-parser.jay (statement_expression): Set the return value to
7263         null, to avoid a crash when we catch an error.
7264
7265 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
7266
7267         * cs-parser.jay: Applied patch from Jackson that adds support for
7268         extern and unsafe modifiers to destructor declarations.
7269
7270         * expression.cs: Report error 21 if the user is trying to index a
7271         System.Array.
7272
7273         * driver.cs: Add an error message, suggested by the bug report.
7274
7275         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
7276         if we do not have a ": this ()" constructor initializer.  Fixes 45149
7277
7278 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
7279
7280         * namespace.cs: Add some information to reduce FAQs.
7281
7282 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
7283
7284         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
7285         underlying enumeration types.  Fixes #43915.
7286
7287         * expression.cs: Treat ushort/short as legal values to be used in
7288         bitwise operations.
7289
7290 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
7291
7292         * delegate.cs: transfer custom attributes for paramenters from
7293         the delegate declaration to Invoke and BeginInvoke.
7294
7295 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
7296
7297         * attribute.cs: handle custom marshalers and emit marshal info
7298         for fields, too.
7299
7300 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
7301
7302         * makefile.gnu: Added anonymous.cs to the compiler sources.
7303
7304 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
7305
7306         * iterators.cs: Change the name of the proxy class to include two
7307         underscores.
7308
7309         * cs-parser.jay: Update grammar to include anonymous methods.
7310
7311         * anonymous.cs: new file.
7312
7313 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
7314
7315         * class.cs (Field.Define): Add missing test for pointers and
7316         safety. 
7317
7318 2003-05-27  Ravi Pratap  <ravi@ximian.com>
7319
7320         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
7321         we use the stobj opcode.
7322
7323         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
7324         since it wasn't the correct fix. 
7325
7326         It still is puzzling that we are required to use stobj for IntPtr
7327         which seems to be a ValueType.
7328
7329 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
7330
7331         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
7332         during regular simple name resolution.   Now, the trick is that
7333         instead of returning for processing the simplename, we do a
7334         TypeManager.LookupType (ie, a rooted lookup as opposed to a
7335         contextual lookup type).   If a match is found, return that, if
7336         not, return for further composition.
7337
7338         This fixes long-standing 30485.
7339
7340         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
7341         using the address to initialize an object, do an Stobj instead of
7342         using the regular Stelem.
7343
7344         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
7345         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
7346         Because if we are a BaseIndexerAccess that value will be true.
7347         Fixes 43643.
7348
7349         * statement.cs (GotoCase.Resolve): Return after reporting an
7350         error, do not attempt to continue. 
7351
7352         * expression.cs (PointerArithmetic.Emit): If our operand is a
7353         long, convert our constants to match the operand before
7354         multiplying.  Convert to I type before adding.   Fixes 43670.
7355
7356 2003-05-14  Ravi Pratap  <ravi@ximian.com>
7357
7358         * enum.cs (ImplicitConversionExists) : Rename to
7359         ImplicitEnumConversionExists to remove ambiguity. 
7360
7361         * ecore.cs (NullCast): New type of cast expression class which
7362         basically is very similar to EmptyCast with the difference being
7363         it still is a constant since it is used only to cast a null to
7364         something else
7365         (eg. (string) null)
7366
7367         * convert.cs (ImplicitReferenceConversion): When casting a null
7368         literal, we return a NullCast.
7369
7370         * literal.cs (NullLiteralTyped): Remove - I don't see why this
7371         should be around anymore.
7372
7373         The renaming (reported was slightly wrong). Corrections:
7374
7375         ConvertImplicitStandard -> ImplicitConversionStandard
7376         ConvertExplicitStandard -> ExplicitConversionStandard
7377
7378         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
7379         before passing them in !
7380
7381         * convert.cs (ImplicitConversionStandard): When comparing for
7382         equal expr and target types, ensure that expr is not a
7383         NullLiteral.
7384
7385         In general, we must not be checking (expr_type ==
7386         target_type) in the top level conversion methods
7387         (ImplicitConversion, ExplicitConversion etc). This checking is
7388         done in the methods that they delegate to.
7389
7390 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
7391
7392         * convert.cs: Move Error_CannotConvertType,
7393         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
7394         ImplicitNumericConversion, ImplicitConversionExists,
7395         ImplicitUserConversionExists, StandardConversionExists,
7396         FindMostEncompassedType, FindMostSpecificSource,
7397         FindMostSpecificTarget, ImplicitUserConversion,
7398         ExplicitUserConversion, GetConversionOperators,
7399         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
7400         TryImplicitIntConversion, Error_CannotConvertImplicit,
7401         ConvertImplicitRequired, ConvertNumericExplicit,
7402         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
7403         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
7404         its own file.
7405
7406         Perform the following renames:
7407
7408         StandardConversionExists -> ImplicitStandardConversionExists
7409         ConvertImplicit -> ImplicitConversion
7410         ConvertImplicitStandard -> ImplicitStandardConversion
7411         TryImplicitIntConversion -> ImplicitIntConversion
7412         ConvertImplicitRequired -> ImplicitConversionRequired
7413         ConvertNumericExplicit -> ExplicitNumericConversion
7414         ConvertReferenceExplicit -> ExplicitReferenceConversion
7415         ConvertExplicit -> ExplicitConversion
7416         ConvertExplicitStandard -> ExplicitStandardConversion
7417
7418 2003-05-19  Martin Baulig  <martin@ximian.com>
7419
7420         * statement.cs (TypeInfo.StructInfo): Made this type protected.
7421         (TypeInfo): Added support for structs having structs as fields.
7422
7423         * ecore.cs (FieldExpr): Implement IVariable.
7424         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
7425         VariableInfo for the field.
7426
7427 2003-05-18  Martin Baulig  <martin@ximian.com>
7428
7429         * expression.cs (This.DoResolve): Report a CS0027 if we're
7430         emitting a field initializer.
7431
7432 2003-05-18  Martin Baulig  <martin@ximian.com>
7433
7434         * expression.cs (This.ResolveBase): New public function.
7435         (This.DoResolve): Check for CS0188.
7436
7437         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
7438         This.Resolve().
7439
7440         * ecore.cs (MethodGroupExpr.DoResolve): Set the
7441         `instance_expression' to null if we don't have any non-static
7442         methods.
7443
7444 2003-05-18  Martin Baulig  <martin@ximian.com>
7445
7446         Reworked the way how local variables and parameters are handled by
7447         the flow analysis code.
7448
7449         * statement.cs (TypeInfo, VariableMap): New public classes.
7450         (VariableInfo): New public class.  This is now responsible for
7451         checking whether a variable has been assigned.  It is used for
7452         parameters and local variables.
7453         (Block.EmitMeta): Take the InternalParameters as argument; compute
7454         the layout of the flow vectors here.
7455         (Block.LocalMap, Block.ParameterMap): New public properties.
7456         (FlowBranching): The .ctor doesn't get the InternalParameters
7457         anymore since Block.EmitMeta() now computes the layout of the flow
7458         vector.
7459         (MyStructInfo): This class is now known as `StructInfo' and nested
7460         in `TypeInfo'; we don't access this directly anymore.
7461
7462         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
7463         property and removed IsAssigned(), IsFieldAssigned(),
7464         SetAssigned() and SetFieldAssigned(); we now call them on the
7465         VariableInfo so we don't need to duplicate this code everywhere.
7466
7467         * expression.cs (ParameterReference): Added `Block block' argument
7468         to the .ctor.
7469         (LocalVariableReference, ParameterReference, This): The new
7470         VariableInfo class is now responsible for all the definite
7471         assignment stuff.
7472
7473         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
7474         IsParameterAssigned, SetParameterAssigned): Removed.
7475
7476 2003-05-18  Martin Baulig  <martin@ximian.com>
7477
7478         * typemanager.cs (InitCoreTypes): Try calling
7479         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
7480         the 3-args-version.  Corlib now also needs our `void_type'.
7481         (GetMethod): Added overloaded version which takes an optional
7482         `bool report_errors' to allow lookups of optional methods.
7483
7484 2003-05-12  Martin Baulig  <martin@ximian.com>
7485
7486         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
7487         only used for locals and not for parameters.
7488
7489 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
7490
7491         * support.cs (InternalParameters.ParameterType): Return the
7492         ExternalType of the parameter.
7493
7494         * parameter.cs (Parameter.ExternalType): drop the two arguments,
7495         they were unused.
7496
7497 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
7498
7499         * class.cs (MethodData.Define): Do not set the `newslot' on
7500         interface members, if they are also flagged as "override".
7501
7502         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
7503         better code for ++i and i++.  This only works for static fields
7504         and local variables.
7505
7506         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
7507         want to pull the DeclSpace out of the builder_to_declspace instead
7508         of the TypeBuilder (like in TypeContainer.FindMembers).
7509
7510         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
7511         instead of LookupTypeContainer.  Fixes the crash on .NET for
7512         looking up interface members.
7513
7514         * const.cs: Create our own emit context during the Definition
7515         stage, so that constants are evaluated in the proper context, when
7516         a recursive definition happens.
7517
7518 2003-05-11  Martin Baulig  <martin@ximian.com>
7519
7520         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
7521         new block for a switch section.
7522         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
7523         the adding/lookup in the switch block.  Fixes #39828.
7524
7525 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
7526
7527         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
7528         functionality: I needed to convert the data after I had performed
7529         the add/sub operation into the operands type size.
7530
7531         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
7532         pass the type for the box operation, otherwise the resulting
7533         object would have been of type object.
7534
7535         (BoxedCast): Add constructor to specify the type to box as.
7536
7537 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
7538
7539         * iterators.cs: I was reusing the `count' variable inadvertently,
7540         take steps to not allow this to happen.
7541
7542 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
7543
7544         * attribute.cs (Attribute.Resolve): Params attributes are encoded
7545         by creating an array at the point where the params starts and
7546         putting all those arguments there, then adjusting the size of the
7547         array.
7548
7549 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
7550
7551         * expression.cs (New.AddressOf): Implement interface
7552         IMemoryLocation.  This is used when the `new' operator is used in
7553         the context of an invocation to a method on a value type.
7554
7555         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
7556         example. 
7557
7558         * namespace.cs: Also check the using aliases here.
7559
7560         * driver.cs: Move the test for using validity after the types have
7561         been entered, so we do a single pass that also includes the using
7562         aliases. 
7563
7564         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
7565         in the regular case.   CreateSiblingForFinally is doing extra
7566         error checking.
7567
7568         * attribute.cs (GetAttributeArgumentExpression): Store the result
7569         on an out value, and use the return value to indicate failure
7570         instead of using null (which is a valid return for Constant.GetValue).
7571
7572         * statement.cs: Perform the analysis flow for the increment
7573         portion after the statement, because this will be the real flow of
7574         execution.  Fixes #42385
7575
7576         * codegen.cs (EmitContext.EmitArgument,
7577         EmitContext.EmitStoreArgument): New helper functions when the
7578         RemapToProxy flag is set.
7579
7580         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
7581         function.
7582
7583         Add support for remapping parameters. 
7584
7585         * iterators.cs: Propagate parameter values;  Store parameter
7586         values in the proxy classes.
7587
7588 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
7589
7590         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
7591         need a proxy reference;  I do not know what I was thinking
7592
7593         * cs-parser.jay (constructor_initializer): catch another error,
7594         and display nice message.
7595
7596         (field_declaration): catch void field declaration
7597         to flag a better error. 
7598
7599         * class.cs (MemberBase.CheckBase): Report an error instead of a
7600         warning if a new protected member is declared in a struct. 
7601         (Field.Define): catch the error of readonly/volatile.
7602
7603         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
7604
7605         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
7606         volatile variable is taken
7607
7608 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
7609
7610         * statement.cs (Fixed.Resolve): Report an error if we are not in
7611         an unsafe context.
7612
7613 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
7614
7615         * typemanager.cs: reuse the code that handles type clashes for
7616         delegates and enumerations.
7617
7618         * class.cs (Report28): Always report.
7619
7620         * expression.cs (EncodeAsAttribute): Allow nulls here.
7621
7622 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
7623
7624         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
7625         the functionality for testing whether an expression is valid for
7626         an attribute here.  Also handle the case of arrays of elements
7627         being stored. 
7628
7629         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
7630         encoding a linear array into an array of objects that are suitable
7631         to be passed to an CustomAttributeBuilder.
7632
7633         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
7634
7635         * ecore.cs: (FieldExpr): Handle field remapping here.
7636
7637         * iteratators.cs: Pass the instance variable (if the method is an
7638         instance method) to the constructors, so we can access the field
7639         variables on the class.
7640
7641         TODO: Test this with structs.  I think the THIS variable on
7642         structs might have to be a pointer, and not a refenrece
7643
7644 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
7645
7646         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
7647         local variables to fields in a proxy class.
7648
7649         * iterators.cs (PopulateProxy): Rename our internal fields to
7650         <XXX>.  
7651         Create a <THIS> field if we are an instance method, so we can
7652         reference our parent container variables.
7653         (MapVariable): Called back from the EmitContext code to enter a
7654         new variable to field mapping into the proxy class (we just create
7655         a FieldBuilder).
7656
7657         * expression.cs
7658         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
7659         for using the remapped locals to fields.
7660
7661         I placed the code here, because that gives the same semantics to
7662         local variables, and only changes the Emit code.
7663
7664         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
7665         statements inside iterators.
7666         (VariableInfo): Add a FieldBuilder for the cases when we are
7667         remapping local variables to fields in a proxy class
7668
7669         * ecore.cs (SimpleNameResolve): Avoid testing two times for
7670         current_block != null.
7671
7672         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
7673         not cope with strings, as it has been moved to the
7674         TableSwitchEmit.  Fixed bug in switch generation.
7675
7676         * expression.cs (New.DoResolve): Provide more context for the user
7677         when reporting an error.
7678
7679         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
7680         pointers. 
7681
7682         * expression.cs (MemberAccess.DoResolve): When we get a type back,
7683         check the permissions for it.  Note than in a type-resolution
7684         context the check was already present in DeclSpace.ResolveType,
7685         but was missing from the MemberAccess.
7686
7687         (ArrayCreation.CheckIndices): warn if the user has
7688         more nested levels of expressions, but there are no more
7689         dimensions specified.  Avoids crash on bug 41906.
7690
7691 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
7692
7693         * statement.cs (Block): replace Implicit bool, for a generic
7694         flags.   
7695         New flag: `Unchecked'.  This is used during the EmitMeta phase
7696         (which is out-of-line with the regular Resolve/Emit process for a
7697         statement, as this is done ahead of time, but still gets a chance
7698         to call constant resolve).
7699
7700         (Block.Flags): new enum for adding a new flag.
7701
7702         (Block.EmitMeta): track the state of unchecked.
7703
7704         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
7705         to enable constant resolution to work there as well.
7706
7707 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
7708
7709         * typemanager.cs (ienumerable_type): Also look up
7710         System.Collections.IEnumerable. 
7711
7712 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
7713
7714         TODO: Test more than one conditional per method.
7715
7716         * class.cs (Indexer.Define): Report the location where the user is
7717         referencing the unsupported feature.
7718
7719         (MethodData): Overload the use of `conditionals' to
7720         minimize the creation of needless ArrayLists.   This saves roughly
7721         212kb on my machine.
7722
7723         (Method): Implement the new IIteratorContainer interface.
7724         (Method.SetYields): Implement the method by setting the ModFlags
7725         to contain METHOD_YIELDS.
7726
7727         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
7728         which just got set to null.
7729
7730         * iterators.cs: New file.
7731
7732         (Yield, YieldBreak): New statements.
7733
7734         * statement.cs (Return.Resolve): Flag an error if we are used in
7735         an iterator method.
7736
7737         * codegen.cs (InIterator): New flag set if the code is being
7738         compiled in an iterator method.
7739
7740         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
7741         internal modifier, and we just use it to avoid adding extra
7742         fields, as this is seldom used.  
7743
7744         * cs-parser.jay: Add yield_statement (yield and yield break).
7745
7746         * driver.cs: New flag -v2 to turn on version 2 features. 
7747
7748         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
7749         hashtable when v2 is enabled.
7750
7751 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
7752
7753         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
7754         there is already a namespace defined with this name.
7755
7756         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
7757         people upgraded their corlibs.
7758
7759         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
7760         always use fully qualified types, no need to use the compiler
7761         front end.
7762
7763         (TypeManager.IsNamespace): Use binarysearch.
7764
7765         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
7766         AddDelegate): I did not quite use the new IsValid API properly: I
7767         have to pass the short-name and the fullname.  I was passing only
7768         the basename instead of the fullname sometimes. 
7769
7770         (TypeContainer.DefineType): call NamespaceClash.
7771
7772         * interface.cs (Interface.DefineType): use NamespaceClash before
7773         defining the type.
7774
7775         * delegate.cs (Delegate.DefineType): use NamespaceClash before
7776         defining the type.
7777
7778         * enum.cs: (Enum.DefineType): use NamespaceClash before
7779         defining the type.
7780
7781         * typemanager.cs (: 3-line patch that gives us some tasty 11%
7782         speed increase.  First, use the negative_hits cache when we get a
7783         negative.  Second, add the type with its full original name
7784         instead of the new . and + encoded name (reflection uses + to
7785         separate type from a nested type).  Use LookupTypeReflection
7786         directly which bypasses the type->name hashtable (that we already
7787         know does not contain the type.
7788
7789         * decl.cs (DeclSpace.ResolveTypeExpr): track the
7790         location/container type. 
7791
7792         * driver.cs: When passing utf8, use directly the UTF8Encoding.
7793
7794 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
7795
7796         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
7797
7798         * delegate.cs (NewDelegate.Resolve): Test whether an instance
7799         method is being referenced in the method group from a static
7800         context, and report error 120 if so.
7801
7802         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
7803         Error118. 
7804
7805         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
7806         is created, we create the A namespace).
7807
7808         * cs-parser.jay: A namespace also introduces a DeclarationFound.
7809         Fixes #41591
7810
7811 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
7812
7813         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
7814         invocation to ModuleBuilder.GetType with the same values will
7815         return a new type instance, so we need to cache its return
7816         values. 
7817
7818         * expression.cs (Binary.ResolveOperator): Only allow the compare
7819         operators on enums if they are of the same type.
7820
7821         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
7822         types of ValueType on their own case.  Before we were giving them
7823         the same treatment as objects.
7824
7825         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
7826         fullname.  Short name is used to compare against container name.
7827         Fullname is used to check against defined namespace names.
7828
7829         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
7830         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
7831
7832         (Method.CheckBase): Call parent.
7833         (MemberBase.CheckBase): Check for protected members on sealed
7834         classes.
7835         (PropertyBase.CheckBase): Call parent.
7836         (Field.Define): Call parent.
7837
7838         * report.cs: Negative error codes are now mapped to 8000 - code,
7839         so that the display is render more nicely.
7840
7841         * typemanager.cs: Do not use try/catch, instead report a regular
7842         error. 
7843
7844         (GetPointerType, GetReferenceType): These methods provide
7845         mechanisms to obtain the T* and T& from a T.  We had the code
7846         previously scattered around the code base, and it also used
7847         TypeManager.LookupType that would go through plenty of caches.
7848         This one goes directly to the type source.
7849
7850         In some places we did the Type.GetType followed by
7851         ModuleBuilder.GetType, but not in others, so this unifies the
7852         processing as well.
7853
7854         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
7855         statements now that we have namespace information.
7856
7857         * typemanager.cs (IsNamespace): New method, returns whether the
7858         string presented is a namespace or not.
7859
7860         (ComputeNamespaces): New public entry point, computes the list of
7861         available namespaces, using the GetNamespaces API call in Mono, or
7862         the slower version in MS.NET.   
7863
7864         Now before we start the semantic analysis phase, we have a
7865         complete list of namespaces including everything that the user has
7866         provided.
7867
7868         Deleted old code to cache namespaces in .nsc files.
7869
7870 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
7871
7872         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
7873         class/struct location definition Location for the implicit
7874         constructor location.
7875
7876         (Operator.Define): Use the location of the operator for the
7877         implicit Method definition.
7878
7879         (Constructor.Emit): use the constructor location for the implicit
7880         base initializer constructor.
7881
7882         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
7883         and the Expression class now contains two new methods:
7884
7885         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
7886         isolate type lookup from the rest of the resolution process.
7887
7888         Since we use Expressions to hold type definitions due to the way
7889         we parse the input we have historically overloaded Resolve to
7890         perform the Type lookups if a special flag is passed.  Now this is
7891         eliminated and two methods take their place. 
7892
7893         The differences in the two methods between xStep and xTerminal is
7894         that xStep is involved in our current lookup system that uses
7895         SimpleNames to compose a name, while xTerminal is used just to
7896         catch the case where the simplename lookup failed.
7897
7898 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
7899
7900         * expression.cs (ResolveMemberAccess): Remove redundant code.
7901         TypeExpr expressions are always born fully resolved.
7902
7903         * interface.cs (PopulateMethod): Do not lookup the types twice.
7904         We were doing it once during SemanticAnalysis and once during
7905         PopulateMethod.
7906
7907         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
7908         in local variable type definitions, were being returned as a
7909         SimpleName (we decomposed everything into a string), that is
7910         because primary_expression was being used instead of a type in the
7911         grammar (reduce/reduce conflicts).
7912
7913         The part that was wrong is that we converted the expression into a
7914         string (an oversimplification in one hand, compounded with primary
7915         expressions doing string concatenation).
7916
7917         So things like:
7918
7919         A.B.C [] x;
7920
7921         Would return "A.B.C[]" as a SimpleName.  This stopped things like
7922         using clauses from working on this particular context.  And a type
7923         was being matched directly against "A.B.C[]".
7924
7925         We now use the correct approach, and allow for ComposedCast to be
7926         part of the unary expression.  So the "A.B.C []" become a composed
7927         cast of "A.B.C" (as a nested group of MemberAccess with a
7928         SimpleName at the end) plus the rank composition "[]". 
7929
7930         Also fixes 35567
7931
7932 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
7933
7934         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
7935         for the access level checking.
7936
7937         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
7938         `TypeContainer container', because I kept getting confused when I
7939         was debugging this code.
7940
7941         * expression.cs (Indexers): Instead of tracking getters/setters,
7942         we now track them in parallel.  We create one arraylist less, but
7943         most importantly it is possible now for the LValue code to find a
7944         matching get for a set.
7945
7946         (IndexerAccess.DoResolveLValue): Update the code.
7947         GetIndexersForType has been modified already to extract all the
7948         indexers from a type.  The code assumed it did not.
7949
7950         Also make the code set the correct return type for the indexer.
7951         This was fixed a long time ago for properties, but was missing for
7952         indexers.  It used to be void_type.
7953
7954         (Binary.Emit): Test first for doubles instead of
7955         floats, as they are more common.
7956
7957         (Binary.EmitBranchable): Use the .un version of the branch opcodes
7958         when dealing with floats and the <=, >= operators.  This fixes bug
7959         #39314 
7960
7961         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
7962         to load the array value by emitting a load on the foreach variable
7963         type.  This was incorrect.  
7964
7965         We now emit the code to load an element using the the array
7966         variable type, and then we emit the conversion operator.
7967
7968         Fixed #40176
7969
7970 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
7971
7972         * attribute.cs: Avoid allocation of ArrayLists in the common case.
7973
7974 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
7975
7976         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
7977         test for protection before we test for signatures. 
7978
7979         (MethodSignature.ToString): implement.
7980
7981         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
7982         to the case where we reduced into a LongConstant.
7983
7984         * decl.cs (CheckAccessLevel): If the type is an array, we can not
7985         depend on whether the information is acurrate, because the
7986         Microsoft runtime will always claim that the array type is public,
7987         regardless of the real state.
7988
7989         If the type is a pointer, another problem happens: the type is
7990         reported as non-public in Microsoft.  
7991
7992         In both cases we have to call CheckAccessLevel recursively with
7993         the underlying type as the argument to be tested.
7994
7995 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
7996
7997         * assign.cs (Assign.Emit): If we are dealing with a compound
7998         assignment expression, we should use the code path that stores the
7999         intermediate result in a temporary value.  This fixes #40903.
8000
8001         *expression.cs (Indirection.ToString): Provide ToString method for
8002         debugging. 
8003
8004 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
8005
8006         * class.cs: Null out fields holding references to Block objects so
8007         they can be garbage collected.
8008
8009         * expression.cs (OverloadResolve): Remove unused local.
8010
8011 2003-04-07  Martin Baulig  <martin@ximian.com>
8012
8013         * codegen.cs (EmitContext.CurrentFile): New public field.
8014         (EmitContext.Mark): Use the CurrentFile to check whether the
8015         location is in the correct file.
8016         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
8017
8018 2003-04-07  Martin Baulig  <martin@ximian.com>
8019
8020         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
8021
8022         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
8023         location.  [FIXME: The location argument which gets passed to this
8024         method is sometimes wrong!]
8025
8026 2003-04-07  Nick Drochak <ndrochak@gol.com>
8027
8028         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
8029
8030 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
8031
8032         * expression.cs (Indirection.EmitAssign): We were using the
8033         temporary, but returning immediately instead of continuing the
8034         EmitAssing flow.
8035
8036 2003-04-06  Martin Baulig  <martin@ximian.com>
8037
8038         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
8039         if it's a nested child, but also deriving from the outer class.
8040         See test 190.cs.
8041
8042         * typemanager.cs (IsNestedChildOf): Make this work if it's a
8043         nested child, but also deriving from the outer class.  See
8044         test-190.cs.
8045         (FilterWithClosure): We may access private members of the outer
8046         class if we're a nested child and deriving from the outer class.
8047         (RealMemberLookup): Only set `closure_private_ok' if the
8048         `original_bf' contained BindingFlags.NonPublic.
8049
8050 2003-04-05  Martin Baulig  <martin@ximian.com>
8051
8052         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
8053
8054 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
8055
8056         * class.cs (Event.Define): Do not allow abstract events to have
8057         initializers. 
8058
8059 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
8060
8061         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
8062         block in event declarations.
8063
8064         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
8065         value type, get its address.
8066
8067         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
8068         leaving a class on the stack instead of a boolean value (int
8069         0/1).  Change the code so we compare against null, and then the
8070         result against zero.
8071
8072         * class.cs (TypeContainer.GetClassBases): We were checking for the
8073         parent class being sealed too late.
8074
8075         * expression.cs (Binary.Emit): For <= and >= when dealing with
8076         floating point values, use cgt.un and clt.un instead of cgt and
8077         clt alone.
8078
8079 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
8080
8081         * statement.cs: Apply the same optimization as MS: skip the 
8082         GetEnumerator returning an IEnumerator, and use the one returning a 
8083         CharEnumerator instead. This allows us to avoid the try-finally block 
8084         and the boxing.
8085
8086 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
8087
8088         * cs-parser.jay: Attributes cannot be applied to
8089                          namespaces. Fixes #40473
8090
8091 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8092
8093         * class.cs:
8094         (Add*): check if the name is valid using the full name for constants,
8095         fields, properties and events.
8096
8097 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
8098
8099         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
8100         char constants to be part of the enumeration.
8101
8102         * expression.cs (Conditional.DoResolve): Add support for operator
8103         true. Implements the missing functionality from 14.12
8104
8105         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
8106         operator true/false as required by the spec.
8107
8108         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
8109         implicit conversion to boolean.
8110
8111         * statement.cs (Statement.ResolveBoolean): A boolean expression is
8112         also one where the type implements `operator true'. 
8113
8114         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
8115         get an expression that will invoke operator true based on an
8116         expression.  
8117
8118         (GetConversionOperators): Removed the hack that called op_True
8119         here.  
8120
8121         (Expression.ResolveBoolean): Move this from Statement.
8122
8123 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
8124
8125         * ecore.cs (FieldExpr): do not allow initialization of initonly
8126         fields on derived classes
8127
8128 2003-03-13  Martin Baulig  <martin@ximian.com>
8129
8130         * statement.cs (Block.Emit): Call ig.BeginScope() and
8131         ig.EndScope() when compiling with debugging info; call
8132         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
8133
8134 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
8135
8136         * expression.cs (Indexers): Do not construct immediately, allow
8137         for new members to be appended as we go.  Fixes 38143
8138
8139 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8140
8141         * expression.cs: save/restore context when resolving an unchecked
8142         expression.
8143
8144 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
8145
8146         * cfold.cs: Catch division by zero in modulus operator during
8147         constant folding.
8148
8149 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
8150
8151         * interface.cs (Interface.DefineMembers): Avoid defining members
8152         twice. 
8153
8154 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
8155
8156         * driver.cs: handle the +/- options for -noconfig
8157
8158         * statement.cs (Unckeched.Resolve): Also track the state of
8159         unchecked in the Resolve phase.
8160
8161 2003-02-27  Martin Baulig  <martin@ximian.com>
8162
8163         * ecore.cs (Expression.MemberLookup): Don't create a
8164         MethodGroupExpr for something which is not a method.  Fixes #38291.
8165
8166 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
8167
8168         * class.cs (MemberBase.CheckParameters): Also check that the type
8169         is unmanaged if it is a pointer.
8170
8171         * expression.cs (SizeOf.Resolve): Add location information.
8172
8173         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
8174         a managed type is declared.
8175
8176         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
8177         parameter modifiers as well.  Fixes bug 38606
8178
8179         * class.cs: Very sad.  Am backing out the speed up changes
8180         introduced by the ArrayList -> Array in the TypeContainer, as they
8181         were not actually that much faster, and introduced a bug (no error
8182         reports on duplicated methods).
8183
8184         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
8185         source first, this will guarantee that we have a valid expression
8186         before calling in lower levels functions that will require a
8187         resolved object.  Then use this original_source in the
8188         target.ResolveLValue instead of the original source that was
8189         passed to us.
8190
8191         Another change.  Use target.Resolve instead of LValueResolve.
8192         Although we are resolving for LValues, we will let the Assign code
8193         take care of that (it will be called again from Resolve).  This
8194         basically allows code like this:
8195
8196         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
8197         class Y { void A (X x) { x [0] += o; }
8198
8199         The problem was that the indexer was trying to resolve for
8200         set_Item (idx, object o) and never finding one.  The real set_Item
8201         was set_Item (idx, X).  By delaying the process we get the right
8202         semantics. 
8203
8204         Fixes bug 36505
8205
8206 2003-02-23  Martin Baulig  <martin@ximian.com>
8207
8208         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
8209         while calling DoEmit ().
8210
8211         * codegen.cs (EmitContext.Mark): Don't mark locations in other
8212         source files; if you use the #line directive inside a method, the
8213         compiler stops emitting line numbers for the debugger until it
8214         reaches the end of the method or another #line directive which
8215         restores the original file.
8216
8217 2003-02-23  Martin Baulig  <martin@ximian.com>
8218
8219         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
8220
8221 2003-02-23  Martin Baulig  <martin@ximian.com>
8222
8223         * statement.cs (Block.AddChildVariableNames): We need to call this
8224         recursively, not just for our immediate children.
8225
8226 2003-02-23  Martin Baulig  <martin@ximian.com>
8227
8228         * class.cs (Event.Define): Always make the field private, like csc does.
8229
8230         * typemanager.cs (TypeManager.RealMemberLookup): Make events
8231         actually work, fixes bug #37521.
8232
8233 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
8234
8235         * delegate.cs: When creating the various temporary "Parameters"
8236         classes, make sure that we call the ComputeAndDefineParameterTypes
8237         on those new parameters (just like we do with the formal ones), to
8238         allow them to be resolved in the context of the DeclSpace.
8239
8240         This fixes the bug that Dick observed in Bugzilla #38530.
8241
8242 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
8243
8244         * expression.cs (ResolveMemberAccess): When resolving a constant,
8245         do not attempt to pull a constant if the value was not able to
8246         generate a valid constant.
8247
8248         * const.cs (LookupConstantValue): Do not report more errors than required.
8249
8250 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8251
8252         * expression.cs: fixes bug #38328.
8253
8254 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
8255
8256         * class.cs: Changed all the various members that can be part of a
8257         class from being an ArrayList to be an Array of the right type.
8258         During the DefineType type_list, interface_list, delegate_list and
8259         enum_list are turned into types, interfaces, delegates and enums
8260         arrays.  
8261
8262         And during the member population, indexer_list, event_list,
8263         constant_list, field_list, instance_constructor_list, method_list,
8264         operator_list and property_list are turned into their real arrays.
8265
8266         Although we could probably perform this operation earlier, for
8267         good error reporting we need to keep the lists and remove the
8268         lists for longer than required.
8269
8270         This optimization was triggered by Paolo profiling the compiler
8271         speed on the output of `gen-sample-program.pl' perl script. 
8272
8273         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
8274         not crash in methods like MemberLookupFailed that use this field.  
8275
8276         This problem arises when the compiler fails to resolve a type
8277         during interface type definition for example.
8278
8279 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
8280
8281         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
8282         inherit from System.Object, so we have to stop at null, not only
8283         when reaching System.Object.
8284
8285 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
8286
8287         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
8288         DeclaredOnly because the parent indexer might have had a different
8289         name, but did not loop until the top of the hierarchy was reached.
8290
8291         The problem this one fixes is 35492: when a class implemented an
8292         indexer from an interface, we were getting the interface method
8293         (which was abstract) and we were flagging an error (can not invoke
8294         abstract method).
8295
8296         This also keeps bug 33089 functioning, and test-148 functioning.
8297
8298         * typemanager.cs (IsSpecialMethod): The correct way of figuring
8299         out if a method is special is to see if it is declared in a
8300         property or event, or whether it is one of the predefined operator
8301         names.   This should fix correctly #36804.
8302
8303 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
8304
8305         The goal here is to remove the dependency on EmptyCast.Peel ().
8306         Killing it completely.
8307
8308         The problem is that currently in a number of places where
8309         constants are expected, we have to "probe" for an EmptyCast, and
8310         Peel, which is not the correct thing to do, as this will be
8311         repetitive and will likely lead to errors. 
8312
8313         The idea is to remove any EmptyCasts that are used in casts that
8314         can be reduced to constants, so we only have to cope with
8315         constants. 
8316
8317         This bug hunt was triggered by Bug 37363 and the desire to remove
8318         the duplicate pattern where we were "peeling" emptycasts to check
8319         whether they were constants.  Now constants will always be
8320         constants.
8321
8322         * ecore.cs: Use an enumconstant here instead of wrapping with
8323         EmptyCast.  
8324
8325         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
8326         throwing me off.  By handling this we can get rid of a few hacks.
8327
8328         * statement.cs (Switch): Removed Peel() code.
8329
8330 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
8331
8332         * class.cs: Location information for error 508
8333
8334         * expression.cs (New.DoResolve): Add a guard against double
8335         resolution of an expression.  
8336
8337         The New DoResolve might be called twice when initializing field
8338         expressions (see EmitFieldInitializers, the call to
8339         GetInitializerExpression will perform a resolve on the expression,
8340         and later the assign will trigger another resolution
8341
8342         This leads to bugs (#37014)
8343
8344         * delegate.cs: The signature for EndInvoke should contain any ref
8345         or out parameters as well.  We were not doing this in the past. 
8346
8347         * class.cs (Field.Define): Do not overwrite the type definition
8348         inside the `volatile' group.  Turns out that volatile enumerations
8349         were changing the type here to perform a validity test, which
8350         broke conversions. 
8351
8352 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
8353
8354         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
8355         and structs, we do not want to load the instance variable
8356
8357         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
8358         enum_type has to be handled like an object reference (implicit
8359         conversions exists from this to object), but the regular IsClass
8360         and IsValueType tests will never return true for this one.
8361
8362         Also we use TypeManager.IsValueType instead of type.IsValueType,
8363         just for consistency with the rest of the code (this is only
8364         needed if we ever use the construct exposed by test-180.cs inside
8365         corlib, which we dont today).
8366
8367 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
8368
8369         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
8370         just InternalCall.
8371
8372 2003-02-09  Martin Baulig  <martin@ximian.com>
8373
8374         * namespace.cs (Namespace..ctor): Added SourceFile argument.
8375         (Namespace.DefineNamespaces): New static public method; this is
8376         called when we're compiling with debugging to add all namespaces
8377         to the symbol file.
8378
8379         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
8380         pass it to the Namespace's .ctor.
8381
8382         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
8383         and MethodBase arguments; pass the namespace ID to the symwriter;
8384         pass the MethodBase instead of the token to the symwriter.
8385         (SymbolWriter.DefineNamespace): New method to add a namespace to
8386         the symbol file.
8387
8388 2003-02-09  Martin Baulig  <martin@ximian.com>
8389
8390         * symbolwriter.cs: New file.  This is a wrapper around
8391         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
8392         methods here in near future.
8393
8394 2003-02-09  Martin Baulig  <martin@ximian.com>
8395
8396         * codegen.cs (EmitContext.Mark): Just pass the arguments to
8397         ILGenerator.MarkSequencePoint() which are actually used by the
8398         symbol writer.
8399
8400 2003-02-09  Martin Baulig  <martin@ximian.com>
8401
8402         * location.cs (SourceFile): New public sealed class.  This
8403         contains the name and an index which is used in the location's token.
8404         (Location): Reserve an appropriate number of bits in the token for
8405         the source file instead of walking over that list, this gives us a
8406         really huge performance improvement when compiling with debugging.
8407
8408         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
8409         `SourceFile' argument instead of a string.
8410         (Driver.ProcessFile): Add all the files via Location.AddFile(),
8411         but don't parse/tokenize here, we need to generate the list of all
8412         source files before we do that.
8413         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
8414         the files.
8415
8416         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
8417         instead of a string.
8418
8419         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
8420         of a string.
8421
8422 2003-02-09  Martin Baulig  <martin@ximian.com>
8423
8424         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
8425         filename on `#line default'.
8426
8427 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
8428
8429         * statement.cs: don't clear the pinned var when the fixed statement
8430         returns from the method (fixes bug#37752).
8431
8432 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
8433
8434         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
8435         to IsValueType.
8436
8437 2003-02-07  Martin Baulig  <martin@ximian.com>
8438
8439         * driver.cs: Removed the `--debug-args' command line argument.
8440
8441         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
8442         automatically by the AsssemblyBuilder.
8443         (CodeGen.InitializeSymbolWriter): We don't need to call any
8444         initialization function on the symbol writer anymore.  This method
8445         doesn't take any arguments.
8446
8447 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
8448
8449         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
8450         from referenced assemblies as well.
8451
8452 2003-02-02  Martin Baulig  <martin@ximian.com>
8453
8454         * class.cs (MethodData.Emit): Generate debugging info for external methods.
8455
8456 2003-02-02  Martin Baulig  <martin@ximian.com>
8457
8458         * class.cs (Constructor.Emit): Open the symbol writer before
8459         emitting the constructor initializer.
8460         (ConstructorInitializer.Emit): Call ec.Mark() to allow
8461         single-stepping through constructor initializers.
8462
8463 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
8464
8465         * class.cs: Handle error 549: do not allow virtual methods in
8466         sealed classes. 
8467
8468 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
8469
8470         * decl.cs: Check access levels when resolving types
8471
8472 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
8473
8474         * statement.cs: Add parameters and locals set in catch blocks that might 
8475         return to set vector
8476
8477 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
8478
8479         * class.cs (Operator): Set the SpecialName flags for operators.
8480
8481         * expression.cs (Invocation.DoResolve): Only block calls to
8482         accessors and operators on SpecialName methods.
8483
8484         (Cast.TryReduce): Handle conversions from char constants.
8485
8486
8487 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
8488
8489         * statement.cs: small memory and time optimization in FlowBranching.
8490
8491 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
8492
8493         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
8494         problem that the last fix but in the other sid (Set).
8495
8496         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
8497         access when there is no indexer in the hierarchy.
8498
8499 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
8500
8501         * class.cs: Combine some if statements.
8502
8503 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8504
8505         * driver.cs: fixed bug #37187.
8506
8507 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
8508
8509         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
8510         any indexer, it's needed to build a list with all the indexers in the
8511         hierarchy (AllGetters), else we have problems. Fixes #35653.
8512
8513 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
8514
8515         * class.cs (MethodData.Define): It is wrong for an interface
8516         implementation to be static in both cases: explicit and implicit.
8517         We were only handling this in one case.
8518
8519         Improve the if situation there to not have negations.
8520
8521         * class.cs (Field.Define): Turns out that we do not need to check
8522         the unsafe bit on field definition, only on usage.  Remove the test.
8523
8524 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8525
8526         * driver.cs: use assembly.Location instead of Codebase (the latest
8527         patch made mcs fail when using MS assemblies).
8528
8529 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
8530
8531         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
8532         get the path to *corlib.dll.
8533
8534 2003-01-21  Nick Drochak <ndrochak@gol.com>
8535
8536         * cs-tokenizer.cs:
8537         * pending.cs:
8538         * typemanager.cs: Remove compiler warnings
8539
8540 2003-01-20  Duncan Mak  <duncan@ximian.com>
8541
8542         * AssemblyInfo.cs: Bump the version number to 0.19.
8543
8544 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8545
8546         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
8547
8548 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
8549
8550         * class.cs (Constructor::Emit): Emit debugging info for constructors.
8551
8552 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
8553
8554         * cs-parser.jay: Small fix: we were not comparing the constructor
8555         name correctly.   Thanks to Zoltan for the initial pointer.
8556
8557 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
8558
8559         * cs-tokenizer.cs: Set file name when specified with #line
8560
8561 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
8562
8563         * cs-parser.jay: Only perform the constructor checks here if we
8564         are named like the class;  This will help provider a better
8565         error.  The constructor path is taken when a type definition is
8566         not found, but most likely the user forgot to add the type, so
8567         report that rather than the constructor error.
8568
8569 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
8570
8571         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
8572         allocations.
8573
8574 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
8575
8576         * cs-parser.jay: Add cleanup call.
8577
8578 2003-01-13  Duncan Mak  <duncan@ximian.com>
8579
8580         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
8581         consistent with other methods.
8582
8583 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
8584
8585         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
8586
8587 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
8588
8589         * attribute.cs: only set GuidAttr to true when we have a
8590         GuidAttribute.
8591
8592 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8593
8594         * ecore.cs:
8595         * expression.cs:
8596         * typemanager.cs: fixes to allow mcs compile corlib with the new
8597         Type.IsSubclassOf fix.
8598
8599 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
8600
8601         * expression.cs (LocalVariableReference.DoResolve): Classify a
8602         constant as a value, not as a variable.   Also, set the type for
8603         the variable.
8604
8605         * cs-parser.jay (fixed_statement): take a type instead of a
8606         pointer_type, so we can produce a better error message later.
8607
8608         * statement.cs (Fixed.Resolve): Flag types that are not pointers
8609         as an error.  
8610
8611         (For.DoEmit): Make inifinite loops have a
8612         non-conditional branch back.
8613
8614         (Fixed.DoEmit): First populate the pinned variables, then emit the
8615         statement, then clear the variables.  Before I was emitting the
8616         code once for each fixed piece.
8617
8618
8619 2003-01-08  Martin Baulig  <martin@ximian.com>
8620
8621         * statement.cs (FlowBranching.MergeChild): A break in a
8622         SWITCH_SECTION does not leave a loop.  Fixes #36155.
8623
8624 2003-01-08  Martin Baulig  <martin@ximian.com>
8625
8626         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
8627         lives in the same number space than `param_map'.  Fixes #36154.
8628
8629 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
8630
8631         * cs-parser.jay (constructor_declaration): Set the
8632         Constructor.ModFlags before probing for it.  This makes the
8633         compiler report 514, 515 and 132 (the code was there, but got
8634         broken). 
8635
8636         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
8637         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
8638         (GotoCase.Resolve): Set `Returns' to ALWAYS.
8639
8640 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
8641
8642         * enum.cs: create the enum static fields using the enum type.
8643
8644 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
8645
8646         * class.cs: don't try to create the ParamBuilder for the return
8647         type if it's not needed (and handle it breaking for the ms runtime
8648         anyway).
8649
8650 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
8651
8652         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
8653
8654 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
8655
8656         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
8657         the command.   This showed up while compiling the JANET source
8658         code, which used \r as its only newline separator.
8659
8660 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
8661
8662         * class.cs (Method.Define): If we are an operator (because it
8663         reuses our code), then set the SpecialName and HideBySig.  #36128
8664
8665 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
8666
8667         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
8668         exception, report error 120 `object reference required'.
8669
8670         * driver.cs: Add --pause option, used during to measure the size
8671         of the process as it goes with --timestamp.
8672
8673         * expression.cs (Invocation.DoResolve): Do not allow methods with
8674         SpecialName to be invoked.
8675
8676 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
8677
8678         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
8679         number before adding it.
8680
8681 2002-12-21  Ravi Pratap  <ravi@ximian.com>
8682
8683         * ecore.cs (StandardImplicitConversion): When in an unsafe
8684         context, we allow conversion between void * to any other pointer
8685         type. This fixes bug #35973.
8686
8687 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
8688
8689         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
8690         is not thrown when extensionless outputs are used 
8691
8692 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8693
8694         * rootcontext.cs: fixed compilation of corlib.
8695
8696 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
8697
8698         * attribute.cs (Attributes.Contains): Add new method.
8699
8700         * class.cs (MethodCore.LabelParameters): if the parameter is an
8701         `out' parameter, check that no attribute `[In]' has been passed.
8702
8703         * enum.cs: Handle the `value__' name in an enumeration.
8704
8705 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
8706
8707         * decl.cs: Added special case to allow overrides on "protected
8708         internal" methods
8709
8710 2002-12-18  Ravi Pratap  <ravi@ximian.com>
8711
8712         * attribute.cs (Attributes.AddAttributeSection): Rename to this
8713         since it makes much more sense.
8714
8715         (Attributes.ctor): Don't require a Location parameter.
8716
8717         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
8718
8719         * attribute.cs (ApplyAttributes): Remove extra Location parameters
8720         since we already have that information per attribute.
8721
8722         * everywhere : make appropriate changes.
8723
8724         * class.cs (LabelParameters): Write the code which actually
8725         applies attributes to the return type. We can't do this on the MS
8726         .NET runtime so we flag a warning in the case an exception is
8727         thrown.
8728
8729 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
8730
8731         * const.cs: Handle implicit null conversions here too.
8732
8733 2002-12-17  Ravi Pratap  <ravi@ximian.com>
8734
8735         * class.cs (MethodCore.LabelParameters): Remove the extra
8736         Type [] parameter since it is completely unnecessary. Instead
8737         pass in the method's attributes so that we can extract
8738         the "return" attribute.
8739
8740 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
8741
8742         * cs-parser.jay (parse): Use Report.Error to flag errors instead
8743         of ignoring it and letting the compile continue.
8744
8745         * typemanager.cs (ChangeType): use an extra argument to return an
8746         error condition instead of throwing an exception.
8747
8748 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
8749
8750         * expression.cs (Unary.TryReduce): mimic the code for the regular
8751         code path.  Perform an implicit cast in the cases where we can
8752         implicitly convert to one of the integral types, and then reduce
8753         based on that constant.   This fixes bug #35483.
8754
8755 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8756
8757         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
8758
8759 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8760
8761         * namespace.cs: fixed bug #35489.
8762
8763 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
8764
8765         * class.cs: Remove some dead code.
8766
8767         * cs-parser.jay: Estimate the number of methods needed
8768         (RootContext.MethodCount);
8769
8770         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
8771         numbers instead of StringBuilders.
8772
8773         * support.cs (PtrHashtable): Add constructor with initial size;
8774         We can now reduce reallocations of the method table.
8775
8776 2002-12-10  Ravi Pratap  <ravi@ximian.com>
8777
8778         * attribute.cs (ApplyAttributes): Keep track of the emitted
8779         attributes on a per-target basis. This fixes bug #35413.
8780
8781 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
8782
8783         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
8784         default to the Windows 1252 encoding.
8785
8786         (UnixParseOption): Support version, thanks to Alp for the missing
8787         pointer. 
8788
8789         * AssemblyInfo.cs: Add nice assembly information.
8790
8791         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
8792         (bug 35169).
8793
8794         * cs-parser.jay: Allow a trailing comma before the close bracked
8795         in the attribute_section production.
8796
8797         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
8798         address of the instance was being taken, I will take this out,
8799         because we take the address of the object immediately here.
8800
8801 2002-12-09  Ravi Pratap  <ravi@ximian.com>
8802
8803         * typemanager.cs (AreMultipleAllowed): Take care of the most
8804         obvious case where attribute type is not in the current assembly -
8805         stupid me ;-)
8806
8807 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
8808
8809         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
8810         definitions, instead of doing that afterwards.  
8811
8812         Also we use a nice little hack, depending on the constructor, we
8813         know if we are a "composed" name or a simple name.  Hence, we
8814         avoid the IndexOf test, and we avoid 
8815
8816         * codegen.cs: Add code to assist in a bug reporter to track down
8817         the source of a compiler crash. 
8818
8819 2002-12-07  Ravi Pratap  <ravi@ximian.com>
8820
8821         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
8822         types have been emitted for a given element and flag an error
8823         if something which does not have AllowMultiple set is used more
8824         than once.
8825
8826         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
8827         attribute types and their corresponding AllowMultiple properties
8828
8829         (AreMultipleAllowed): Check the property for a given type.
8830
8831         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
8832         property in the case we have a TypeContainer.
8833
8834         (Attributes.AddAttribute): Detect duplicates and just skip on
8835         adding them. This trivial fix catches a pretty gross error in our
8836         attribute emission - global attributes were being emitted twice!
8837
8838         Bugzilla bug #33187 is now fixed.
8839
8840 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
8841
8842         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
8843         instead of pp_and).
8844
8845         * expression.cs (Binary.ResolveOperator): I can only use the
8846         Concat (string, string, string) and Concat (string, string,
8847         string, string) if the child is actually a concatenation of
8848         strings. 
8849
8850 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
8851
8852         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
8853         context where we need a 2-character lookahead.
8854
8855         * pending.cs (PendingImplementation): Rework so we can keep track
8856         of interface types all the time, and flag those which were
8857         implemented by parents as optional.
8858
8859 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
8860
8861         * expression.cs (Binary.ResolveOperator): Use
8862         String.Concat(string,string,string) or
8863         String.Concat(string,string,string,string) when possible. 
8864
8865         * typemanager: More helper methods.
8866
8867
8868 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
8869
8870         * pending.cs: remove the bogus return from GetMissingInterfaces()
8871         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
8872
8873 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
8874
8875         * namespace.cs: avoid duplicated 'using xxx' being added to
8876         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
8877         when we get more than one 'using' statement for the same namespace.
8878         Report a CS0105 warning for it.
8879
8880 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
8881
8882         * cs-tokenizer.cs (consume_identifier): use read directly, instead
8883         of calling getChar/putback, uses internal knowledge of it.    
8884
8885         (xtoken): Reorder tokenizer so most common patterns are checked
8886         first.  This reduces the compilation time in another 5% (from 8.11s
8887         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
8888
8889         The parsing time is 22% of the compilation in mcs, and from that
8890         64% is spent on the tokenization process.  
8891
8892         I tried using a binary search for keywords, but this is slower
8893         than the hashtable.  Another option would be to do a couple of
8894         things:
8895
8896                 * Not use a StringBuilder, instead use an array of chars,
8897                   with a set value.  Notice that this way we could catch
8898                   the 645 error without having to do it *afterwards*.
8899
8900                 * We could write a hand-parser to avoid the hashtable
8901                   compares altogether.
8902
8903         The identifier consumption process takes 37% of the tokenization
8904         time.  Another 15% is spent on is_number.  56% of the time spent
8905         on is_number is spent on Int64.Parse:
8906
8907                 * We could probably choose based on the string length to
8908                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
8909                   computations. 
8910
8911         Another 3% is spend on wrapping `xtoken' in the `token' function.
8912
8913         Handle 0xa0 as whitespace (#34752)
8914
8915 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
8916
8917         * typemanager.cs (IsCLRType): New routine to tell whether a type
8918         is one of the builtin types.  
8919
8920         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
8921         typecode in more places instead of doing pointer comparissions.
8922         We could leverage some knowledge about the way the typecodes are
8923         laid out.
8924
8925         New code to cache namespaces in assemblies, it is currently not
8926         invoked, to be used soon.
8927
8928         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
8929
8930         * expression.cs (Binary.ResolveOperator): specially handle
8931         strings, and do not perform user-defined operator overloading for
8932         built-in types.
8933
8934 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
8935
8936         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
8937         internalcall as it is a pretty simple operation;  Avoid whenever
8938         possible to call Char.IsLetter.
8939
8940         (consume_identifier): Cut by half the number of
8941         hashtable calls by merging the is_keyword and GetKeyword behavior.
8942
8943         Do not short-circuit, because if we do, we
8944         report errors (ie, #if false && true would produce an invalid
8945         directive error);
8946
8947
8948 2002-11-24  Martin Baulig  <martin@ximian.com>
8949
8950         * expression.cs (Cast.TryReduce): If we're in checked syntax,
8951         check constant ranges and report a CS0221.  Fixes #33186.
8952
8953 2002-11-24  Martin Baulig  <martin@ximian.com>
8954
8955         * cs-parser.jay: Make this work for uninitialized variable
8956         declarations in the `for' initializer.  Fixes #32416.
8957
8958 2002-11-24  Martin Baulig  <martin@ximian.com>
8959
8960         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
8961         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
8962
8963 2002-11-24  Martin Baulig  <martin@ximian.com>
8964
8965         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
8966         argument; if true, we also check for user-defined conversions.
8967         This is only needed if both arguments are of a user-defined type.
8968         Fixes #30443, added test-175.cs.
8969         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
8970
8971         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
8972
8973 2002-11-24  Martin Baulig  <martin@ximian.com>
8974
8975         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
8976         function to get the store opcode.
8977         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
8978         only emit the Ldelema if the store opcode is Stobj.  You must run
8979         both test-34 and test-167 to test this.  Fixes #34529.
8980
8981 2002-11-23  Martin Baulig  <martin@ximian.com>
8982
8983         * ecore.cs (Expression.MemberLookup): Added additional
8984         `qualifier_type' argument which is used when we're being called
8985         from MemberAccess.DoResolve() and null if we're called from a
8986         SimpleName lookup.
8987         (Expression.MemberLookupFailed): New method to report errors; this
8988         does the CS1540 check and reports the correct error message.
8989
8990         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
8991         argument for the CS1540 check and redone the way how we're dealing
8992         with private members.  See the comment in the source code for details.
8993         (FilterWithClosure): Reverted this back to revision 1.197; renamed
8994         `closure_start_type' to `closure_qualifier_type' and check whether
8995         it's not null.  It was not this filter being broken, it was just
8996         being called with the wrong arguments.
8997
8998         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
8999         and pass it the correct `qualifier_type'; this also does the error
9000         handling for us.
9001
9002 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
9003
9004         * expression.cs (Invocation.EmitParams): If the we are dealing
9005         with a non-built-in value type, load its address as well.
9006
9007         (ArrayCreation): Use a a pretty constant instead
9008         of the hardcoded value 2.   Use 6 instead of 2 for the number of
9009         static initializers.  
9010
9011         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
9012         because they are not really value types, just glorified integers. 
9013
9014         * driver.cs: Do not append .exe, the CSC compiler does not do it.
9015
9016         * ecore.cs: Remove redundant code for enumerations, make them use
9017         the same code path as everything else, fixes the casting issue
9018         with enumerations in Windows.Forms.
9019
9020         * attribute.cs: Do only cast to string if it is a string, the
9021         validation happens later.
9022
9023         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
9024         people upgrade their corlibs.
9025
9026         * ecore.cs: Oops, enumerations were not following the entire code path
9027
9028 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
9029
9030         * typemanager.cs (FilterWithClosure): Commented out the test for
9031         1540 in typemanager.cs, as it has problems when accessing
9032         protected methods from a parent class (see test-174.cs). 
9033
9034         * attribute.cs (Attribute.ValidateGuid): new method.
9035         (Attribute.Resolve): Use above.
9036
9037 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
9038
9039         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
9040
9041         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
9042         handling for enumerations, as we only needed the TypeContainer
9043         functionality to begin with (this is required for the fix below to
9044         work for enums that reference constants in a container class for
9045         example). 
9046
9047         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
9048
9049         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
9050         a valid TypeBuilder to perform lookups on.o
9051
9052         * class.cs (InheritableMemberSignatureCompare): Use true in the
9053         call to GetGetMethod and GetSetMethod, because we are comparing
9054         the signature, and we need to get the methods *even* if they are
9055         private. 
9056
9057         (PropertyBase.CheckBase): ditto.
9058
9059         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
9060         GotoCase.Resolve): Use Peel on EmpytCasts.
9061
9062         * ecore.cs (EmptyCast): drop child, add Peel method.
9063
9064 2002-11-17  Martin Baulig  <martin@ximian.com>
9065
9066         * ecore.cs (EmptyCast.Child): New public property.
9067
9068         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
9069         label resolved to an EmptyCast.  Fixes #34162.
9070         (GotoCase.Resolve): Likewise.
9071         (Block.EmitMeta): Likewise.
9072
9073 2002-11-17  Martin Baulig  <martin@ximian.com>
9074
9075         * expression.cs (Invocation.BetterConversion): Prefer int over
9076         uint; short over ushort; long over ulong for integer literals.
9077         Use ImplicitConversionExists instead of StandardConversionExists
9078         since we also need to check for user-defined implicit conversions.
9079         Fixes #34165.  Added test-173.cs.
9080
9081 2002-11-16  Martin Baulig  <martin@ximian.com>
9082
9083         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
9084         with the `true' and `false' literals.  Fixes #33151.
9085
9086 2002-11-16  Martin Baulig  <martin@ximian.com>
9087
9088         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
9089         October 22nd; don't do the cs1540 check for static members.
9090
9091         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
9092         now using our own filter here and doing the cs1540 check again.
9093
9094 2002-11-16  Martin Baulig  <martin@ximian.com>
9095
9096         * support.cs (InternalParameters): Don't crash if we don't have
9097         any fixed parameters.  Fixes #33532.
9098
9099 2002-11-16  Martin Baulig  <martin@ximian.com>
9100
9101         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
9102         when looking up static methods to make this work on Windows.
9103         Fixes #33773.
9104
9105 2002-11-16  Martin Baulig  <martin@ximian.com>
9106
9107         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
9108         a setter rather than using PropertyInfo.CanWrite.
9109
9110 2002-11-15  Nick Drochak  <ndrochak@gol.com>
9111
9112         * class.cs: Allow acces to block member by subclasses. Fixes build
9113         breaker.
9114
9115 2002-11-14  Martin Baulig  <martin@ximian.com>
9116
9117         * class.cs (Constructor.Emit): Added the extern/block check.
9118         Fixes bug #33678.
9119
9120 2002-11-14  Martin Baulig  <martin@ximian.com>
9121
9122         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
9123         iteration while looking for indexers, this is needed because the
9124         indexer may have a different name in our base classes.  Fixed the
9125         error reporting (no indexers at all, not get accessor, no
9126         overloaded match).  Fixes bug #33089.
9127         (IndexerAccess.DoResolveLValue): Likewise.
9128
9129 2002-11-14  Martin Baulig  <martin@ximian.com>
9130
9131         * class.cs (PropertyBase.CheckBase): Make this work for multiple
9132         indexers.  Fixes the first part of bug #33089.
9133         (MethodSignature.InheritableMemberSignatureCompare): Added support
9134         for properties.
9135
9136 2002-11-13  Ravi Pratap  <ravi@ximian.com>
9137
9138         * attribute.cs (Attribute.Resolve): Catch the
9139         NullReferenceException and report it since it isn't supposed to
9140         happen. 
9141
9142 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
9143
9144         * expression.cs (Binary.EmitBranchable): Also handle the cases for
9145         LogicalOr and LogicalAnd that can benefit from recursively
9146         handling EmitBranchable.  The code now should be nice for Paolo.
9147
9148 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
9149
9150         * typemanager.cs (LookupType): Added a negative-hit hashtable for
9151         the Type lookups, as we perform quite a number of lookups on
9152         non-Types.  This can be removed once we can deterministically tell
9153         whether we have a type or a namespace in advance.
9154
9155         But this might require special hacks from our corlib.
9156
9157         * TODO: updated.
9158
9159         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
9160         and double which avoids a conversion from an integer to a double.
9161
9162         * expression.cs: tiny optimization, avoid calling IsConstant,
9163         because it effectively performs the lookup twice.
9164
9165 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
9166
9167         But a bogus return here to keep the semantics of the old code
9168         until the Mono runtime is fixed.
9169
9170         * pending.cs (GetMissingInterfaces): New method used to remove all
9171         the interfaces that are already implemented by our parent
9172         classes from the list of pending methods. 
9173
9174         * interface.cs: Add checks for calls after ResolveTypeExpr.
9175
9176 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
9177
9178         * class.cs (Class.Emit): Report warning 67: event not used if the
9179         warning level is beyond 3.
9180
9181         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
9182         being a NullLiteral.
9183
9184         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
9185         specifiers. 
9186
9187         * class.cs (TypeContainer.GetClassBases): Cover a missing code
9188         path that might fail if a type can not be resolved.
9189
9190         * expression.cs (Binary.Emit): Emit unsigned versions of the
9191         operators. 
9192
9193         * driver.cs: use error 5.
9194
9195 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
9196
9197         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
9198
9199 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
9200
9201         * cs-parser.jay (switch_section): A beautiful patch from Martin
9202         Baulig that fixed 33094.
9203
9204 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
9205
9206         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
9207         Check whether the base is abstract and report an error if so.
9208
9209         * expression.cs (IndexerAccess.DoResolveLValue,
9210         IndexerAccess.DoResolve): ditto. 
9211
9212         (Invocation.DoResolve): ditto.
9213
9214         (Invocation.FullMethodDesc): Improve the report string.
9215
9216         * statement.cs (Block): Eliminate IsVariableDefined as it is
9217         basically just a wrapper for GetVariableInfo.
9218
9219         * ecore.cs (SimpleName): Use new 
9220
9221         * support.cs (ReflectionParamter.ParameterType): We unwrap the
9222         type, as we return the actual parameter ref/unref state on a
9223         different call.
9224
9225 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
9226
9227         * support.cs: Return proper flags REF/OUT fixing the previous
9228         commit.  
9229
9230         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
9231         not used to mean `ref' but `ref or out' in ParameterReference
9232
9233         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
9234         full type signature instead of calling TypeManger.CSharpName
9235         ourselves. 
9236
9237         * support.cs (InternalParameters.ParameterDesc): Do not compare
9238         directly to the modflags, because REF/OUT will actually be bitsets
9239         if set. 
9240
9241         * delegate.cs (VerifyMethod): Check also the modifiers.
9242
9243         * cs-tokenizer.cs: Fix bug where floating point values with an
9244         exponent where a sign was missing was ignored.
9245
9246         * driver.cs: Allow multiple assemblies to be specified in a single
9247         /r: argument
9248
9249 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
9250
9251         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
9252         because identifiers after a parenthesis would end up in this kind
9253         of production, and we needed to desamiguate it for having casts
9254         like:
9255
9256                 (UserDefinedType *) xxx
9257
9258 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
9259
9260         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
9261         we should set on the Bindingflags.NonPublic, but not turn on
9262         private_ok.  private_ok controls whether a Private member is
9263         returned (this is chekced on the filter routine), while the
9264         BindingFlags.NonPublic just controls whether private/protected
9265         will be allowed.   This fixes the problem part of the problem of
9266         private properties being allowed to be used in derived classes.
9267
9268         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
9269         so we can call the children DoResolveLValue method (this will
9270         properly signal errors on lvalue assignments to base properties)
9271
9272         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
9273         getter are null, and we have a property info, we know that this
9274         happened because the lookup failed, so we report an error 122 for
9275         protection level violation.
9276
9277         We also silently return if setter and getter are null in the
9278         resolve functions, this condition only happens if we have flagged
9279         the error before.  This is the other half of the problem. 
9280
9281         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
9282         not have accessibility information, that is why we were returning
9283         true in the filter function in typemanager.cs.
9284
9285         To properly report 122 (property is inaccessible because of its
9286         protection level) correctly, we report this error in ResolveAccess
9287         by failing if both the setter and the getter are lacking (ie, the
9288         lookup failed). 
9289
9290         DoResolve and DoLResolve have been modified to check for both
9291         setter/getter being null and returning silently, the reason being
9292         that I did not want to put the knowledge about this error in upper
9293         layers, like:
9294
9295         int old = Report.Errors;
9296         x = new PropertyExpr (...);
9297         if (old != Report.Errors)
9298                 return null;
9299         else
9300                 return x;
9301
9302         So the property expr is returned, but it is invalid, so the error
9303         will be flagged during the resolve process. 
9304
9305         * class.cs: Remove InheritablePropertySignatureCompare from the
9306         class, as we no longer depend on the property signature to compute
9307         whether it is possible to implement a method or not.
9308
9309         The reason is that calling PropertyInfo.GetGetMethod will return
9310         null (in .NET, in Mono it works, and we should change this), in
9311         cases where the Get Method does not exist in that particular
9312         class.
9313
9314         So this code:
9315
9316         class X { public virtual int A { get { return 1; } } }
9317         class Y : X { }
9318         class Z : Y { public override int A { get { return 2; } } }
9319
9320         Would fail in Z because the parent (Y) would not have the property
9321         defined.  So we avoid this completely now (because the alternative
9322         fix was ugly and slow), and we now depend exclusively on the
9323         method names.
9324
9325         (PropertyBase.CheckBase): Use a method-base mechanism to find our
9326         reference method, instead of using the property.
9327
9328         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
9329         routines are gone now.
9330
9331         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
9332         names, they were incorrectly named.
9333
9334         * cs-tokenizer.cs: Return are more gentle token on failure. 
9335
9336         * pending.cs (PendingImplementation.InterfaceMethod): This routine
9337         had an out-of-sync index variable, which caused it to remove from
9338         the list of pending methods the wrong method sometimes.
9339
9340 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
9341
9342         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
9343         CanWrite, because those refer to this particular instance of the
9344         property, and do not take into account the fact that we can
9345         override single members of a property.
9346
9347         Constructor requires an EmitContext.  The resolution process does
9348         not happen here, but we need to compute the accessors before,
9349         because the resolution does not always happen for properties.
9350
9351         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
9352         subclass, before we did not update this flag, but we did update
9353         bindingflags. 
9354
9355         (GetAccessors): Drop this routine, as it did not work in the
9356         presence of partially overwritten set/get methods. 
9357
9358         Notice that this broke the cs1540 detection, but that will require
9359         more thinking. 
9360
9361 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9362
9363         * class.cs:
9364         * codegen.cs:
9365         * driver.cs: issue a warning instead of an error if we don't support
9366         debugging for the platform. Also ignore a couple of errors that may
9367         arise when trying to write the symbols. Undo my previous patch.
9368
9369 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9370
9371         * driver.cs: ignore /debug switch except for Unix platforms.
9372
9373 2002-10-23  Nick Drochak  <ndrochak@gol.com>
9374
9375         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
9376
9377 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
9378
9379         * driver.cs: Do not make mcs-debug conditional, so we do not break
9380         builds that use it.
9381
9382         * statement.cs (UsageVector.MergeChildren): I would like Martin to
9383         review this patch.  But basically after all the children variables
9384         have been merged, the value of "Breaks" was not being set to
9385         new_breaks for Switch blocks.  I think that it should be set after
9386         it has executed.  Currently I set this to the value of new_breaks,
9387         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
9388         conservative, but I do not understand this code very well.
9389
9390         I did not break anything in the build, so that is good ;-)
9391
9392         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
9393
9394 2002-10-20  Mark Crichton  <crichton@gimp.org>
9395
9396         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
9397
9398 2002-10-20  Nick Drochak  <ndrochak@gol.com>
9399
9400         * cfold.cs: Fixed compile blocker.
9401
9402 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
9403
9404         * driver.cs: I was chekcing the key, not the file.
9405
9406 2002-10-19  Ravi Pratap  <ravi@ximian.com>
9407
9408         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
9409         message that we were generating - we just need to silently return
9410         a null.
9411
9412 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
9413
9414         * class.cs (Event.Define): Change my previous commit, as this
9415         breaks the debugger.  This is a temporary hack, as it seems like
9416         the compiler is generating events incorrectly to begin with.
9417
9418         * expression.cs (Binary.ResolveOperator): Added support for 
9419         "U operator - (E x, E y)"
9420
9421         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
9422         y)".
9423
9424         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
9425         init-only variables, but this path did not take into account that
9426         there might be also instance readonly variables.  Correct this
9427         problem. 
9428
9429         This fixes bug 32253
9430
9431         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
9432         delegates as well.
9433
9434         * driver.cs: Change the extension for modules to `netmodule'
9435
9436         * cs-parser.jay: Improved slightly the location tracking for
9437         the debugger symbols.
9438
9439         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
9440         modifiers that were specified instead of the hardcoded value
9441         (FamAndAssem).  This was basically ignoring the static modifier,
9442         and others.  Fixes 32429.
9443
9444         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
9445         fixed a bug in the process (32476)
9446
9447         * expression.cs (ArrayAccess.EmitAssign): Patch from
9448         hwang_rob@yahoo.ca that fixes bug 31834.3
9449
9450 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
9451
9452         * driver.cs: Make the module extension .netmodule.
9453
9454 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
9455
9456         * driver.cs: Report an error if the resource file is not found
9457         instead of crashing.
9458
9459         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
9460         false, like Emit does.
9461
9462 2002-10-16  Nick Drochak  <ndrochak@gol.com>
9463
9464         * typemanager.cs: Remove unused private member.  Also reported mcs
9465         bug to report this as a warning like csc.
9466
9467 2002-10-15  Martin Baulig  <martin@gnome.org>
9468
9469         * statement.cs (Statement.Emit): Made this a virtual method; emits
9470         the line number info and calls DoEmit().
9471         (Statement.DoEmit): New protected abstract method, formerly knows
9472         as Statement.Emit().
9473
9474         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
9475
9476 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
9477
9478         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
9479         have fixed a remaining problem: not every AddXXXX was adding a
9480         fully qualified name.  
9481
9482         Now everyone registers a fully qualified name in the DeclSpace as
9483         being defined instead of the partial name.  
9484
9485         Downsides: we are slower than we need to be due to the excess
9486         copies and the names being registered this way.  
9487
9488         The reason for this is that we currently depend (on the corlib
9489         bootstrap for instance) that types are fully qualified, because
9490         we dump all the types in the namespace, and we should really have
9491         types inserted into the proper namespace, so we can only store the
9492         basenames in the defined_names array.
9493
9494 2002-10-10  Martin Baulig  <martin@gnome.org>
9495
9496         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
9497         from bug #31834, see the bug report for a testcase which is
9498         miscompiled.
9499
9500 2002-10-10  Martin Baulig  <martin@gnome.org>
9501
9502         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
9503         flow analysis code for this.
9504
9505         * statement.cs (Do, While, For): Tell the flow analysis code about
9506         infinite loops.
9507         (FlowBranching.UsageVector): Added support for infinite loops.
9508         (Block.Resolve): Moved the dead code elimination here and use flow
9509         analysis to do it.
9510
9511 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
9512
9513         * class.cs (Field.Define): Catch cycles on struct type
9514         definitions. 
9515
9516         * typemanager.cs (IsUnmanagedtype): Do not recursively check
9517         fields if the fields are static.  We only need to check instance
9518         fields. 
9519
9520         * expression.cs (As.DoResolve): Test for reference type.
9521
9522         * statement.cs (Using.ResolveExpression): Use
9523         ConvertImplicitRequired, not ConvertImplicit which reports an
9524         error on failture
9525         (Using.ResolveLocalVariableDecls): ditto.
9526
9527         * expression.cs (Binary.ResolveOperator): Report errors in a few
9528         places where we had to.
9529
9530         * typemanager.cs (IsUnmanagedtype): Finish implementation.
9531
9532 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
9533
9534         * expression.cs: Use StoreFromPtr instead of extracting the type
9535         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
9536
9537         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
9538         an enumeration value to a System.Enum, but System.Enum is not a
9539         value type, but an class type, so we need to box.
9540
9541         (Expression.ConvertExplicit): One codepath could return
9542         errors but not flag them.  Fix this.  Fixes #31853
9543
9544         * parameter.cs (Resolve): Do not allow void as a parameter type.
9545
9546 2002-10-06  Martin Baulig  <martin@gnome.org>
9547
9548         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
9549         if it's a class type and not a struct.  Fixes #31815.
9550
9551 2002-10-06  Martin Baulig  <martin@gnome.org>
9552
9553         * statement.cs: Reworked the flow analysis code a bit to make it
9554         usable for dead code elimination.
9555
9556 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
9557
9558         * cs-parser.jay: allow empty source files. Fixes bug #31781.
9559
9560 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
9561
9562         * expression.cs (ComposedCast.DoResolveType): A quick workaround
9563         to fix the test 165, will investigate deeper.
9564
9565 2002-10-04  Martin Baulig  <martin@gnome.org>
9566
9567         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
9568         finally blocks actually work.
9569         (Try.Resolve): We don't need to create a sibling for `finally' if
9570         there is no finally block.
9571
9572 2002-10-04  Martin Baulig  <martin@gnome.org>
9573
9574         * class.cs (Constructor.Define): The default accessibility for a
9575         non-default constructor is private, not public.
9576
9577 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
9578
9579         * class.cs (Constructor): Make AllowedModifiers public, add
9580         EXTERN.
9581
9582         * cs-parser.jay: Perform the modifiers test here, as the
9583         constructor for the Constructor class usually receives a zero
9584         because of the way we create it (first we create, later we
9585         customize, and we were never checking the modifiers).
9586
9587         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
9588         is a version of LookupTypeReflection that includes the type-name
9589         cache.  This can be used as a fast path for functions that know
9590         the fully qualified name and are only calling into *.GetType() to
9591         obtain a composed type.
9592
9593         This is also used by TypeManager.LookupType during its type
9594         composition.
9595
9596         (LookupType): We now also track the real type name, as sometimes
9597         we can get a quey for the real type name from things like
9598         ComposedCast.  This fixes bug 31422.
9599
9600         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
9601         complete type fullname, it does not have to go through the type
9602         resolution system to obtain the composed version of the type (for
9603         obtaining arrays or pointers).
9604
9605         (Conditional.Emit): Use the EmitBoolExpression to
9606         generate nicer code, as requested by Paolo.
9607
9608         (ArrayCreation.CheckIndices): Use the patch from
9609         hwang_rob@yahoo.ca to validate the array initializers. 
9610
9611 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
9612
9613         * class.cs (ConstructorInitializer.Emit): simplify code by using
9614         Invocation.EmitCall, and at the same time, fix the bugs in calling
9615         parent constructors that took variable arguments. 
9616
9617         * ecore.cs (Expression.ConvertNumericExplicit,
9618         Expression.ImplicitNumericConversion): Remove the code that
9619         manually wrapped decimal (InternalTypeConstructor call is now gone
9620         as well).
9621
9622         * expression.cs (Cast.TryReduce): Also handle decimal types when
9623         trying to perform a constant fold on the type.
9624
9625         * typemanager.cs (IsUnmanagedtype): Partially implemented.
9626
9627         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
9628         that only turned off an error report, and did nothing else. 
9629
9630 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
9631
9632         * driver.cs: Handle and ignore /fullpaths
9633
9634 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
9635
9636         * expression.cs (Binary.ResolveOperator): Catch the case where
9637         DoNumericPromotions returns true, 
9638
9639         (Binary.DoNumericPromotions): Simplify the code, and the tests.
9640
9641 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
9642
9643         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
9644         report error 70.
9645
9646 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
9647
9648         * ecore.cs (ConvertNumericExplicit): It is not enough that the
9649         conversion exists, but it is also required that the conversion be
9650         performed.  This manifested in "(Type64Enum) 2".  
9651
9652         * class.cs (TypeManager.AddMethod): The fix is not to change
9653         AddEnum, because that one was using a fully qualified name (every
9654         DeclSpace derivative does), but to change the AddMethod routine
9655         that was using an un-namespaced name.  This now correctly reports
9656         the duplicated name.
9657
9658         Revert patch until I can properly fix it.  The issue
9659         is that we have a shared Type space across all namespaces
9660         currently, which is wrong.
9661
9662         Options include making the Namespace a DeclSpace, and merge
9663         current_namespace/current_container in the parser.
9664
9665 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
9666
9667         * cs-parser.jay: Improve error reporting when we get a different
9668         kind of expression in local_variable_type and
9669         local_variable_pointer_type. 
9670
9671         Propagate this to avoid missleading errors being reported.
9672
9673         * ecore.cs (ImplicitReferenceConversion): treat
9674         TypeManager.value_type as a target just like object_type.   As
9675         code like this:
9676
9677         ValueType v = 1;
9678
9679         Is valid, and needs to result in the int 1 being boxed before it
9680         is assigned to the value type v.
9681
9682         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
9683         to validate the enumeration name.
9684
9685         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
9686         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
9687         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
9688
9689         * ecore.cs (TryImplicitIntConversion): When doing an
9690         implicit-enumeration-conversion, check if the type is 64-bits and
9691         perform a conversion before passing to EnumConstant.
9692
9693 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
9694
9695         * decl.cs (Error_AmbiguousTypeReference); New routine used to
9696         report ambiguous type references.  Unlike the MS version, we
9697         report what the ambiguity is.   Innovation at work ;-)
9698
9699         (DeclSpace.FindType): Require a location argument to
9700         display when we display an ambiguous error.
9701
9702         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
9703
9704         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
9705
9706         * expression.cs (EmitDynamicInitializers): Apply patch from
9707         hwang_rob@yahoo.ca that fixes the order in which we emit our
9708         initializers. 
9709
9710 2002-09-21  Martin Baulig  <martin@gnome.org>
9711
9712         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
9713         delegate takes no arguments.
9714
9715 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
9716
9717         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
9718         from integers.
9719
9720         * expression.cs: Extract the underlying type.
9721
9722         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
9723
9724         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
9725
9726 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
9727
9728         * class.cs (TypeContainer.DefineType): We can not use the nice
9729         PackingSize with the size set to 1 DefineType method, because it
9730         will not allow us to define the interfaces that the struct
9731         implements.
9732
9733         This completes the fixing of bug 27287
9734
9735         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
9736         means also structs.  This fixes part of the problem. 
9737         (Expresion.ImplicitReferenceConversionExists): ditto.
9738
9739         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
9740         error if there were no errors reported during the type lookup
9741         process, to avoid duplicates or redundant errors.  Without this
9742         you would get an ambiguous errors plus a type not found.  We have
9743         beaten the user enough with the first error.  
9744
9745         (DeclSparce.FindType): Emit a warning if we have an ambiguous
9746         reference. 
9747
9748         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
9749         during the resolution process, stop the lookup, this avoids
9750         repeated error reports (same error twice).
9751
9752         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
9753
9754         * typemanager.cs (LookupType): Redo the type lookup code to match
9755         the needs of System.Reflection.  
9756
9757         The issue is that System.Reflection requires references to nested
9758         types to begin with a "+" sign instead of a dot.  So toplevel
9759         types look like: "NameSpace.TopLevelClass", and nested ones look
9760         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
9761         levels. 
9762
9763 2002-09-19  Martin Baulig  <martin@gnome.org>
9764
9765         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
9766         says that a method always returns or always throws an exception,
9767         don't report the CS0161.
9768
9769         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
9770         set `Returns = new_returns'.
9771
9772 2002-09-19  Martin Baulig  <martin@gnome.org>
9773
9774         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
9775         to an enum constant, check for a CS0176.
9776
9777 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
9778
9779         * class.cs (TypeContainer.CheckPairedOperators): Now we check
9780         for operators that must be in pairs and report errors.
9781
9782         * ecore.cs (SimpleName.DoResolveType): During the initial type
9783         resolution process, when we define types recursively, we must
9784         check first for types in our current scope before we perform
9785         lookups in the enclosing scopes.
9786
9787         * expression.cs (MakeByteBlob): Handle Decimal blobs.
9788
9789         (Invocation.VerifyArgumentsCompat): Call
9790         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
9791         I thought we were supposed to always call this, but there are a
9792         few places in the code where we dont do it.
9793
9794 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
9795
9796         * driver.cs: Add support in -linkres and -resource to specify the
9797         name of the identifier.
9798
9799 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
9800
9801         * ecore.cs (StandardConversionExists): Sync with the conversion
9802         code: allow anything-* to void* conversions.
9803
9804         (FindMostSpecificSource): Use an Expression argument
9805         instead of a Type, because we might be handed over a Literal which
9806         gets a few more implicit conversions that plain types do not.  So
9807         this information was being lost.
9808
9809         Also, we drop the temporary type-holder expression when not
9810         required.
9811
9812 2002-09-17  Martin Baulig  <martin@gnome.org>
9813
9814         * class.cs (PropertyBase.CheckBase): Don't check the base class if
9815         this is an explicit interface implementation.
9816
9817 2002-09-17  Martin Baulig  <martin@gnome.org>
9818
9819         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
9820         different `IndexerName' attributes.
9821
9822         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
9823         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
9824         virtual CommonResolve().
9825
9826 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
9827
9828         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
9829         and convert that to the UnderlyingType.
9830
9831         * statement.cs (Foreach.Resolve): Indexers are just like variables
9832         or PropertyAccesses.
9833
9834         * cs-tokenizer.cs (consume_string): Track line numbers and columns
9835         inside quoted strings, we were not doing this before.
9836
9837 2002-09-16  Martin Baulig  <martin@gnome.org>
9838
9839         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
9840         resolve it.  This is needed for the definite assignment check of the
9841         instance expression, fixes bug #29846.
9842         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
9843
9844 2002-09-16  Nick Drochak  <ndrochak@gol.com>
9845
9846         * parameter.cs: Fix compile error.  Cannot reference static member
9847         from an instance object.  Is this an mcs bug?
9848
9849 2002-09-14  Martin Baulig  <martin@gnome.org>
9850
9851         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
9852         multiple times.  Fixes bug #30295, added test-166.cs.
9853
9854 2002-09-14  Martin Baulig  <martin@gnome.org>
9855
9856         * statement.cs (Block.Emit): Don't emit unreachable code.
9857         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
9858         `break' statements.
9859         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
9860
9861 2002-09-14  Martin Baulig  <martin@gnome.org>
9862
9863         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
9864         is set.
9865
9866 2002-09-14  Martin Baulig  <martin@gnome.org>
9867
9868         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
9869         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
9870         be false on the ms runtime.
9871
9872 2002-09-13  Martin Baulig  <martin@gnome.org>
9873
9874         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
9875         the CS0038 error message.
9876
9877 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
9878
9879         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
9880         constant inside, return it.
9881
9882 2002-09-12  Martin Baulig  <martin@gnome.org>
9883
9884         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
9885         implicit conversion can be done between enum types.
9886
9887         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
9888         check whether an implicit conversion to the current enum's UnderlyingType
9889         exists and report an error if not.
9890
9891         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
9892         without debugging support.
9893
9894         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
9895         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
9896
9897 2002-09-12  Martin Baulig  <martin@gnome.org>
9898
9899         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
9900
9901         * ecore.cs (IMemberExpr.DeclaringType): New property.
9902         (SimpleName.SimpleNameResolve): Check whether we're accessing a
9903         nonstatic member of an outer type (CS0038).
9904
9905 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
9906
9907         * driver.cs: Activate the using-error detector at warning level
9908         4 (at least for MS-compatible APIs).
9909
9910         * namespace.cs (VerifyUsing): Small buglett fix.
9911
9912         * pending.cs (PendingImplementation): pass the container pointer. 
9913
9914         * interface.cs (GetMethods): Allow for recursive definition.  Long
9915         term, I would like to move every type to support recursive
9916         definitions, not the current ordering mechanism that we have right
9917         now.
9918
9919         The situation is this: Attributes are handled before interfaces,
9920         so we can apply attributes to interfaces.  But some attributes
9921         implement interfaces, we will now handle the simple cases
9922         (recursive definitions will just get an error).  
9923
9924         * parameter.cs: Only invalidate types at the end if we fail to
9925         lookup all types.  
9926
9927 2002-09-09  Martin Baulig  <martin@gnome.org>
9928
9929         * ecore.cs (PropertyExpr.Emit): Also check for
9930         TypeManager.system_int_array_get_length so this'll also work when
9931         compiling corlib.  Fixes #30003.
9932
9933 2002-09-09  Martin Baulig  <martin@gnome.org>
9934
9935         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
9936         and throw an exception if we can't get the type's size.  Fixed #30040,
9937         added test-165.cs.
9938
9939 2002-09-09  Martin Baulig  <martin@gnome.org>
9940
9941         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
9942
9943         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
9944         context.  Fixes bug #30027.
9945
9946         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
9947         virtual functions.  Fixes bug #30043, added test-164.cs.
9948
9949 2002-09-08  Ravi Pratap  <ravi@ximian.com>
9950
9951         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
9952
9953 2002-09-08  Nick Drochak  <ndrochak@gol.com>
9954
9955         * driver.cs: Use an object to get the windows codepage since it's not a
9956         static property.
9957
9958 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
9959
9960         * statement.cs (For.Emit): for infinite loops (test == null)
9961         return whether there is a break inside, not always "true".
9962
9963         * namespace.cs (UsingEntry): New struct to hold the name of the
9964         using definition, the location where it is defined, and whether it
9965         has been used in a successful type lookup.
9966
9967         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
9968         strings.
9969
9970         * decl.cs: ditto.
9971
9972 2002-09-06  Ravi Pratap  <ravi@ximian.com>
9973
9974         * attribute.cs : Fix incorrect code which relied on catching
9975         a NullReferenceException to detect a null being passed in
9976         where an object was expected.
9977
9978 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
9979
9980         * statement.cs (Try): flag the catch variable as assigned
9981
9982         * expression.cs (Cast): Simplified by using ResolveType instead of
9983         manually resolving.
9984
9985         * statement.cs (Catch): Fix bug by using ResolveType.
9986
9987 2002-09-06  Ravi Pratap  <ravi@ximian.com>
9988
9989         * expression.cs (BetterConversion): Special case for when we have
9990         a NullLiteral as the argument and we have to choose between string
9991         and object types - we choose string the way csc does.
9992
9993         * attribute.cs (Attribute.Resolve): Catch the
9994         NullReferenceException and report error #182 since the Mono
9995         runtime no more has the bug and having this exception raised means
9996         we tried to select a constructor which takes an object and is
9997         passed a null.
9998
9999 2002-09-05  Ravi Pratap  <ravi@ximian.com>
10000
10001         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
10002         message (1502, 1503) when we can't locate a method after overload
10003         resolution. This is much more informative and closes the bug
10004         Miguel reported.
10005
10006         * interface.cs (PopulateMethod): Return if there are no argument
10007         types. Fixes a NullReferenceException bug.
10008
10009         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
10010         expressions too. Previously we were checking only in one place for
10011         positional arguments leaving out named arguments.
10012
10013         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
10014         type to the enum type is not allowed. Remove code corresponding to
10015         that.
10016
10017         (ConvertNumericExplicit): Allow explicit conversions from
10018         the underlying type to enum type. This precisely follows the spec
10019         and closes a bug filed by Gonzalo.
10020
10021 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10022
10023         * compiler.csproj:
10024         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
10025
10026 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
10027
10028         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
10029         it was important that we stored the right value after the
10030         reduction in `converted'.
10031
10032 2002-09-04  Martin Baulig  <martin@gnome.org>
10033
10034         * location.cs (Location.SymbolDocument): Use full pathnames for the
10035         source files.
10036
10037 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
10038
10039         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
10040         of the expression resolve mechanism, because that will catch the
10041         SimpleName error failures.
10042
10043         (Conditional): If we can not resolve the
10044         expression, return, do not crash.
10045
10046 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10047
10048         * cs-tokenizer.cs:
10049         (location): display token name instead of its number.
10050
10051 2002-08-28  Martin Baulig  <martin@gnome.org>
10052
10053         * expression.cs (Binary.ResolveOperator): Don't silently return
10054         but return an error if an operator cannot be applied between two
10055         enum types.
10056
10057 2002-08-28  Martin Baulig  <martin@gnome.org>
10058
10059         * class.cs (Constructor.Define): Set the permission attributes
10060         correctly instead of making all constructors public.
10061
10062 2002-08-28  Martin Baulig  <martin@gnome.org>
10063
10064         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
10065         for private members before reporting a CS0103; if we find anything,
10066         it's a CS0122.
10067
10068 2002-08-28  Martin Baulig  <martin@gnome.org>
10069
10070         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
10071         to check whether `closure_start_type == closure_invocation_type',
10072         we also need to check whether `m.DeclaringType == closure_invocation_type'
10073         before bypassing the permission checks.  We might be accessing
10074         protected/private members from the base class.
10075         (TypeManager.RealMemberLookup): Only set private_ok if private
10076         members were requested via BindingFlags.NonPublic.
10077
10078         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
10079
10080         * expression.cs (MemberAccess.ResolveMemberAccess): Set
10081         MethodGroupExpr.IsExplicitImpl if appropriate.
10082         (Invocation.DoResolve): Don't report the CS0120 for explicit
10083         interface implementations.
10084
10085 2002-08-27  Martin Baulig  <martin@gnome.org>
10086
10087         * expression.cs (Invocation.DoResolve): If this is a static
10088         method and we don't have an InstanceExpression, we must report
10089         a CS0120.
10090
10091 2002-08-25  Martin Baulig  <martin@gnome.org>
10092
10093         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
10094         `==' between a valuetype and an object.
10095
10096 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
10097
10098         * ecore.cs (TypeExpr): Provide a ToString method.
10099
10100 2002-08-24  Martin Baulig  <martin@gnome.org>
10101
10102         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
10103         now called proggie.dbg and it's a binary file.
10104
10105 2002-08-23  Martin Baulig  <martin@gnome.org>
10106
10107         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
10108
10109 2002-08-23  Martin Baulig  <martin@gnome.org>
10110
10111         * struct.cs (MyStructInfo.ctor): Make this work with empty
10112         structs; it's not allowed to use foreach() on null.
10113
10114 2002-08-23  Martin Baulig  <martin@gnome.org>
10115
10116         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
10117         writer the full pathname of the generated assembly.
10118
10119 2002-08-23  Martin Baulig  <martin@gnome.org>
10120
10121         * statements.cs (FlowBranching.UsageVector.MergeChildren):
10122         A `finally' block never returns or breaks; improved handling of
10123         unreachable code.
10124
10125 2002-08-23  Martin Baulig  <martin@gnome.org>
10126
10127         * statement.cs (Throw.Resolve): Allow `throw null'.
10128
10129 2002-08-23  Martin Baulig  <martin@gnome.org>
10130
10131         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
10132         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
10133         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
10134         MemberLookup would return a wrong event if this is an explicit
10135         interface implementation and the class has an event with the same
10136         name.
10137
10138 2002-08-23  Martin Baulig  <martin@gnome.org>
10139
10140         * statement.cs (Block.AddChildVariableNames): New public method.
10141         (Block.AddChildVariableName): Likewise.
10142         (Block.IsVariableNameUsedInChildBlock): Likewise.
10143         (Block.AddVariable): Check whether a variable name has already
10144         been used in a child block.
10145
10146         * cs-parser.jay (declare_local_variables): Mark all variable names
10147         from the current block as being used in a child block in the
10148         implicit block.
10149
10150 2002-08-23  Martin Baulig  <martin@gnome.org>
10151
10152         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
10153         find the symbol writer.
10154
10155         * driver.cs: csc also allows the arguments to /define being
10156         separated by commas, not only by semicolons.
10157
10158 2002-08-23  Martin Baulig  <martin@gnome.org>
10159
10160         * interface.cs (Interface.GetMembers): Added static check for events.
10161
10162 2002-08-15  Martin Baulig  <martin@gnome.org>
10163
10164         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
10165         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
10166
10167         * ecore.cs (Expression.MemberLookup): Added documentation and explained
10168         why the MethodData.EmitDestructor() change was necessary.
10169
10170 2002-08-20  Martin Baulig  <martin@gnome.org>
10171
10172         * class.cs (TypeContainer.FindMembers): Added static check for events.
10173
10174         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
10175
10176         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
10177         use Type.GetEvents(), not Type.FindMembers().
10178
10179 2002-08-20  Martin Baulig  <martin@gnome.org>
10180
10181         * decl.cs (MemberCache): Added a special method cache which will
10182         be used for method-only searched.  This ensures that a method
10183         search will return a MethodInfo with the correct ReflectedType for
10184         inherited methods.      
10185
10186 2002-08-20  Martin Baulig  <martin@gnome.org>
10187
10188         * decl.cs (DeclSpace.FindMembers): Made this public.
10189
10190 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10191
10192         * delegate.cs: fixed build on windows.
10193         [FIXME:  Filed as bug #29150: MCS must report these errors.]
10194
10195 2002-08-19  Ravi Pratap  <ravi@ximian.com>
10196
10197         * ecore.cs (StandardConversionExists): Return a false
10198         if we are trying to convert the void type to anything else
10199         since that is not allowed.
10200
10201         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
10202         we flag error 70 in the event an event is trying to be accessed
10203         directly from outside the declaring type.
10204
10205 2002-08-20  Martin Baulig  <martin@gnome.org>
10206
10207         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
10208         MemberCache from typemanager.cs to decl.cs.
10209
10210 2002-08-19  Martin Baulig  <martin@gnome.org>
10211
10212         * class.cs (TypeContainer): Implement IMemberContainer.
10213         (TypeContainer.DefineMembers): Create the MemberCache.
10214         (TypeContainer.FindMembers): Do better BindingFlags checking; only
10215         return public members if BindingFlags.Public was given, check
10216         whether members are static.
10217
10218 2002-08-16  Martin Baulig  <martin@gnome.org>
10219
10220         * decl.cs (DeclSpace.Define): Splitted this in Define and
10221         DefineMembers.  DefineMembers is called first and initializes the
10222         MemberCache.
10223
10224         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
10225         DefineMembers() on all our DeclSpaces.
10226
10227         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
10228         but call DefineMembers() on all nested interfaces.  We call their
10229         Define() in our new Define() function.
10230
10231         * interface.cs (Interface): Implement IMemberContainer.
10232         (Interface.Define): Moved all code except the attribute stuf to
10233         DefineMembers().
10234         (Interface.DefineMembers): Initialize the member cache.
10235
10236         * typemanager.cs (IMemberFinder): Removed this interface, we don't
10237         need this anymore since we can use MemberCache.FindMembers directly.
10238
10239 2002-08-19  Martin Baulig  <martin@gnome.org>
10240
10241         * typemanager.cs (MemberCache): When creating the cache for an
10242         interface type, add all inherited members.
10243         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
10244         to `out bool used_cache' and documented it.
10245         (TypeManager.MemberLookup): If we already used the cache in the first
10246         iteration, we don't need to do the interfaces check.
10247
10248 2002-08-19  Martin Baulig  <martin@gnome.org>
10249
10250         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
10251         here from IMemberFinder and don't implement this interface anymore.
10252         (DeclSpace.MemberCache): Moved here from IMemberFinder.
10253
10254         * typemanager.cs (IMemberFinder): This interface is now only used by
10255         classes which actually support the member cache.
10256         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
10257         since we only put DeclSpaces into this Hashtable.
10258         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
10259         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
10260
10261 2002-08-16  Martin Baulig  <martin@gnome.org>
10262
10263         * typemanager.cs (ICachingMemberFinder): Removed.
10264         (IMemberFinder.MemberCache): New property.
10265         (TypeManager.FindMembers): Merged this with RealFindMembers().
10266         This function will never be called from TypeManager.MemberLookup()
10267         so we can't use the cache here, just the IMemberFinder.
10268         (TypeManager.MemberLookup_FindMembers): Check whether the
10269         IMemberFinder has a MemberCache and call the cache's FindMembers
10270         function.
10271         (MemberCache): Rewrote larger parts of this yet another time and
10272         cleaned it up a bit.
10273
10274 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
10275
10276         * driver.cs (LoadArgs): Support quoting.
10277
10278         (Usage): Show the CSC-like command line arguments.
10279
10280         Improved a few error messages.
10281
10282 2002-08-15  Martin Baulig  <martin@gnome.org>
10283
10284         * typemanager.cs (IMemberContainer.Type): New property.
10285         (IMemberContainer.IsInterface): New property.
10286
10287         The following changes are conditional to BROKEN_RUNTIME, which is
10288         defined at the top of the file.
10289
10290         * typemanager.cs (MemberCache.MemberCache): Don't add the base
10291         class'es members, but add all members from TypeHandle.ObjectType
10292         if we're an interface.
10293         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
10294         is the current type.
10295         (MemberCache.CacheEntry.Container): Removed this field.
10296         (TypeHandle.GetMembers): Include inherited members.
10297
10298 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10299
10300         * typemanager.cs: fixed compilation and added a comment on a field that
10301         is never used.
10302
10303 2002-08-15  Martin Baulig  <martin@gnome.org>
10304
10305         * class.cs (ConstructorInitializer.Resolve): In the
10306         Expression.MemberLookup call, use the queried_type as
10307         invocation_type.
10308
10309         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
10310         declared' attribute, it's always true.
10311         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
10312         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
10313         temporary wrapper for FindMembers which tells MemberLookup whether
10314         members from the base classes are included in the return value.
10315         This will go away soon.
10316         (TypeManager.MemberLookup): Use this temporary hack here; once the
10317         new MemberCache is completed, we don't need to do the DeclaredOnly
10318         looping here anymore since the MemberCache will take care of this.
10319         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
10320         (MemberCache): When creating the MemberCache for a class, get
10321         members from the current class and all its base classes.
10322         (MemberCache.CacheEntry.Container): New field.  This is a
10323         temporary hack until the Mono runtime is fixed to distinguish
10324         between ReflectedType and DeclaringType.  It allows us to use MCS
10325         with both the MS runtime and the unfixed Mono runtime without
10326         problems and without accecting performance.
10327         (MemberCache.SearchMembers): The DeclaredOnly looping from
10328         TypeManager.MemberLookup is now done here.      
10329
10330 2002-08-14  Martin Baulig  <martin@gnome.org>
10331
10332         * statement.cs (MyStructInfo.MyStructInfo): Don't call
10333         Type.GetFields on dynamic types but get the fields from the
10334         corresponding TypeContainer.
10335         (MyStructInfo.GetStructInfo): Added check for enum types.
10336
10337         * typemanager.cs (MemberList.IsSynchronized): Implemented.
10338         (MemberList.SyncRoot): Implemented.
10339         (TypeManager.FilterWithClosure): No need to check permissions if
10340         closure_start_type == closure_invocation_type, don't crash if
10341         closure_invocation_type is null.
10342
10343 2002-08-13  Martin Baulig  <martin@gnome.org>
10344
10345         Rewrote TypeContainer.FindMembers to use a member cache.  This
10346         gives us a speed increase of about 35% for the self-hosting MCS
10347         build and of about 15-20% for the class libs (both on GNU/Linux).
10348
10349         * report.cs (Timer): New class to get enhanced profiling.  This
10350         whole class is "TIMER" conditional since it remarkably slows down
10351         compilation speed.
10352
10353         * class.cs (MemberList): New class.  This is an IList wrapper
10354         which we're now using instead of passing MemberInfo[]'s around to
10355         avoid copying this array unnecessarily.
10356         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
10357         (ICachingMemberFinder, IMemberContainer): New interface.
10358         (TypeManager.FilterWithClosure): If `criteria' is null, the name
10359         has already been checked, otherwise use it for the name comparision.
10360         (TypeManager.FindMembers): Renamed to RealMemberFinder and
10361         provided wrapper which tries to use ICachingMemberFinder.FindMembers
10362         if possible.  Returns a MemberList, not a MemberInfo [].
10363         (TypeHandle): New class, implements IMemberContainer.  We create
10364         one instance of this class per type, it contains a MemberCache
10365         which is used to do the member lookups.
10366         (MemberCache): New class.  Each instance of this class contains
10367         all members of a type and a name-based hash table.
10368         (MemberCache.FindMembers): This is our new member lookup
10369         function.  First, it looks up all members of the requested name in
10370         the hash table.  Then, it walks this list and sorts out all
10371         applicable members and returns them.
10372
10373 2002-08-13  Martin Baulig  <martin@gnome.org>
10374
10375         In addition to a nice code cleanup, this gives us a performance
10376         increase of about 1.4% on GNU/Linux - not much, but it's already
10377         half a second for the self-hosting MCS compilation.
10378
10379         * typemanager.cs (IMemberFinder): New interface.  It is used by
10380         TypeManager.FindMembers to call FindMembers on a TypeContainer,
10381         Enum, Delegate or Interface.
10382         (TypeManager.finder_to_member_finder): New PtrHashtable.
10383         (TypeManager.finder_to_container): Removed.
10384         (TypeManager.finder_to_delegate): Removed.
10385         (TypeManager.finder_to_interface): Removed.
10386         (TypeManager.finder_to_enum): Removed.
10387
10388         * interface.cs (Interface): Implement IMemberFinder.
10389
10390         * delegate.cs (Delegate): Implement IMemberFinder.
10391
10392         * enum.cs (Enum): Implement IMemberFinder.
10393
10394         * class.cs (TypeContainer): Implement IMemberFinder.
10395
10396 2002-08-12  Martin Baulig  <martin@gnome.org>
10397
10398         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
10399
10400 2002-08-12  Martin Baulig  <martin@gnome.org>
10401
10402         * ecore.cs (ITypeExpression): New interface for expressions which
10403         resolve to a type.
10404         (TypeExpression): Renamed to TypeLookupExpression.
10405         (Expression.DoResolve): If we're doing a types-only lookup, the
10406         expression must implement the ITypeExpression interface and we
10407         call DoResolveType() on it.
10408         (SimpleName): Implement the new ITypeExpression interface.
10409         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
10410         hack, the situation that we're only looking up types can't happen
10411         anymore when this method is called.  Moved the type lookup code to
10412         DoResolveType() and call it.
10413         (SimpleName.DoResolveType): This ITypeExpression interface method
10414         is now doing the types-only lookup.
10415         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
10416         (ResolveFlags): Added MaskExprClass.
10417
10418         * expression.cs (MemberAccess): Implement the ITypeExpression
10419         interface.
10420         (MemberAccess.DoResolve): Added support for a types-only lookup
10421         when we're called via ITypeExpression.DoResolveType().
10422         (ComposedCast): Implement the ITypeExpression interface.
10423
10424         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
10425         Expression.Resolve() with ResolveFlags.Type instead.
10426
10427 2002-08-12  Martin Baulig  <martin@gnome.org>
10428
10429         * interface.cs (Interface.Define): Apply attributes.
10430
10431         * attribute.cs (Attribute.ApplyAttributes): Added support for
10432         interface attributes.
10433
10434 2002-08-11  Martin Baulig  <martin@gnome.org>
10435
10436         * statement.cs (Block.Emit): Only check the "this" variable if we
10437         do not always throw an exception.
10438
10439         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
10440         whether the property has a set accessor.
10441
10442 2002-08-11  Martin Baulig  <martin@gnome.org>
10443
10444         Added control flow analysis support for structs.
10445
10446         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
10447         with control flow analysis turned off.
10448         (IVariable): New interface.
10449         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
10450         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
10451         (FieldExpr.DoResolve): Resolve the instance expression with flow
10452         analysis turned off and do the definite assignment check after the
10453         resolving when we know what the expression will resolve to.
10454
10455         * expression.cs (LocalVariableReference, ParameterReference):
10456         Implement the new IVariable interface, only call the flow analysis
10457         code if ec.DoFlowAnalysis is true.
10458         (This): Added constructor which takes a Block argument.  Implement
10459         the new IVariable interface.
10460         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
10461         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
10462         This does the definite assignment checks for struct members.
10463
10464         * class.cs (Constructor.Emit): If this is a non-static `struct'
10465         constructor which doesn't have any initializer, call
10466         Block.AddThisVariable() to tell the flow analysis code that all
10467         struct elements must be initialized before control returns from
10468         the constructor.
10469
10470         * statement.cs (MyStructInfo): New public class.
10471         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
10472         argument to this indexer.  If non-zero, check an individual struct
10473         member, not the whole struct.
10474         (FlowBranching.CheckOutParameters): Check struct members.
10475         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
10476         overloaded versions of these methods which take an additional
10477         `int field_idx' argument to check struct members.
10478         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
10479         overloaded versions of these methods which take an additional
10480         `string field_name' argument to check struct member.s
10481         (VariableInfo): Implement the IVariable interface.
10482         (VariableInfo.StructInfo): New public property.  Returns the
10483         MyStructInfo instance of the variable if it's a struct or null.
10484         (Block.AddThisVariable): New public method.  This is called from
10485         Constructor.Emit() for non-static `struct' constructor which do
10486         not have any initializer.  It creates a special variable for the
10487         "this" instance variable which will be checked by the flow
10488         analysis code to ensure that all of the struct's fields are
10489         initialized before control returns from the constructor.
10490         (UsageVector): Added support for struct members.  If a
10491         variable/parameter is a struct with N members, we reserve a slot
10492         in the usage vector for each member.  A struct is considered fully
10493         initialized if either the struct itself (slot 0) or all its
10494         members are initialized.
10495
10496 2002-08-08  Martin Baulig  <martin@gnome.org>
10497
10498         * driver.cs (Driver.MainDriver): Only report an error CS5001
10499         if there were no compilation errors.
10500
10501         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
10502         `UnsafeContext' property to determine whether the parent is in
10503         unsafe context rather than checking the parent's ModFlags:
10504         classes nested in an unsafe class are unsafe as well.
10505
10506 2002-08-08  Martin Baulig  <martin@gnome.org>
10507
10508         * statement.cs (UsageVector.MergeChildren): Distinguish between
10509         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
10510         we return.  Added test17() and test18() to test-154.cs.
10511
10512 2002-08-08  Martin Baulig  <martin@gnome.org>
10513
10514         * typemanager.cs (TypeManager.FilterWithClosure): If we have
10515         Family access, make sure the invoking type isn't a subclass of the
10516         queried type (that'd be a CS1540).
10517
10518         * ecore.cs (Expression.MemberLookup): Added overloaded version of
10519         this method which takes an additional `Type invocation_type'.
10520
10521         * expression.cs (BaseAccess.DoResolve): Use the base type as
10522         invocation and query type.
10523         (MemberAccess.DoResolve): If the lookup failed and we're about to
10524         report a CS0122, try a lookup with the ec.ContainerType - if this
10525         succeeds, we must report a CS1540.
10526
10527 2002-08-08  Martin Baulig  <martin@gnome.org>
10528
10529         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
10530         (MethodGroupExpr): Implement the IMemberExpr interface.
10531
10532         * expression (MemberAccess.ResolveMemberAccess): No need to have
10533         any special code for MethodGroupExprs anymore, they're now
10534         IMemberExprs.   
10535
10536 2002-08-08  Martin Baulig  <martin@gnome.org>
10537
10538         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
10539         Family, FamANDAssem and FamORAssem permissions.
10540         (TypeManager.IsSubclassOrNestedChildOf): New public method.
10541
10542 2002-08-08  Martin Baulig  <martin@gnome.org>
10543
10544         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
10545         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
10546         or loop block.
10547
10548 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
10549
10550         * driver.cs: implemented /resource option to embed managed resources.
10551
10552 2002-08-07  Martin Baulig  <martin@gnome.org>
10553
10554         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
10555         (FieldBase.HasFieldInitializer): New public property.
10556         (FieldBase.GetInitializerExpression): New public method.  Resolves and
10557         returns the field initializer and makes sure it is only resolved once.
10558         (TypeContainer.EmitFieldInitializers): Call
10559         FieldBase.GetInitializerExpression to get the initializer, this ensures
10560         that it isn't resolved multiple times.
10561
10562         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
10563         the resolving process (SimpleName/MemberLookup) that we're currently
10564         emitting a field initializer (which must not access any instance members,
10565         this is an error CS0236).
10566
10567         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
10568         argument, if the `IsFieldInitializer' flag is set, we must report and
10569         error CS0236 and not an error CS0120.   
10570
10571 2002-08-07  Martin Baulig  <martin@gnome.org>
10572
10573         * ecore.cs (IMemberExpr): New public interface.
10574         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
10575         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
10576         if the expression is an IMemberExpr.
10577
10578         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
10579         to be null, implicitly default to `this' if we're non-static in
10580         this case.  Simplified the code a lot by using the new IMemberExpr
10581         interface.  Also fixed bug #28176 here.
10582
10583 2002-08-06  Martin Baulig  <martin@gnome.org>
10584
10585         * cs-parser.jay (SimpleLookup): Removed.  We need to create
10586         ParameterReferences during semantic analysis so that we can do a
10587         type-only search when resolving Cast, TypeOf and SizeOf.
10588         (block): Pass the `current_local_parameters' to the Block's
10589         constructor.
10590
10591         * class.cs (ConstructorInitializer): Added `Parameters parameters'
10592         argument to the constructor.
10593         (ConstructorInitializer.Resolve): Create a temporary implicit
10594         block with the parameters.
10595
10596         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
10597         references here if we aren't doing a type-only search.
10598
10599         * statement.cs (Block): Added constructor which takes a
10600         `Parameters parameters' argument.
10601         (Block.Parameters): New public property.
10602
10603         * support.cs (InternalParameters.Parameters): Renamed `parameters'
10604         to `Parameters' and made it public readonly.
10605
10606 2002-08-06  Martin Baulig  <martin@gnome.org>
10607
10608         * ecore.cs (Expression.Warning): Made this public as well.
10609
10610         * report.cs (Report.Debug): Print the contents of collections.
10611
10612 2002-08-06  Martin Baulig  <martin@gnome.org>
10613
10614         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
10615         used to tell Resolve() which kinds of expressions it may return.
10616         (Expression.Resolve): Added overloaded version of this method which
10617         takes a `ResolveFlags flags' argument.  This can be used to tell
10618         Resolve() which kinds of expressions it may return.  Reports a
10619         CS0118 on error.
10620         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
10621         ResolveFlags.SimpleName.
10622         (Expression.Error118): Added overloaded version of this method which
10623         takes a `ResolveFlags flags' argument.  It uses the flags to determine
10624         which kinds of expressions are allowed.
10625
10626         * expression.cs (Argument.ResolveMethodGroup): New public method.
10627         Resolves an argument, but allows a MethodGroup to be returned.
10628         This is used when invoking a delegate.
10629
10630         * TODO: Updated a bit.
10631
10632 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10633
10634         Fixed compilation with csc.
10635
10636         * ecore.cs: Expression.Error made public. Is this correct? Should
10637         Warning be made public too?
10638
10639         * expression.cs: use ea.Location instead of ea.loc.
10640         [FIXME:  Filed as bug #28607: MCS must report these errors.]
10641
10642 2002-08-06  Martin Baulig  <martin@gnome.org>
10643
10644         * ecore.cs (Expression.loc): Moved the location here instead of
10645         duplicating it in all derived classes.
10646         (Expression.Location): New public property.
10647         (Expression.Error, Expression.Warning): Made them non-static and
10648         removed the location argument.
10649         (Expression.Warning): Added overloaded version which takes an
10650         `int level' argument.
10651         (Expression.Error118): Make this non-static and removed the
10652         expression and location arguments.
10653         (TypeExpr): Added location argument to the constructor.
10654
10655         * expression.cs (StaticCallExpr): Added location argument to
10656         the constructor.
10657         (Indirection, PointerArithmetic): Likewise.
10658         (CheckedExpr, UnCheckedExpr): Likewise.
10659         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
10660         (StringPtr): Likewise.
10661
10662
10663 2002-08-05  Martin Baulig  <martin@gnome.org>
10664
10665         * expression.cs (BaseAccess.DoResolve): Actually report errors.
10666
10667         * assign.cs (Assign.DoResolve): Check whether the source
10668         expression is a value or variable.
10669
10670         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
10671         while resolving the corresponding blocks.
10672
10673         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
10674         an error, don't silently return null.
10675
10676         * statement.cs (Block.AddVariable): Do the error reporting here
10677         and distinguish between CS0128 and CS0136.
10678         (Block.DoResolve): Report all unused labels (warning CS0164).
10679         (LabeledStatement): Pass the location to the constructor.
10680         (LabeledStatement.HasBeenReferenced): New property.
10681         (LabeledStatement.Resolve): Set it to true here.
10682
10683         * statement.cs (Return.Emit): Return success even after reporting
10684         a type mismatch error (CS0126 or CS0127), this is what csc does and
10685         it avoids confusing the users with any consecutive errors.
10686
10687 2002-08-05  Martin Baulig  <martin@gnome.org>
10688
10689         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
10690
10691         * const.cs (Const.LookupConstantValue): Catch circular definitions.
10692
10693         * expression.cs (MemberAccess.DoResolve): Silently return if an
10694         error has already been reported.
10695
10696         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
10697         error has already been reported.
10698
10699 2002-08-05  Martin Baulig  <martin@gnome.org>
10700
10701         * statement.cs (UsageVector): Only initialize the `parameters'
10702         vector if we actually have any "out" parameters.
10703
10704 2002-08-05  Martin Baulig  <martin@gnome.org>
10705
10706         * expression.cs (Binary.ResolveOperator): When combining delegates,
10707         they must have the same type.
10708
10709 2002-08-05  Martin Baulig  <martin@gnome.org>
10710
10711         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
10712         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
10713         work with the ms runtime and we also don't need it: if we're a
10714         PropertyBuilder and not in the `indexer_arguments' hash, then we
10715         are a property and not an indexer.
10716
10717         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
10718         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
10719         since the latter one doesn't work with the ms runtime.
10720
10721 2002-08-03  Martin Baulig  <martin@gnome.org>
10722
10723         Fixed bugs #27998 and #22735.
10724
10725         * class.cs (Method.IsOperator): New public field.
10726         (Method.CheckBase): Report CS0111 if there's already a method
10727         with the same parameters in the current class.  Report CS0508 when
10728         attempting to change the return type of an inherited method.
10729         (MethodData.Emit): Report CS0179 if a method doesn't have a body
10730         and it's not marked abstract or extern.
10731         (PropertyBase): New abstract base class for Property and Indexer.
10732         (PropertyBase.CheckBase): Moved here from Property and made it work
10733         for indexers.
10734         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
10735         the same so we can reuse it there.
10736         (Property, Indexer): Derive from PropertyBase.
10737         (MethodSignature.inheritable_property_signature_filter): New delegate
10738         to find properties and indexers.
10739
10740         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
10741         argument and improved error reporting.
10742
10743         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
10744         EmptyReadOnlyParameters and made it a property.
10745
10746         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
10747         version of this method which takes a `PropertyInfo indexer'.
10748         (TypeManager.RegisterIndexer): New method.
10749
10750         * class.cs: Added myself as author of this file :-)
10751
10752 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
10753
10754         * class.cs: fixed compilation on windoze.
10755
10756 2002-08-03  Martin Baulig  <martin@gnome.org>
10757
10758         * interface.cs (Interface.GetInterfaceBases): Check whether all
10759         base interfaces are at least as accessible than the current one.
10760
10761         * class.cs (TypeContainer.GetClassBases): Check whether base types
10762         are at least as accessible than the current type.
10763         (TypeContainer.AsAccessible): Implemented and made non-static.
10764         (MemberBase.CheckParameters): Report errors if the accessibility
10765         checks fail.
10766
10767         * delegate.cs (Delegate.Delegate): The default visibility is
10768         internal for top-level types and private for nested types.
10769         (Delegate.Define): Report errors if the accessibility checks fail.
10770
10771         * enum.cs (Enum.Enum): The default visibility is internal for
10772         top-level types and private for nested types.
10773         (Enum.DefineType): Compute the correct visibility.
10774
10775         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
10776         function which takes a `bool is_toplevel' instead of a TypeContainer.
10777
10778         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
10779         builtin type.
10780
10781 2002-08-02  Martin Baulig  <martin@gnome.org>
10782
10783         * expression.cs (LocalVariableReferenc): Added constructor which
10784         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
10785         (LocalVariableReference.IsReadOnly): New property.
10786         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
10787         variable is readonly, use our own readonly flag to do this; you can
10788         use the new constructor to get a writable reference to a read-only
10789         variable.
10790
10791         * cs-parser.jay (foreach_statement, using_statement): Get a writable
10792         reference to the local variable.
10793
10794 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
10795
10796         * rootcontext.cs (ResolveCore): Also include System.Exception
10797
10798         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
10799         we reach an EmptyStatement.
10800
10801         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
10802         is also fine.
10803
10804         * expression.cs (Binary.ResolveOperator): Check error result in
10805         two places.
10806
10807         use brtrue/brfalse directly and avoid compares to null.
10808
10809 2002-08-02  Martin Baulig  <martin@gnome.org>
10810
10811         * class.cs (TypeContainer.Define): Define all nested interfaces here.
10812         Fixes bug #28407, added test-155.cs.
10813
10814 2002-08-01  Martin Baulig  <martin@gnome.org>
10815
10816         * class.cs (Event.EmitDefaultMethod): Make this work with static
10817         events.  Fixes #28311, added verify-3.cs.
10818
10819 2002-08-01  Martin Baulig  <martin@gnome.org>
10820
10821         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
10822         `is_disposable' fields.
10823         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
10824         `hm.is_disposable' if we're using the collection pattern.
10825         (Foreach.EmitCollectionForeach): Use the correct type for the
10826         enumerator's local variable, only emit the try/finally block if
10827         necessary (fixes #27713).
10828
10829 2002-08-01  Martin Baulig  <martin@gnome.org>
10830
10831         * ecore.cs (Expression.report118): Renamed to Error118 and made
10832         it public static.
10833
10834         * statement.cs (Throw.Resolve): Check whether the expression is of
10835         the correct type (CS0118) and whether the type derives from
10836         System.Exception (CS0155).
10837         (Catch.Resolve): New method.  Do the type lookup here and check
10838         whether it derives from System.Exception (CS0155).
10839         (Catch.CatchType, Catch.IsGeneral): New public properties.
10840
10841         * typemanager.cs (TypeManager.exception_type): Added.
10842
10843 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
10844
10845         * driver.cs: Updated About function.
10846
10847 2002-07-31  Martin Baulig  <martin@gnome.org>
10848
10849         Implemented Control Flow Analysis.
10850
10851         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
10852         (EmitContext.CurrentBranching): Added.
10853         (EmitContext.StartFlowBranching): Added.
10854         (EmitContext.EndFlowBranching): Added.
10855         (EmitContext.KillFlowBranching): Added.
10856         (EmitContext.IsVariableAssigned): Added.
10857         (EmitContext.SetVariableAssigned): Added.
10858         (EmitContext.IsParameterAssigned): Added.
10859         (EmitContext.SetParameterAssigned): Added.
10860         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
10861         Added control flow analysis stuff here.
10862
10863         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
10864         resolve the expression as lvalue.
10865         (LocalVariableReference.DoResolve): Check whether the variable has
10866         already been assigned.
10867         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
10868         the parameter as assigned here.
10869         (ParameterReference.DoResolve): Check whether the parameter has already
10870         been assigned.
10871         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
10872         expression as lvalue.
10873
10874         * statement.cs (FlowBranching): New class for the flow analysis code.
10875         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
10876         (LabeledStatement.IsDefined): New public property.
10877         (LabeledStatement.AddUsageVector): New public method to tell flow
10878         analyis that the label may be reached via a forward jump.
10879         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
10880         flow analysis.
10881         (VariableInfo.Number): New public field.  This is used by flow analysis
10882         to number all locals of a block.
10883         (Block.CountVariables): New public property.  This is the number of
10884         local variables in this block (including the locals from all parent
10885         blocks).
10886         (Block.EmitMeta): Number all the variables.
10887
10888         * statement.cs: Added flow analysis support to all classes.
10889
10890 2002-07-31  Martin Baulig  <martin@gnome.org>
10891
10892         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
10893         To get debugging messages, compile mcs with /define:MCS_DEBUG and
10894         then use this argument.
10895
10896         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
10897
10898         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
10899         use this to specify /define options.
10900
10901 2002-07-29  Martin Baulig  <martin@gnome.org>
10902
10903         * statement.cs (Fixed): Moved all code that does variable lookups
10904         and resolvings from Emit to Resolve.
10905
10906         * statement.cs (For): Moved all code that does variable lookups
10907         and resolvings from Emit to Resolve.
10908
10909         * statement.cs (Using): Moved all code that does variable lookups
10910         and resolvings from Emit to Resolve.
10911
10912 2002-07-29  Martin Baulig  <martin@gnome.org>
10913
10914         * attribute.cs (Attribute.Resolve): Explicitly catch a
10915         System.NullReferenceException when creating the
10916         CustromAttributeBuilder and report a different warning message.
10917
10918 2002-07-29  Martin Baulig  <martin@gnome.org>
10919
10920         * support.cs (ParameterData.ParameterName): Added method to
10921         get the name of a parameter.
10922
10923         * typemanager.cs (TypeManager.IsValueType): New public method.
10924
10925 2002-07-29  Martin Baulig  <martin@gnome.org>
10926
10927         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
10928         is a flag which specifies that it's either ref or out.
10929         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
10930         the out parameter to `out Parameter.Modifier mod', also set the
10931         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
10932
10933         * support.cs (InternalParameters.ParameterModifier): Distinguish
10934         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
10935         Parameter.Modifier.ISBYREF flag if it's either ref or out.
10936
10937         * expression.cs (Argument.GetParameterModifier): Distinguish
10938         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
10939         Parameter.Modifier.ISBYREF flag if it's either ref or out.
10940
10941 2002-07-29  Martin Baulig  <martin@gnome.org>
10942
10943         * expression.cs (ParameterReference.ParameterReference): Added
10944         `Location loc' argument to the constructor.
10945
10946         * cs-parser.jay: Pass location to ParameterReference.
10947
10948 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
10949
10950         * statement.cs (Try): Initialize the location.
10951
10952         * cs-parser.jay: pass location to Try.
10953
10954         * expression.cs (Unary.Reduce): Change the prototype to return
10955         whether a constant fold could be performed or not.  The result is
10956         returned in an out parameters.  In the case of Indirection and
10957         AddressOf, we want to perform the full tests.
10958
10959 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
10960
10961         * statement.cs (Statement.Emit): Flag dead code.
10962
10963 2002-07-27  Andrew Birkett  <andy@nobugs.org>
10964
10965         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
10966
10967 2002-07-27  Martin Baulig  <martin@gnome.org>
10968
10969         * class.cs (MethodData.Define): Put back call to
10970         TypeManager.AddMethod(), accidentally commented this out.
10971
10972         * report.cs (Debug): New public method to print debugging information,
10973         this is `[Conditional ("DEBUG")]'.
10974
10975 2002-07-26  Martin Baulig  <martin@gnome.org>
10976
10977         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
10978         (switch_statement): Push the current_block to the switch_stack and
10979         pop it again when we're done with the switch.
10980         (switch_section): The new block is a child of the current_block.
10981         Fixes bug #24007, added test-152.cs.
10982
10983 2002-07-27  Martin Baulig  <martin@gnome.org>
10984
10985         * expression.cs (Invocation.EmitArguments): When calling a varargs
10986         function with only its fixed arguments, we need to pass an empty
10987         array.
10988
10989 2002-07-27  Martin Baulig  <martin@gnome.org>
10990
10991         Mono 0.13 has been released.
10992
10993 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
10994
10995         * driver.cs: Rename --resource to --linkres, because that is what
10996         we do currently, we dont support --resource yet.
10997
10998         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
10999
11000 2002-07-25  Martin Baulig  <martin@gnome.org>
11001
11002         * class.cs (MethodData): New public class.  This is a `method builder'
11003         class for a method or one accessor of a Property/Indexer/Event.
11004         (MethodData.GetMethodFlags): Moved here from MemberBase.
11005         (MethodData.ApplyAttributes): Likewise.
11006         (MethodData.ApplyObsoleteAttribute): Likewise.
11007         (MethodData.ApplyConditionalAttribute): Likewise.
11008         (MethodData.ApplyDllImportAttribute): Likewise.
11009         (MethodData.CheckAbstractAndExternal): Likewise.
11010         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
11011         (MethodData.Emit): Formerly known as Method.Emit().
11012         (MemberBase): Moved everything which was specific to a single
11013         accessor/method to MethodData.
11014         (Method): Create a new MethodData and call Define() and Emit() on it.
11015         (Property, Indexer, Event): Create a new MethodData objects for each
11016         accessor and call Define() and Emit() on them.
11017
11018 2002-07-25  Martin Baulig  <martin@gnome.org>
11019
11020         Made MethodCore derive from MemberBase to reuse the code from there.
11021         MemberBase now also checks for attributes.
11022
11023         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
11024         (MemberBase.GetMethodFlags): Moved here from class Method and marked
11025         as virtual.
11026         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
11027         `CallingConventions cc' and `Attributes opt_attrs' arguments.
11028         (MemberBase.ApplyAttributes): New virtual method; applies the
11029         attributes to a method or accessor.
11030         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
11031         (MemberBase.ApplyConditionalAttribute): Likewise.
11032         (MemberBase.ApplyDllImportAttribute): Likewise.
11033         (MemberBase.CheckAbstractAndExternal): Likewise.
11034         (MethodCore.ParameterTypes): This is now a property instead of a
11035         method, it's initialized from DoDefineParameters().
11036         (MethodCore.ParameterInfo): Removed the set accessor.
11037         (MethodCore.DoDefineParameters): New protected virtual method to
11038         initialize ParameterTypes and ParameterInfo.
11039         (Method.GetReturnType): We can now simply return the MemberType.
11040         (Method.GetMethodFlags): Override the MemberBase version and add
11041         the conditional flags.
11042         (Method.CheckBase): Moved some code from Define() here, call
11043         DoDefineParameters() here.
11044         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
11045         here to avoid some larger code duplication.
11046         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
11047         ensure that abstract and external accessors don't declare a body.
11048
11049         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
11050         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
11051         lookup in the attribute's parent classes, so we need to abort as soon
11052         as we found the first match.
11053         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
11054         the attribute has no arguments.
11055
11056         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
11057         of a Method.
11058
11059 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11060
11061         * cs-parser.jay: reverted previous patch.
11062
11063 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11064
11065         * cs-parser.jay: fixed bug #22119.
11066
11067 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11068
11069         * attribute.cs: fixed compilation. The error was:
11070         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
11071         be assigned to before control leaves the current method."
11072         [FIXME:  Filed as bug #28186: MCS must report this error.]
11073
11074 2002-07-25  Martin Baulig  <martin@gnome.org>
11075
11076         * attribute.cs (Attribute.Conditional_GetConditionName): New static
11077         method to pull the condition name ouf of a Conditional attribute.
11078         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
11079         the obsolete message and error flag out of an Obsolete attribute.
11080
11081         * class.cs (Method.GetMethodFlags): New public method to get the
11082         TypeManager.MethodFlags for this method.
11083         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
11084         private methods.
11085         (Method.Define): Get and apply the Obsolete and Conditional attributes;
11086         if we're overriding a virtual function, set the new private variable
11087         `parent_method'; call the new TypeManager.AddMethod().
11088
11089         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
11090         the MethodBuilder and the Method in a PtrHashtable.
11091         (TypeManager.builder_to_method): Added for this purpose.
11092         (TypeManager.MethodFlags): Added IsObsoleteError.
11093         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
11094         Obsolete and Conditional arguments in MethodBuilders.  If we discover
11095         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
11096         the message from the attribute.
11097
11098 2002-07-24  Martin Baulig  <martin@gnome.org>
11099
11100         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
11101         preprocessor directives, ensure that the argument to #define/#undef is
11102         exactly one identifier and that it's actually an identifier.
11103
11104         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
11105         did not work ....
11106
11107 2002-07-24  Martin Baulig  <martin@gnome.org>
11108
11109         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
11110         initialize it to TypeManager.object_type in the constructor.
11111         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
11112         of the `hm.get_current' method if we're using the collection pattern.
11113         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
11114         for the explicit conversion to make it work when we're using the collection
11115         pattern and the `Current' property has a different return type than `object'.
11116         Fixes #27713.
11117
11118 2002-07-24  Martin Baulig  <martin@gnome.org>
11119
11120         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
11121         does not match, but don't report any errors.  This method is called in
11122         order for all methods in a MethodGroupExpr until a matching method is
11123         found, so we don't want to bail out if the first method doesn't match.
11124         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
11125         matches, report the 123.  Fixes #28070.
11126
11127 2002-07-24  Martin Baulig  <martin@gnome.org>
11128
11129         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
11130         TypeManager.TypeToCoreType() to the top of the method so the
11131         following equality checks will work.  Fixes #28107.
11132
11133 2002-07-24  Martin Baulig  <martin@gnome.org>
11134
11135         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
11136         operand is of type uint, and the other operand is of type sbyte,
11137         short or int, the operands are converted to type long." -
11138         Actually do what this comment already told us.  Fixes bug #28106,
11139         added test-150.cs.
11140
11141 2002-07-24  Martin Baulig  <martin@gnome.org>
11142
11143         * class.cs (MethodBase): New abstract class.  This is now a base
11144         class for Property, Indexer and Event to avoid some code duplication
11145         in their Define() and DefineMethods() methods.
11146         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
11147         generic methods for Define() and DefineMethods().
11148         (FieldBase): Derive from MemberBase, not MemberCore.
11149         (Property): Derive from MemberBase, not MemberCore.
11150         (Property.DefineMethod): Moved all the code from this method to the
11151         new MethodBase.DefineAccessor(), just call it with appropriate
11152         argumetnts.
11153         (Property.Define): Call the new Property.DoDefine(), this does some
11154         sanity checks and we don't need to duplicate the code everywhere.
11155         (Event): Derive from MemberBase, not MemberCore.
11156         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
11157         accessors, this will also make them work with interface events.
11158         (Indexer): Derive from MemberBase, not MemberCore.
11159         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
11160         (Indexer.Define): Use the new MethodBase functions.
11161
11162         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
11163         argument to the constructor.
11164         (Interface.FindMembers): Added support for interface events.
11165         (Interface.PopluateEvent): Implemented.
11166
11167         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
11168
11169 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
11170
11171         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
11172         but this is required to check for a method name being the same as
11173         the containing class.  
11174
11175         Handle this now.
11176
11177 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11178
11179         * interface.cs: initialize variable.
11180
11181 2002-07-23  Martin Baulig  <martin@gnome.org>
11182
11183         Implemented the IndexerName attribute in interfaces.
11184
11185         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
11186         name if this is an explicit interface implementation.
11187         (Indexer.InterfaceIndexerName): New public variable.  If we're
11188         implementing an interface indexer, this is the IndexerName in that
11189         interface.  Otherwise, it's the IndexerName.
11190         (Indexer.DefineMethod): If we're implementing interface indexer,
11191         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
11192         and Pending.ImplementIndexer methods.
11193         (Indexer.Define): Also define the PropertyBuilder if we're
11194         implementing an interface indexer and this is neither an explicit
11195         interface implementation nor do the IndexerName match the one in
11196         the interface.
11197
11198         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
11199         If a method is defined here, then we always need to create a proxy
11200         for it.  This is used when implementing interface indexers.
11201         (Pending.IsInterfaceIndexer): New public method.
11202         (Pending.ImplementIndexer): New public method.
11203         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
11204         This is used when implementing interface indexers to define a proxy
11205         if necessary.
11206         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
11207         define a proxy if necessary.
11208
11209         * interface.cs (Interface.IndexerName): New public variable.
11210         (Interface.PopulateIndexer): Set the IndexerName.
11211         (Interface.DefineIndexers): New private method.  Populate all the
11212         indexers and make sure their IndexerNames match.
11213
11214         * typemanager.cs (IndexerPropertyName): Added support for interface
11215         indexers.
11216
11217 2002-07-22  Martin Baulig  <martin@gnome.org>
11218
11219         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
11220         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
11221         ret if HasReturnLabel.
11222         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
11223         variables.
11224
11225         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
11226         and set the ec.LoopBeginTryCatchLevel.
11227         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
11228         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
11229         the current ec.TryCatchLevel, the branch goes out of an exception
11230         block.  In this case, we need to use Leave and not Br.
11231
11232 2002-07-22  Martin Baulig  <martin@gnome.org>
11233
11234         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
11235         block unless the block does not always return or it is contained in
11236         another try { ... } catch { ... } block.  Fixes bug #26506.
11237         Added verify-1.cs to the test suite.
11238
11239 2002-07-22  Martin Baulig  <martin@gnome.org>
11240
11241         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
11242         then we do not always return.  Fixes bug #24985.
11243
11244 2002-07-22  Martin Baulig  <martin@gnome.org>
11245
11246         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
11247         lookup on a per-class level; ie. walk up the class hierarchy until we
11248         found at least one applicable method, then choose the best among them.
11249         Fixes bug #24463 and test-29.cs.
11250
11251 2002-07-22  Martin Baulig  <martin@gnome.org>
11252
11253         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
11254         return types of the methods.  The return type is not part of the
11255         signature and we must not check it to make the `new' modifier work.
11256         Fixes bug #27999, also added test-147.cs.
11257         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
11258
11259         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
11260         on the method's return type.
11261
11262 2002-07-21  Martin Baulig  <martin@gnome.org>
11263
11264         * assign.cs: Make this work if the rightmost source is a constant and
11265         we need to do an implicit type conversion.  Also adding a few more tests
11266         to test-38.cs which should have caught this.
11267
11268         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
11269         target in the makefile for this.  The makefile.gnu is primarily intended
11270         for end-users who don't want to debug the compiler.
11271
11272 2002-07-21  Martin Baulig  <martin@gnome.org>
11273
11274         * assign.cs: Improved the Assign class so it can now handle embedded
11275         assignments (X = Y = Z = something).  As a side-effect this'll now also
11276         consume less local variables.  test-38.cs now passes with MCS, added
11277         a few new test cases to that test.
11278
11279 2002-07-20  Martin Baulig  <martin@gnome.org>
11280
11281         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
11282         instructions.  Fixes bug #27977, also added test-146.cs.
11283
11284 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11285
11286         * cs-tokenizer.cs: fixed getHex ().
11287
11288 2002-07-19  Martin Baulig  <martin@gnome.org>
11289
11290         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
11291         not Type.GetType() to lookup the array type.  This is needed when
11292         we're constructing an array of a user-defined type.
11293         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
11294         single-dimensional arrays, but also for single-dimensial arrays of
11295         type decimal.
11296
11297 2002-07-19  Martin Baulig  <martin@gnome.org>
11298
11299         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
11300         this function is called, it's not allowed to share LocalBuilders
11301         among ILGenerators.
11302
11303 2002-07-19  Martin Baulig  <martin@gnome.org>
11304
11305         * expression.cs (Argument.Resolve): Report an error 118 when trying
11306         to pass a type as argument.
11307
11308 2002-07-18  Martin Baulig  <martin@gnome.org>
11309
11310         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
11311         Conv_R_Un for the signed `long' type.
11312
11313 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
11314
11315         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
11316         `expr' for the temporary result, as that will fail if we do
11317         multiple resolves on the same expression.
11318
11319 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
11320
11321         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
11322         ec.TypeContainer for looking up aliases. 
11323
11324         * class.cs (TypeContainer): Remove LookupAlias from here.
11325
11326         * decl.cs (DeclSpace); Move here.
11327
11328 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
11329
11330         * class.cs (FindMembers): Only call filter if the constructor
11331         bulider is not null.
11332
11333         Also handle delegates in `NestedTypes' now.  Now we will perform
11334         type lookups using the standard resolution process.  This also
11335         fixes a bug.
11336
11337         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
11338         This uses Expressions (the limited kind that can be parsed by the
11339         tree) instead of strings.
11340
11341         * expression.cs (ComposedCast.ToString): Implement, used to flag
11342         errors since now we have to render expressions.
11343
11344         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
11345         FormArrayType. 
11346
11347         * ecore.cs (SimpleName.ToString): ditto.
11348
11349         * cs-parser.jay: Instead of using strings to assemble types, use
11350         Expressions to assemble the type (using SimpleName, ComposedCast,
11351         MemberAccess).  This should fix the type lookups in declarations,
11352         because we were using a different code path for this.
11353
11354         * statement.cs (Block.Resolve): Continue processing statements
11355         even when there is an error.
11356
11357 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
11358
11359         * class.cs (Event.Define): Also remove the `remove' method from
11360         the list of pending items.
11361
11362         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
11363         generate more compact code. 
11364
11365 2002-07-17  Martin Baulig  <martin@gnome.org>
11366
11367         * const.cs (Const.LookupConstantValue): Add support for constant
11368         `unchecked' and `checked' expressions.
11369         Also adding test case test-140.cs for this.
11370
11371 2002-07-17  Martin Baulig  <martin@gnome.org>
11372
11373         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
11374         check whether mi.ReturnType implements the IEnumerator interface; the
11375         `==' and the IsAssignableFrom() will fail in this situation.
11376
11377 2002-07-16  Ravi Pratap  <ravi@ximian.com>
11378
11379         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
11380         here too.
11381
11382 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11383
11384         * expression.cs: fixed bug #27811.
11385
11386 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
11387
11388         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
11389         Molaro: when we are a ref, the value already contains a pointer
11390         value, do not take the address of it.
11391
11392 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
11393         * removed mb-parser.jay and mb-tokenizer.cs
11394
11395 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
11396
11397         * expression.cs: check against the building corlib void type.
11398
11399 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
11400
11401         * ecore.cs: fix for valuetype static readonly fields: when 
11402         initializing them, we need their address, not the address of a copy.
11403
11404 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
11405
11406         * typemanager.cs: register also enum_type in corlib.
11407
11408 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
11409
11410         * class.cs: allow calling this (but not base) initializers in structs.
11411
11412 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
11413
11414         * ecore.cs: make sure we compare against the building base types
11415         in GetTypeSize ().
11416
11417 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
11418
11419         * typemanager.cs: fix TypeToCoreType() to handle void and object
11420         (corlib gets no more typerefs after this change).
11421
11422 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
11423
11424         * expression.cs (ArrayCreation.EmitArrayArguments): use
11425         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
11426
11427         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
11428         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
11429         array indexes, the runtime actually forbids them.
11430
11431         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
11432         for array arguments here.
11433
11434         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
11435         instead of the default for ValueTypes.
11436
11437         (New.DoEmit): Use IsValueType instead of
11438         IsSubclassOf (value_type)
11439         (New.DoResolve): ditto.
11440         (Invocation.EmitCall): ditto.
11441
11442         * assign.cs (Assign): ditto.
11443
11444         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
11445         Statements *are* currently doing part of their resolution during
11446         Emit.  
11447
11448         Expressions do always resolve during resolve, but statements are
11449         only required to propagate resolution to their children.
11450
11451 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
11452
11453         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
11454
11455         (LoadAssembly): Do not add the dll if it is already specified
11456
11457         (MainDriver): Add the System directory to the link path at the end,
11458         after all the other -L arguments. 
11459
11460         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
11461         wrong opcode for loading bytes and bools (ldelem.i1 instead of
11462         ldelem.u1) and using the opposite for sbytes.
11463
11464         This fixes Digger, and we can finally run it.
11465
11466         * driver.cs (UnixParseOption): Move the option parsing here.  
11467         (CSCParseOption): Implement CSC-like parsing of options.
11468
11469         We now support both modes of operation, the old Unix way, and the
11470         new CSC-like way.  This should help those who wanted to make cross
11471         platform makefiles.
11472
11473         The only thing broken is that /r:, /reference: and /lib: are not
11474         implemented, because I want to make those have the same semantics
11475         as the CSC compiler has, and kill once and for all the confussion
11476         around this.   Will be doing this tomorrow.
11477
11478         * statement.cs (Unsafe.Resolve): The state is checked during
11479         resolve, not emit, so we have to set the flags for IsUnsfe here.
11480
11481 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
11482
11483         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
11484         not catch the Error_ObjectRefRequired in SimpleName (as it is
11485         possible to have a class/instance variable name that later gets
11486         deambiguated), we have to check this here.      
11487
11488 2002-07-10  Ravi Pratap  <ravi@ximian.com>
11489
11490         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
11491         make static and put into Expression.
11492
11493         (Event.Define): Register the private field of the event with the 
11494         TypeManager so that GetFieldFromEvent can get at it.
11495
11496         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
11497         keep track of the private field associated with an event which
11498         has no accessors.
11499
11500         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
11501         private field.
11502
11503         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
11504
11505 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
11506
11507         * expression.cs (Binary.EmitBranchable): this routine emits the
11508         Binary expression in a branchable context.  This basically means:
11509         we need to branch somewhere, not just get the value on the stack.
11510
11511         This works together with Statement.EmitBoolExpression.
11512
11513         * statement.cs (Statement.EmitBoolExpression): Use
11514         EmitBranchable. 
11515
11516 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
11517
11518         * statement.cs (For): Reduce the number of jumps in loops.
11519
11520         (For): Implement loop inversion for the For statement.
11521
11522         (Break): We can be breaking out of a Try/Catch controlled section
11523         (foreach might have an implicit try/catch clause), so we need to
11524         use Leave instead of Br.
11525
11526         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
11527         now).  If the instace expression supports IMemoryLocation, we use
11528         the AddressOf method from the IMemoryLocation to extract the
11529         address instead of emitting the instance.
11530
11531         This showed up with `This', as we were emitting the instance
11532         always (Emit) instead of the Address of This.  Particularly
11533         interesting when This is a value type, as we dont want the Emit
11534         effect (which was to load the object).
11535
11536 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
11537
11538         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
11539
11540         * statement.cs (Checked): Set the CheckedState during the resolve
11541         process too, as the ConvCast operations track the checked state on
11542         the resolve process, and not emit.
11543
11544         * cs-parser.jay (namespace_member_declaration): Flag that we have
11545         found a declaration when we do.  This is used to flag error 1529
11546
11547         * driver.cs: Report ok when we display the help only.
11548
11549 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
11550
11551         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
11552
11553 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
11554
11555         * cs-tokenizer.cs (define): We also have to track locally the
11556         defines.  AllDefines is just used for the Conditional Attribute,
11557         but we also need the local defines for the current source code. 
11558
11559 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
11560
11561         * statement.cs (While, For, Do): These loops can exit through a
11562         Break statement, use this information to tell whether the
11563         statement is the last piece of code.
11564
11565         (Break): Flag that we break.
11566
11567         * codegen.cs (EmitContexts): New `Breaks' state variable.
11568
11569 2002-07-03  Martin Baulig  <martin@gnome.org>
11570
11571         * class.cs (TypeContainer.MethodModifiersValid): Allow override
11572         modifiers in method declarations in structs.  Otherwise, you won't
11573         be able to override things like Object.Equals().
11574
11575 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
11576
11577         * class.cs (Method, Property, Indexer): Do not allow the public
11578         modifier to be used in explicit interface implementations.
11579
11580         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
11581         override modifiers in method declarations in structs
11582
11583 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
11584
11585         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
11586         integer or real overflow, report an error
11587
11588 2002-07-02  Martin Baulig  <martin@gnome.org>
11589
11590         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
11591         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
11592         to tell the runtime about our newly created System.Object and
11593         System.ValueType types.
11594
11595 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
11596
11597         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
11598         struct instead of Ldarg/Starg.
11599
11600 2002-07-02  Martin Baulig  <martin@gnome.org>
11601
11602         * expression.cs (Indirection.Indirection): Call
11603         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
11604
11605 2002-07-02  Martin Baulig  <martin@gnome.org>
11606
11607         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
11608         ValueType, call TypeManager.TypeToCoreType() on it.
11609         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
11610         the OpCodes.Newarr argument.
11611
11612 2002-07-02  Martin Baulig  <martin@gnome.org>
11613
11614         * expression.cs (Invocation.EmitCall): When compiling corlib,
11615         replace all calls to the system's System.Array type to calls to
11616         the newly created one.
11617
11618         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
11619         System.Array methods.
11620         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
11621         from the system's System.Array type which must be replaced.
11622
11623 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
11624
11625         * typemanager.cs: load unverifiable_code_ctor so we can build
11626         corlib using the correct type. Avoid using GetTypeCode() with
11627         TypeBuilders.
11628         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
11629         TypeManager.object_type to allow building corlib.
11630
11631 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
11632
11633         * ecore.cs: handle System.Enum separately in LoadFromPtr().
11634
11635 2002-07-01  Martin Baulig  <martin@gnome.org>
11636
11637         * class.cs: Make the last change actually work, we need to check
11638         whether `ifaces != null' to avoid a crash.
11639
11640 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
11641
11642         * class.cs: when we build structs without fields that implement
11643         interfaces, we need to add the interfaces separately, since there is
11644         no API to both set the size and add the interfaces at type creation
11645         time.
11646
11647 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
11648
11649         * expression.cs: the dimension arguments to the array constructors
11650         need to be converted if they are a long.
11651
11652 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
11653
11654         * class.cs: don't emit ldarg.0 if there is no parent constructor
11655         (fixes showstopper for corlib).
11656
11657 2002-06-29  Martin Baulig  <martin@gnome.org>
11658
11659         MCS now compiles corlib on GNU/Linux :-)
11660
11661         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
11662         ie. check for MethodImplOptions.InternalCall.
11663
11664         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
11665         and TypeManager.attribute_type are null, so we must explicitly check
11666         whether parent is not null to find out whether it's an attribute type.
11667         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
11668         and SetBuilder, not only if the property is neither abstract nor external.
11669         This is necessary to set the MethodImplOptions on the accessor methods.
11670         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
11671         SetBuilder, see Property.Emit().
11672
11673         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
11674         populate "System.Object", "System.ValueType" and "System.Attribute" since
11675         they've already been populated from BootCorlib_PopulateCoreTypes().
11676
11677 2002-06-29  Martin Baulig  <martin@gnome.org>
11678
11679         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
11680         is the NullLiteral, we also need to make sure that target_type is not
11681         an enum type.   
11682
11683 2002-06-29  Martin Baulig  <martin@gnome.org>
11684
11685         * rootcontext.cs (RootContext.ResolveCore): We must initialize
11686         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
11687         before calling BootstrapCorlib_ResolveDelegate ().
11688
11689 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
11690
11691         * statement.cs: fixed build-breaker. All tests passed ok.
11692
11693 2002-06-27  Martin Baulig  <martin@gnome.org>
11694
11695         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
11696         for System.Decimal when compiling corlib.
11697
11698 2002-06-27  Martin Baulig  <martin@gnome.org>
11699
11700         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
11701         switch blocks which contain nothing but a default clause.
11702
11703 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
11704
11705        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
11706
11707 2002-06-27  Martin Baulig  <martin@gnome.org>
11708
11709         * ecore.cs (PropertyExpr.PropertyExpr): Call
11710         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
11711
11712         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
11713         is already a TypeBuilder.
11714
11715 2002-06-27  Martin Baulig  <martin@gnome.org>
11716
11717         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
11718         `target_type == TypeManager.array_type', not IsAssignableFrom() in
11719         the "from an array-type to System.Array" case.  This makes it work
11720         when compiling corlib.
11721
11722 2002-06-27  Martin Baulig  <martin@gnome.org>
11723
11724         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
11725         non-static PropertyExpr, set its InstanceExpression.  This makes
11726         the `ICollection.Count' property work in System/Array.cs.
11727
11728 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
11729
11730         * driver.cs: Made error handling more consistent.  Errors now
11731         tracked by Report class, so many methods which used to return int
11732         now return void.  Main() now prints success/failure and 
11733         errors/warnings message.
11734
11735         Renamed '--probe' compiler argument to '--expect-error'.  Removed
11736         the magic number return values (123 and 124).  Now, if the
11737         expected error occurs, the compiler exits with success (exit value
11738         0).  If the compilation completes without seeing that particular
11739         error, the compiler exits with failure (exit value 1).  The
11740         makefile in mcs/errors has been changed to handle the new behaviour.
11741
11742         * report.cs: Made 'expected error' number a property and renamed
11743         it from 'Probe' to 'ExpectedError'.
11744
11745         * genericparser.cs: Removed error handling support, since it is
11746         now all done by Report class.
11747
11748         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
11749         class, so parse() no longer returns an int.
11750
11751         * namespace.cs: Use Report.Error instead of GenericParser.error
11752
11753 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
11754
11755         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
11756         TypeContainer.AddOperator): At the front of the list put the
11757         explicit implementations, so they get resolved/defined first. 
11758
11759 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
11760
11761         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
11762         interface type is implemented by this TypeContainer.  Used during
11763         explicit interface implementation.
11764
11765         (Property.Define, Indexer.Define, Method.Define): Validate that
11766         the given interface in the explicit implementation is one of the
11767         base classes for the containing type.
11768
11769         Also if we are explicitly implementing an interface, but there is
11770         no match in the pending implementation table, report an error.
11771
11772         (Property.Define): Only define the property if we are
11773         not explicitly implementing a property from an interface.  Use the
11774         correct name also for those properties (the same CSC uses,
11775         although that is really not needed).
11776
11777         (Property.Emit): Do not emit attributes for explicitly implemented
11778         properties, as there is no TypeBuilder.
11779
11780         (Indexer.Emit): ditto.
11781
11782         Hiding then means that we do not really *implement* a pending
11783         implementation, which makes code fail.
11784
11785 2002-06-22  Martin Baulig  <martin@gnome.org>
11786
11787         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
11788         the return value of Object.GetType().  [FIXME: we need to do this whenever
11789         we get a type back from the reflection library].
11790
11791 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
11792
11793         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
11794
11795 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
11796
11797         * attribute.cs: Return null if we can not look up the type.
11798
11799         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
11800         the interface types found.
11801
11802         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
11803         interface types found.
11804
11805         * typemanager.cs (GetInterfaces): Make this routine returns alll
11806         the interfaces and work around the lame differences between
11807         System.Type and System.Reflection.Emit.TypeBuilder in the results
11808         result for GetInterfaces.
11809
11810         (ExpandInterfaces): Given an array of interface types, expand and
11811         eliminate repeated ocurrences of an interface.  This expands in
11812         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
11813         be IA, IB, IC.
11814
11815 2002-06-21  Martin Baulig  <martin@gnome.org>
11816
11817         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
11818         on System.Enum.
11819
11820 2002-06-21  Martin Baulig  <martin@gnome.org>
11821
11822         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
11823         and called with one of the core types, return the corresponding typebuilder for
11824         that type.
11825
11826         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
11827         element type.
11828
11829 2002-06-21  Martin Baulig  <martin@gnome.org>
11830
11831         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
11832         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
11833         (Expression.ConvertReferenceExplicit): Likewise.
11834
11835         * expression.cs (ElementAccess.DoResolve): Likewise.
11836         (ElementAccess.DoResolveLValue): Likewise.
11837
11838 2002-06-10  Martin Baulig  <martin@gnome.org>
11839
11840         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
11841         add the "value" parameter to the parameter list.
11842
11843         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
11844         to our caller.
11845
11846 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
11847
11848         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
11849         the argument to an int, uint, long or ulong, per the spec.  Also
11850         catch negative constants in array creation.
11851
11852 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
11853
11854         * class.cs: do not allow the same interface to appear twice in
11855         the definition list.
11856
11857 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
11858
11859         * ecore.cs: don't use ldlen with System.Array.
11860
11861 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
11862
11863         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
11864
11865 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
11866
11867         * modifiers.cs: produce correct field attributes for protected
11868         internal. Easy fix so miguel can work on ther harder stuff:-)
11869
11870 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
11871
11872         * pending.cs: New file.  Move the code from class.cs here.
11873         Support clearning the pending flag for all methods (when not doing
11874         explicit interface implementation).
11875
11876 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
11877
11878         * rootcontext.cs: added a couple more types needed to bootstrap.
11879
11880 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
11881
11882         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
11883         constructor in the type, instead of any constructor in the type
11884         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
11885         a bug in the Mono runtime when applying the params attribute). 
11886
11887 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
11888         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
11889
11890 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
11891
11892         * expression.cs (Unary.ResolveOperator): Use TypeManager
11893         to resolve the type.
11894
11895 2002-06-13  Ravi Pratap  <ravi@ximian.com>
11896
11897         * cs-parser.jay (enum_member_declaration): Pass in the attributes
11898         attached.
11899
11900         * enum.cs (AddEnumMember): Add support to store the attributes associated 
11901         with each member too.
11902
11903         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
11904         field builders too - this takes care of the enum member case.
11905
11906 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
11907
11908         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
11909         address-of operator on both value types and pointers.
11910
11911 2002-06-10  Martin Baulig  <martin@gnome.org>
11912
11913         * interface.cs (Interface.PopulateIndexer): Add the indexer's
11914         PropertyBuilder to the `property_builders' list.
11915
11916         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
11917         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
11918         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
11919         find any indexers which are inherited from an interface.
11920
11921 2002-06-09  Martin Baulig  <martin@gnome.org>
11922
11923         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
11924         the same type as the constant if necessary.  There's also a test-130.cs
11925         for this.
11926
11927         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
11928
11929         * typemanager.cs (TypeManager.ChangeType): Previously known as
11930         Enum.ChangeEnumType().
11931
11932 2002-06-09  Martin Baulig  <martin@gnome.org>
11933
11934         * expression.cs (Cast.TryReduce): Added support for consts.
11935
11936 2002-06-08  Ravi Pratap  <ravi@ximian.com>
11937
11938         * class.cs (Accessor): Hold attributes information so we can pass
11939         it along.
11940
11941         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
11942         Modify to pass in attributes attached to the methods.
11943
11944         (add_accessor_declaration, remove_accessor_declaration): Ditto.
11945
11946         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
11947         to handle the Accessor kind :-)
11948
11949         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
11950
11951 2002-06-08  Martin Baulig  <martin@gnome.org>
11952
11953         * expression.cs (Unary.TryReduceNegative): Added support for
11954         ULongConstants.
11955
11956 2002-06-08  Martin Baulig  <martin@gnome.org>
11957
11958         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
11959         name can't be found in the `defined_names' - the caller will do a
11960         MemberLookup in this case and thus find methods in System.Enum
11961         such as Enum.IsDefined().
11962
11963 2002-06-08  Martin Baulig  <martin@gnome.org>
11964
11965         * enum.cs (Enum.ChangeEnumType): This is a custom version of
11966         Convert.ChangeType() which works with TypeBuilder created types.
11967         (Enum.LookupEnumValue, Enum.Define): Use it here.
11968
11969         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
11970         `TypeBuilder.BaseType != null' check.
11971         (TypeContainer.FindMembers): Only lookup parent members if we
11972         actually have a parent.
11973         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
11974         (ConstructorInitializer.Resolve): Likewise.
11975
11976         * interface.cs (Interface.FindMembers): Added
11977         `TypeBuilder.BaseType != null' check.
11978
11979         * rootcontext.cs (RootContext.ResolveCore): Added
11980         "System.Runtime.CompilerServices.IndexerNameAttribute" to
11981         classes_second_stage.
11982
11983         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
11984         debug_type and trace_type when compiling with --nostdlib.       
11985
11986 2002-06-07  Martin Baulig  <martin@gnome.org>
11987
11988         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
11989         (AddField): Set it to true when adding a non-static field.
11990         (DefineType): Use `have_nonstatic_fields' to find out whether we
11991         have non-static fields, not `Fields != null'.
11992
11993 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
11994
11995         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
11996         dereferencing a null on the static-field code path)
11997
11998 2002-05-30  Martin Baulig  <martin@gnome.org>
11999
12000         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
12001         to take command line arguments.  Use reflection to call the new
12002         custom `Initialize' function on the symbol writer and pass it the
12003         command line arguments.
12004
12005         * driver.cs (--debug-args): New command line argument to pass command
12006         line arguments to the symbol writer.
12007
12008 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
12009
12010         * assign.cs (DoResolve): Forgot to do the implicit conversion to
12011         the target type for indexers and properties.  Thanks to Joe for
12012         catching this.
12013
12014 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
12015
12016         * typemanager.cs (MethodFlags): returns the method flags
12017         (Obsolete/ShouldIgnore) that control warning emission and whether
12018         the invocation should be made, or ignored. 
12019
12020         * expression.cs (Invocation.Emit): Remove previous hack, we should
12021         not do this on matching a base type, we should do this based on an attribute
12022
12023         Only emit calls to System.Diagnostics.Debug and
12024         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
12025         on the command line.
12026
12027         * rootcontext.cs: Global settings for tracing and debugging.
12028
12029         * cs-tokenizer.cs (define): New utility function to track
12030         defines.   Set the global settings for TRACE and DEBUG if found.
12031
12032 2002-05-25  Ravi Pratap  <ravi@ximian.com>
12033
12034         * interface.cs (Populate*): Pass in the TypeContainer as well as
12035         the DeclSpace as parameters so that we can create EmitContexts and
12036         then use that to apply attributes etc.
12037
12038         (PopulateMethod, PopulateEvent, PopulateProperty)
12039         (PopulateIndexer): Apply attributes everywhere.
12040
12041         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
12042         etc.
12043
12044         (ApplyAttributes): Update accordingly.
12045
12046         We now apply interface attributes for all members too.
12047
12048 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
12049
12050         * class.cs (Indexer.Define); Correctly check if we are explicit
12051         implementation (instead of checking the Name for a ".", we
12052         directly look up if the InterfaceType was specified).
12053
12054         Delay the creation of the PropertyBuilder.
12055
12056         Only create the PropertyBuilder if we are not an explicit
12057         interface implementation.   This means that explicit interface
12058         implementation members do not participate in regular function
12059         lookups, and hence fixes another major ambiguity problem in
12060         overload resolution (that was the visible effect).
12061
12062         (DefineMethod): Return whether we are doing an interface
12063         implementation. 
12064
12065         * typemanager.cs: Temporary hack until we get attributes in
12066         interfaces (Ravi is working on that) and we get IndexerName
12067         support in interfaces.
12068
12069         * interface.cs: Register the indexers as properties.
12070
12071         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
12072         warning, I have verified that this is a bug in the .NET runtime
12073         (JavaScript suffers of the same problem).
12074
12075         * typemanager.cs (MemberLookup): When looking up members for
12076         interfaces, the parent of an interface is the implicit
12077         System.Object (so we succeed in searches of Object methods in an
12078         interface method invocation.  Example:  IEnumerable x;  x.ToString
12079         ()) 
12080
12081 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
12082
12083         * class.cs (Event): Events should also register if they do
12084         implement the methods that an interface requires.
12085
12086         * typemanager.cs (MemberLookup); use the new GetInterfaces
12087         method. 
12088
12089         (GetInterfaces): The code used to lookup interfaces for a type is
12090         used in more than one place, factor it here. 
12091
12092         * driver.cs: Track the errors at the bottom of the file, we kept
12093         on going.
12094
12095         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
12096         instance if the method we are calling is static!
12097
12098 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
12099
12100         * attribute.cs (ApplyAttributes): Make this function filter out
12101         the IndexerName attribute (as that attribute in reality is never
12102         applied) and return the string constant for the IndexerName
12103         attribute. 
12104
12105         * class.cs (TypeContainer.Emit): Validate that all the indexers
12106         have the same IndexerName attribute, and if so, set the
12107         DefaultName attribute on the class. 
12108
12109         * typemanager.cs: The return value might contain other stuff (not
12110         only methods).  For instance, consider a method with an "Item"
12111         property and an Item method.
12112
12113         * class.cs: If there is a problem with the parameter types,
12114         return. 
12115
12116 2002-05-24  Ravi Pratap  <ravi@ximian.com>
12117
12118         * ecore.cs (ImplicitConversionExists): Wrapper function which also
12119         looks at user defined conversion after making a call to 
12120         StandardConversionExists - we need this for overload resolution.
12121
12122         * expression.cs : Update accordingly the various method calls.
12123
12124         This fixes 2 bugs filed against implicit user defined conversions 
12125
12126 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
12127
12128         * statement.cs: Track the result of the assignment.
12129
12130 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
12131
12132         * expression.cs (MemberAccess): Improved error reporting for
12133         inaccessible members.
12134
12135 2002-05-22  Martin Baulig  <martin@gnome.org>
12136
12137         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
12138         itself with debugging support.
12139
12140 2002-05-22  Martin Baulig  <martin@gnome.org>
12141
12142         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
12143         Removed, this isn't needed anymore.
12144
12145 2002-05-20  Martin Baulig  <martin@gnome.org>
12146
12147         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
12148         be underlying type for an enum.
12149
12150 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
12151
12152         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
12153         that splits out the loading of just the core types.
12154
12155         * rootcontext.cs (ResolveCore): Split the struct resolution in
12156         two, so we can load the enumeration underlying types before any
12157         enums are used.
12158
12159         * expression.cs (Is): Bandaid until we fix properly Switch (see
12160         bug #24985 for details).
12161
12162         * typemanager.cs (ImplementsInterface): The hashtable will contain
12163         a null if there are no interfaces implemented.
12164
12165 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
12166
12167         * cs-parser.jay (indexer_declarator): It is fine to have array
12168         parameters
12169
12170 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
12171
12172         * typemanager.cs: (RegisterBuilder): New function used to register
12173         TypeBuilders that implement interfaces.  Since
12174         TypeBuilder.GetInterfaces (as usual) does not work with lame
12175         Reflection.Emit. 
12176         (AddUserType): register interfaces.
12177
12178         (ImplementsInterface): Use the builder_to_ifaces hash if we are
12179         dealing with TypeBuilder.  Also, arrays are showing up as
12180         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
12181         methods can not be invoked on them!
12182
12183         * ecore.cs (ExplicitReferenceConversionExists): Made public.
12184         (ImplicitReferenceConversionExists): Split out from
12185         StandardConversionExists. 
12186
12187         * expression.cs (As): We were only implementing one of the three
12188         cases for the as operator.  We now implement them all.
12189         (Is): Implement the various other cases for Is as well.
12190
12191         * typemanager.cs (CACHE): New define used to control if we want or
12192         not the FindMembers cache.  Seems to have a negative impact on
12193         performance currently
12194
12195         (MemberLookup): Nested types have full acess to
12196         enclosing type members
12197
12198         Remove code that coped with instance/static returns for events, we
12199         now catch this in RealFindMembers.
12200
12201         (RealFindMembers): only perform static lookup if the instance
12202         lookup did not return a type or an event.  
12203
12204 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
12205
12206         * assign.cs (CompoundAssign): We pass more semantic information
12207         now to Compound Assignments than we did before: now we have all
12208         the information at hand, and now we resolve the target *before* we
12209         do the expression expansion, which allows the "CacheValue" method
12210         to have the effect we intended (before, a [x] += 1 would generate
12211         two differen ArrayAccess expressions from the ElementAccess,
12212         during the resolution process).
12213
12214         (CompoundAssign.DoResolve): Resolve target and original_source here.
12215
12216 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
12217
12218         * expression.cs (ArrayAccess): dropped debugging information. 
12219
12220         * typemanager.cs: Small bug fix: I was always returning i_members,
12221         instead of one of i_members or s_members (depending on which had
12222         the content).
12223
12224         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
12225         method is invoked before any code generation takes place, and it
12226         is a mechanism to inform that the expression will be invoked more
12227         than once, and that the method should use temporary values to
12228         avoid having side effects
12229
12230         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
12231
12232         * ecore.cs (Expression.CacheTemporaries): Provide empty default
12233         implementation.
12234
12235         * expression.cs (Indirection, ArrayAccess): Add support for
12236         CacheTemporaries in these two bad boys. 
12237
12238         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
12239         ldobj or ldind_ref.  
12240         (StoreFromPtr): Handle stobj as well.
12241
12242         * expression.cs (UnaryMutator): Share more code.
12243
12244         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
12245         down: I was not tracking the Filter function as well, which
12246         was affecting the results of the cache.
12247
12248 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
12249
12250         * attribute.cs: Remove the hack to handle the CharSet property on
12251         StructLayouts. 
12252
12253 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
12254
12255         * attribute.cs (DoResolve): More uglyness, we now only try to
12256         resolve the attribute partially, to extract the CharSet
12257         information (only if we are a StructLayout attribute).  Otherwise 
12258
12259         (GetExtraTypeInfo): Add some code to conditionally kill in the
12260         future this.   I am more and more convinced that the .NET
12261         framework has special code to handle the attribute setting on
12262         certain elements.
12263
12264         * expression.cs (IsParamsMethodApplicable): Revert my previous
12265         foreach change here, it was wrong.
12266
12267 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
12268
12269         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
12270         (pp_expr): do not abort on unknown input, just return.
12271         (eval): abort if there are pending chars.
12272
12273         * attribute.cs (Attribute.Resolve): Positional parameters are
12274         optional.  Deal with that case.
12275
12276         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
12277         the Ansi/Unicode/Auto information for the type.
12278
12279         (TypeContainer.DefineType): instantiate the EmitContext here, as
12280         we will be using it during the type definition (to resolve
12281         attributes) and during the emit phase.
12282
12283         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
12284         to pull type information out of the attributes
12285
12286         (Attribute.Resolve): track the constructor builder, and allow for
12287         multiple invocations (structs and classes will use this).
12288
12289         * ecore.cs (MemberLookupFinal): new version with all the
12290         parameters customizable.
12291
12292         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
12293         constructors.  Return if the result value is null (as the error
12294         would have been flagged already by MemberLookupFinal)
12295
12296         Do not allow instances of abstract classes or interfaces to be
12297         created.
12298
12299         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
12300         We have to compare the assembly property here when dealing with
12301         FamANDAssem and Assembly access modifiers, because we might be
12302         creating an assembly from *modules* (that means that we are not
12303         getting TypeBuilders for types defined in other modules that are
12304         part of this assembly).
12305
12306         (Method.Emit): If the method is marked abstract and has a body,
12307         emit an error. 
12308
12309         (TypeContainer.DefineMembers): If both the defined member and the
12310         parent name match are methods, then do not emit any warnings: let
12311         the Method.Define routine take care of flagging warnings.  But if
12312         there is a mismatch (method overrides something else, or method is
12313         overriwritten by something, then emit warning).
12314
12315         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
12316         set to null, this means `do not check for the return type on the
12317         signature'. 
12318
12319         (Method.Define): set the return type for the method signature to
12320         null, so that we get methods with the same name and parameters and
12321         different return types.  This is used to flag warning 114 (you are
12322         hiding a method, and you probably want to use the new/override
12323         keywords instead).
12324
12325         * typemanager.cs (MemberLookup): Implemented proper access
12326         control, closing a long standing set of bug reports.  The problem
12327         was that the Framework only has two bits: Public and NonPublic,
12328         and NonPublic includes private and protected methods, but we need
12329         to enforce the FamANDAssem, FamOrAssem and Family. 
12330
12331 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
12332
12333         * statement.cs (GotoCase): Return true: Ammounts to giving up
12334         knowledge on whether we return or not, and letting the other case
12335         be responsible for it.
12336
12337 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
12338
12339         * driver.cs: Do not load directories for each file processed, only
12340         do it if there is a pattern.
12341
12342         * ecore.cs: Report readonly assigns here as well, as we might have
12343         been resolved only by MemberAccess.
12344
12345         (SimpleName.SimpleNameResolve): Also be useful for LValue
12346         resolution.   We need this to propagate assign to local readonly variables
12347
12348         * typemanager.cs: Use a ptrhashtable for the criteria, because we
12349         do not want to reuse potential criteria memory.
12350
12351         * class.cs (MyEventBuilder): Set reflected_type;
12352
12353         * ecore.cs (Constantify): Added support for constifying bools.
12354
12355         (RootContext.LookupType): Added a cache for values looked up in
12356         the declaration space.
12357
12358         * typemanager.cs (FindMembers): Now is a front-end to
12359         RealFindMembers, and provides a two-level hashtable-based cache to
12360         the request.  
12361
12362         15% performance improvement: from 22.5 to 19.2 seconds.
12363
12364         * expression.cs (IsParamsMethodApplicable): use foreach.
12365         (Invocation.DoResolve): ditto.
12366         (New.DoResolve): ditto.
12367         (ArrayCreation.DoResolve): ditto.
12368
12369         * ecore.cs (FindMostEncompassingType): use foreach.
12370
12371         * delegate.cs (NewDelegate.DoResolve): Use foreach
12372
12373         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
12374         (RemoveMethods): use foreach.
12375
12376         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
12377         nested foreach statements instead of for, and also break out of
12378         the inner loop once a match is found.
12379
12380         (Invocation.OverloadResolve): Use foreach, simplify the code. 
12381
12382 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
12383
12384         * cfold.cs (BinaryFold): During an enumeration evaluation context,
12385         we actually unwrap the expression to allow for extra information
12386         to be extracted. 
12387
12388         * expression.cs: Use Shr_Un on unsigned operations. 
12389
12390 2002-05-08  Ravi Pratap  <ravi@ximian.com>
12391
12392         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
12393         applicable operators was not being considered correctly. This closes
12394         the bug Miguel reported.
12395
12396 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
12397
12398         * attribute.cs: check that the type derives from System.Attribute
12399         and report the correct error in that case (moved the duplicate code to
12400         its own method, too).
12401
12402 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
12403
12404         * attribute.cs: lookup attribute type name as the spec says: first the
12405         bare attribute name and then name + "Attribute" (nant compiles with
12406         mcs after this fix).
12407
12408 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
12409
12410         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
12411         Because of the way we parse things, we should try to see if a
12412         UIntConstant can fit in an integer.
12413
12414 2002-05-07  Ravi Pratap  <ravi@ximian.com>
12415
12416         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
12417         when we are in an explicit context.
12418
12419         (ConvertReferenceExplicit): When converting from Iface type S to Class
12420         T make sure the rules are implemented as an OR.
12421
12422         * parameter.cs (ParameterType): Make it a property for now although the
12423         purpose really isn't anything immediate.
12424
12425         * expression.cs (Is*Applicable): Do better checking on the parameter type
12426         of a ref/out parameter. The ones from the system assemblies are already 
12427         marked with the correct type so we don't need to do any correction.
12428
12429         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
12430         the object type is standard too so include that.
12431
12432 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12433
12434         * ecore.cs (StandardConversionExists): Augment with missing code:
12435         deal with IntConstant, LongConstants and Enumerations.
12436
12437         * assign.cs: Report the error, instead of failing silently
12438
12439         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
12440         typecontainer that they are declared, because the
12441         typecontainer/namespace will have the list of using clauses that
12442         need to be applied.
12443
12444         Assembly Attributes were escaping the normal registration
12445         mechanism. 
12446
12447         (EmitCode): Apply attributes within an EmitContext that represents
12448         the container they were declared on.
12449
12450         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
12451
12452 2002-05-06  Ravi Pratap  <ravi@ximian.com>
12453
12454         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
12455         Revamp completely - make much cleaner as we now operate only
12456         on a set of Types.
12457
12458         (FindMostSpecificSource, FindMostSpecificTarget): New methods
12459         to implement the logic detailed in the spec more correctly.
12460
12461         (UserDefinedConversion): Update accordingly.
12462
12463 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12464
12465         * statement.cs: Return flow analysis information up.
12466
12467         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
12468         and the default.
12469
12470         (token): Do not consume an extra character before calling
12471         decimal_digits.
12472
12473 2002-05-06  Piers Haken <piersh@friskit.com>
12474
12475         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
12476
12477 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
12478
12479         * class.cs (Constructor.Emit): Set the IsStatic flag in the
12480         EmitContext during the instance constructor initializer
12481         resolution, to stop access to instance variables.
12482
12483         This is mandated by the spec, last paragraph of the `constructor
12484         initializers' section. 
12485
12486 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
12487
12488         * cs-parser.jay, class.cs (Accessor): new class used to represent
12489         an accessor (get or set).  In the past we used `null' to represent
12490         a missing accessor.  But this is ambiguous because there was no
12491         way to tell in abstract indexers/properties if one of them was
12492         specified.
12493
12494         Now there is a way of addressing that.
12495
12496         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
12497         instead of FindMembers.
12498
12499         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
12500         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
12501
12502         * attribute.cs: Treat indexers and properties as the same in terms
12503         of applying attributes
12504
12505         * ecore.cs (FindMostEncompassedType): Use statically initialized
12506         EmptyExpressions()s like we do elsewhere to avoid creating useless
12507         objects (and we take this out of the tight loop).
12508
12509         (GetConversionOperators): Move the code to extract the actual
12510         operators to a separate routine to clean things up.
12511
12512 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
12513
12514         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
12515         events are always registered FieldBuilders.
12516
12517         * class.cs (FieldBase): New class shared by Fields 
12518
12519         * delegate.cs: If we are a toplevel delegate, use our full name.
12520         If we are a nested delegate, then only use our tail name.
12521
12522 2002-05-02  Ravi Pratap  <ravi@ximian.com>
12523
12524         * expression.cs (IsApplicable): Ensure that we add the "&" to
12525         ref/out types before comparing it with the type of the argument.
12526
12527         (IsParamsMethodApplicable): Ditto.
12528
12529         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
12530         silly me ;-)
12531
12532         * delegate.cs : Handle the case when we have more than one applicable
12533         method. Flag an error only when we finish checking all.
12534
12535 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
12536
12537         * expression.cs: Add support for boolean static initializers.
12538
12539 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
12540
12541         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
12542
12543         * parameter.cs (ComputeParameterTypes,
12544         ComputeAndDefineParameterTypes): Better error handling: now we
12545         clear the `types' cache if we fail during any of the type lookups.
12546         We also return the status code correctly to our caller
12547
12548         * delegate.cs: If we fail to define a delegate, abort the extra
12549         steps. 
12550
12551         * expression.cs (Binary.ResolveOperator): for
12552         operator==(object,object) and operator !=(object, object) we also
12553         have to verify that there is an implicit conversion from one to
12554         the other.
12555
12556         (ArrayAccess.DoResolve): Array Access can operate on
12557         non-variables. 
12558
12559 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
12560
12561         * assign.cs (CompoundAssign): A new class used as a "flag" that
12562         the assignment actually is happening as part of a compound
12563         assignment operator.
12564
12565         During compound assignment, a few new rules exist to enable things
12566         like:
12567
12568         byte b |= 1 + 2
12569
12570         From the spec:
12571
12572         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
12573         to the type of x) if y is implicitly convertible to the type of x,
12574         and the operator is a builtin operator and the return type of the
12575         operator is explicitly convertible to the type of x. 
12576
12577         * rootcontext.cs: Reset warning level to 2.  4 catches various
12578         "interesting" features in mcs, we must clean this up at some
12579         point, but currently am trying to kill other bugs ;-)
12580
12581         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
12582         in container classes as well.  
12583
12584         * expression.cs (Binary.ResolveOperator): Handle string case
12585         before anything else (as operator overloading does emit an error
12586         before doing anything else).
12587
12588         This code could go away when we move to a table driven model, but
12589         i could not come up with a good plan last night.
12590
12591 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
12592
12593         * typemanager.cs (CSharpName): reimplementation using regex.
12594         * class.cs: added null check for fields in Emit
12595         * rootcontext.cs: set warninglevel to 4
12596
12597 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
12598
12599         * typemanager.cs (CSharpName): reimplemented with Lupus
12600         suggestion.
12601
12602 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
12603
12604         * statement.cs (If): correclty implement Resolve, because we were
12605         not catching sem errors in there.  The same process is needed
12606         everywhere else. 
12607         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
12608
12609
12610         (Statement.Warning_DeadCodeFound): Factorize code.
12611         (While): Report dead code here too.
12612
12613         (Statement): Added Resolve virtual method to allow
12614         for resolution split from the emit code.
12615
12616 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
12617
12618         * statement.cs (EmitBoolExpression): No longer try to resolve the
12619         expression here.    
12620         (MakeBoolean): New utility function that resolve, implicitly
12621         converts to boolean and tags the expression. 
12622
12623
12624         (If, Do): Implement dead code elimination.
12625         (While): Implement loop inversion
12626
12627         (Do, While, For, If): Resolve the expression prior to calling our
12628         code generation.
12629
12630 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
12631
12632         * class.cs:
12633           - added method Report28 (warning: program has more than one entry point)
12634           - added method IsEntryPoint, implements paragraph 10.1 of the spec
12635           - modified method Method.Define, the part at the end of the method
12636
12637         * rootcontext.cs: added static public Location EntryPointLocation;
12638           
12639         * ../errors/cs0028.cs : Add test case for the above warning.              
12640
12641         * typemanager.cs:
12642           - modified method CSharpName to allow arrays of primitive type to
12643             be printed nicely (e.g. instead of System.Int32[][] it now prints
12644             int[][])
12645           - added method CSharpSignature: returns the signature of a method
12646             in string format to be used in reporting errors, warnings, etc.
12647
12648         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
12649         with String.Empty.
12650
12651 2002-04-26  Ravi Pratap  <ravi@ximian.com>
12652
12653         * delegate.cs (Define): Fix extremely silly bug where I was
12654         setting the type of the 'object' parameter of the BeginInvoke
12655         method to System.IAsyncResult instead of System.Object ;-)
12656
12657 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
12658
12659         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
12660         here. 
12661
12662         (Constructor.Emit): return if we fail to initialize the
12663         constructor.  Another door closed!  
12664
12665         * expression.cs (New.DoResolve): Improve error message (from -6 to
12666         1501).  Use DeclaredOnly lookup to find the exact constructor.
12667
12668         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
12669         loop.  This is useful.
12670
12671         * cs-parser.jay: Adjust the default parameters so that destructors
12672         have the proper signature.
12673
12674 2002-04-26  Martin Baulig  <martin@gnome.org>
12675
12676         * driver.cs (LoadAssembly): If `assembly' contains any characters
12677         which are only valid in path names and not in assembly names
12678         (currently slash, backslash and point), use Assembly.LoadFrom ()
12679         instead of Assembly.Load () on the `assembly' (before iteration
12680         over the link_paths).
12681
12682 2002-04-26  Martin Baulig  <martin@gnome.org>
12683
12684         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
12685
12686 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
12687
12688         * class.cs (Property): use the new typemanager.MemberLookup
12689
12690         (TypeContainer.MemberLookup): Implement using the
12691         TypeManager.MemberLookup now. 
12692
12693         * typemanager.cs: Make MemberLookup a function of the TypeManager,
12694         and return MemberInfos, so that these can be used without an
12695         EmitContext (what we had before).
12696
12697 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
12698
12699         * expression.cs: Fix the case where the argument to params if the
12700         type of the params.  I omitted handling this before.   Fixed
12701
12702 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
12703
12704         * driver.cs: Call BootCorlib_PopulateCoreType
12705
12706         * class.cs (Property.CheckBase): Check for properties only, not
12707         for all members. 
12708
12709         * interface.cs: Temporary hack: try/catch around the
12710         CustomAttributeBuilder, because I am getting an exception that I
12711         do not understand.
12712
12713         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
12714         types whose definitions are required to be there (attributes are
12715         defined before standard types).
12716
12717         Compute definitions as we boot the various types, as they are used
12718         immediately (value_type class will need object_type, but if we do
12719         not initialize object_type, we will pass a null, which will let
12720         the runtime pick the System.Object from the existing corlib, which
12721         is not what we want).
12722
12723 2002-04-22  Patrik Torstensson <totte@labs2.com>
12724
12725         * cs-tokenizer.cs: fixed a number of trim() issues.
12726
12727 2002-04-22  Ravi Pratap  <ravi@ximian.com>
12728
12729         * expression.cs (Argument.Type): Ensure that we return the correct
12730         type when we have out or ref parameters [in which case we 
12731         append a "&"].
12732
12733 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
12734
12735         * class.cs (Property, Indexer): Allow extern modifier in there. 
12736
12737         * typemanager.cs (InitBaseTypes): Initializes object_type and
12738         value_type, since those will be used early on during the bootstrap
12739         process to compile corlib.
12740
12741         (InitCoreTypes): Move code from here to InitBaseTypes.
12742
12743 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
12744
12745         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
12746         single-dimension arrays as using the ldlen opcode.  
12747
12748         Daniel Lewis discovered this optimization.  
12749
12750         * typemanager.cs: Add signature for System.Array::get_Length
12751
12752 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12753
12754         * statement.cs: report the error when the foreach does not apply to an
12755         array nor a collection.
12756
12757 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
12758
12759         * expression.cs: Add implicit conversions to the operator ~.
12760
12761         * constant.cs (DecimalConstant.Emit): Emit decimal value.
12762
12763         * typemanager.cs: Locate the decimal constructor.
12764
12765 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12766
12767         * attribute.cs: use the new property of TypeOf.
12768         * expression.cs: added 'get' property around typearg.
12769
12770         These changes fix a build breaker reported by NickD. Is this the
12771         correct way to fix?  If not, please, revert my changes and make it
12772         work :-).
12773
12774 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
12775
12776         * attribute.cs: Add support for typeof in attribute invocations.
12777         I am not sure that this is right though.
12778
12779 2002-04-14  Duncan Mak  <duncan@ximian.com>
12780
12781         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
12782         Binary.Operator.Division case.
12783
12784 2002-04-13  Ravi Pratap  <ravi@ximian.com>
12785
12786         * class.cs (DefineType): Ensure that we do a proper check on
12787         attribute types and also register it with the TypeManager.
12788
12789         (TypeContainer.Targets): The default for attribute types is
12790         AttributeTargets.All.
12791
12792         * attribute.cs (ApplyAttributes): Registering the attribute type
12793         is done elsewhere, not when we discover we have a Usage attribute.
12794
12795 2002-04-12  Ravi Pratap  <ravi@ximian.com>
12796
12797         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
12798         and get rid of is_delegate parameter.
12799
12800         * everywhere : update.
12801
12802 2002-04-12  Ravi Pratap  <ravi@ximian.com>
12803
12804         * cs-parser.jay (compilation_unit): Revamp completely to use
12805         some new ideas that I got from Rhys' grammar to solve the problems
12806         with assembly level attributes.
12807
12808         (outer_declaration): New grammar production.
12809
12810         (attribute_sections): Add.
12811
12812         (opt_attributes): Base on attribute_sections
12813
12814         (namespace_declaration): Allow opt_attributes to tackle the case
12815         when we have assembly level attributes - we are clever in this
12816         regard now ;-)
12817
12818         * attribute.cs (ApplyAttributes): Do not worry about assembly 
12819         attributes in the non-global context.
12820
12821         * rootcontext.cs (AddGlobalAttributes): Go back to using this
12822         instead of SetGlobalAttributes.
12823
12824         * class.cs, rootcontext.cs : Ensure we define and generate 
12825         attribute types before anything else.
12826
12827         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
12828         and flag the new error -20 for the case when the attribute type
12829         does not have valid targets specified. csc does not catch this.
12830
12831         * ../errors/errors.txt : update for error # -20
12832
12833 2002-04-11  Ravi Pratap  <ravi@ximian.com>
12834
12835         * support.cs (InternalParameters.ParameterModifier): Do some null
12836         checking and return sane values.
12837
12838         * class.cs (Method.Define): If we are a PInvoke method, ensure
12839         that we are static and extern. Report error # 601
12840
12841         * ../errors/cs0601.cs : Add test case for the above error.
12842
12843 2002-04-07  Ravi Pratap  <ravi@ximian.com>
12844
12845         * rootcontext.cs (attribute_types): We need to keep type of
12846         all attribute types separately and emit code for them first.
12847
12848         (RegisterAttribute) : Implement.
12849
12850         * class.cs (DefineType): Check if the current Type is a custom
12851         attribute type and register it accordingly.
12852
12853         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
12854         adding the first attribute twice and rename to
12855
12856         (SetGlobalAttributes): this.
12857
12858         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
12859         lookups.
12860
12861         * attribute.cs (ApplyAttributes): Take an additional argument telling us
12862         if we are processing global arguments. Hmm, I am unsure of this.
12863
12864 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
12865
12866         * expression.cs: added static array of strings to avoid calling
12867         Enum.ToString () for Operator in Binary. Significant recover of
12868         performance.
12869
12870 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
12871
12872         * class.cs (FindMembers): Allow the Builders of the various
12873         members to be null.  If they are skip them.  This only happens
12874         during the PInvoke declaration.
12875
12876 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
12877
12878         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
12879         failure, so we do not keep going afterwards.
12880
12881         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
12882         wanted to pass `false' as the `is_delegate' argument.  If this is
12883         the case, why not use delegate_type == null to mean `is_delegate =
12884         false' and anything else as is_delegate = true.
12885
12886 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
12887
12888         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
12889         code for the section, not the beginning of the tests.
12890
12891 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
12892
12893         * cfold.cs: Handle operator + (Enum x, Underlying x) 
12894
12895         * expression.cs (Binary): same.  Warn about errors where we have
12896         Enum/Enum in operator + as well.
12897
12898 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
12899
12900         * statement.cs:
12901                 - added support for switch(bool)
12902                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
12903                 - add TableSwitchEmit() to handle table-based switch statements
12904
12905 2002-04-05  Ravi Pratap  <ravi@ximian.com>
12906
12907         * expression.cs (Invocation.OverloadResolve): Factor out code which
12908         does parameter compatibility checking with arguments so that we can 
12909         re-use the code even from Delegate.VerifyApplicability
12910
12911         (VerifyArgumentsCompat): Move above code here.
12912
12913         * delegate.cs (VerifyApplicability): Get rid of duplicate code
12914         and instead make a call to the above method.
12915
12916 2002-03-31  Ravi Pratap  <ravi@ximian.com>
12917
12918         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
12919         We use it to keep track of classes which are attribute types.
12920
12921 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
12922
12923         * delegate.cs (Delegate.Define): Correctly define the types in the
12924         presence of fixed and array parameters.
12925
12926         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
12927         doing FindMembers.
12928
12929         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
12930         include NonPublic after the first iteration.
12931
12932         * class.cs (Indexer.CheckBase): Only check if both parents are
12933         non-null. 
12934
12935         * cs-parser.jay (accessor_body): If empty, set to null.
12936
12937         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
12938         same code path here to resolve constants names that we did have in
12939         MemberAccess.DoResolve.  There is too much code duplicated here.
12940
12941 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
12942
12943         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
12944
12945         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
12946         to MakeUnionSet.
12947
12948         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
12949         tokens, numbers and strings.
12950
12951         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
12952         parenthesis.
12953
12954         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
12955         asyncronous parameters and the regular parameters.  
12956
12957         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
12958         specify the target directory.
12959
12960         * expression.cs: (This.DoResolve): Simplify
12961         (As.Emit): Optimize, do not generate IsInst if the expression is
12962         always of the given type.
12963
12964         (Is.DoResolve): Bug fix, we were reporting both always/never for
12965         the is expression.
12966
12967         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
12968         creating too many unnecessary arrays.
12969
12970 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
12971
12972         * class.cs (EmitFieldInitializer): Use Assign expression to assign
12973         fields instead of rolling our own initializer.   Takes care of all
12974         implicit conversions, and drops unnecessary static checks/argument.
12975
12976 2002-03-31  Dick Porter  <dick@ximian.com>
12977
12978         * driver.cs: use the GetDirectories() return values properly, and
12979         use "/" as path separator.
12980
12981 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
12982
12983         * expression.cs (Unary): Optimize - - expr into expr.
12984         (Binary): Optimize a + (-b) into a -b.
12985
12986         * codegen.cs (CodeGen): Made all methods static.
12987
12988 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
12989
12990         * rootcontext.cs: 
12991
12992         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
12993         TypeBuilder property.
12994
12995         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
12996         instead. 
12997
12998         * tree.cs: Removed the various RecordXXXX, and replaced with a
12999         single RecordDecl.  Removed all the accessor methods, and just
13000         left a single access point Type 
13001
13002         * enum.cs: Rename DefineEnum to DefineType.
13003
13004         * decl.cs: New abstract method `DefineType' used to unify the
13005         Defines for Enumerations, Interfaces, TypeContainers and
13006         Delegates.
13007
13008         (FindType): Moved LookupInterfaceOrClass here.  Moved the
13009         LookupBaseClasses method that used to live in class.cs and
13010         interface.cs here, and renamed to FindType.
13011
13012         * delegate.cs: Implement DefineType.  Take advantage of the
13013         refactored pattern for locating the parent builder without taking
13014         the parent_builder argument (which we know does not work if we are
13015         nested, and triggering a toplevel definition).
13016
13017 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
13018
13019         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
13020         accessibility of a member has changed during override and report
13021         an error if so.
13022
13023         * class.cs (Method.Define, Property.Define): Only complain on
13024         overrides if the method is private, any other accessibility is
13025         fine (and since we just checked the permission is the same, we are
13026         good to go).
13027
13028         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
13029         and elif are processed always.  The other pre-processing
13030         directives are only processed if we are "taking" the path
13031
13032 2002-03-29  Martin Baulig  <martin@gnome.org>
13033
13034         * class.cs (Method.Emit): Only emit symbolic debugging info if the
13035         current location is not Null.
13036
13037         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
13038         a separate method so we can profile it.
13039
13040         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
13041         `span.Seconds' are just seconds, but no minutes or hours.
13042         (MainDriver): Profile the CodeGen.SaveSymbols calls.
13043
13044 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
13045
13046         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
13047         Remove the gratuitous set of Final:
13048
13049                                 // If an interface implementation, then we can set Final.
13050                                 if (((flags & MethodAttributes.Abstract) == 0) &&
13051                                     implementing.DeclaringType.IsInterface)
13052                                         flags |= MethodAttributes.Final;
13053
13054         I do not know what I was smoking when I used that.
13055
13056
13057         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
13058         step into fixing the name resolution issues for delegates and
13059         unifying the toplevel name resolution.
13060
13061 2002-03-28  Martin Baulig  <martin@gnome.org>
13062
13063         * class.cs (Method.Emit): If we have a symbol writer, call its
13064         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
13065         tell it about the current method.
13066
13067         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
13068         writer that we're going to emit the first byte of IL code for a new
13069         statement (a new source line).
13070         (EmitContext.EmitTopBlock): If we have a symbol writer, call
13071         EmitContext.Mark() before emitting any code.
13072
13073         * location.cs (SymbolDocument): Return null when we're Null.
13074
13075         * statement.cs (Statement): Moved the `Location loc' variable here.
13076         (Statement.EmitBoolExpression): If we have a symbol writer, call
13077         ec.Mark() before emitting any code to tell it that we're at the
13078         beginning of a new statement.
13079         (StatementExpression): Added `Location' argument to the constructor.
13080         (Block): Added public readonly variable `StartLocation' and public
13081         variable `EndLocation'.  The latter is to be set using SetEndLocation().
13082         (Block): Added constructor which takes a start and end location.
13083         (Block.SetEndLocation): New method. This sets the end location.
13084         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
13085         local variables we create.
13086         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
13087         each statement and do also mark the begin and end of the block.
13088
13089         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
13090         tell it the current lexer.Location, use Location.Null for the end of the
13091         block.
13092         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
13093         current block, set its end location using SetEndLocation().
13094         (statement_expression): StatementExpression constructor now takes the
13095         lexer.Location as additional argument.
13096         (for_statement, declare_local_variables): Likewise.
13097         (declare_local_variables): When creating a new implicit block, use the
13098         new Block constructor and pass it the lexer.Location.
13099
13100 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
13101
13102         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
13103         members also on the parent interfaces recursively.
13104
13105 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
13106
13107         * report.cs: Use new formats, since Gonzalo finished the missing
13108         bits. 
13109
13110         * expression.cs (Binary.ResolveOperator): added missing operator|
13111         operator& and operator^ for bool/bool.
13112
13113         * cs-parser.jay: CheckDef now takes a Location argument that is
13114         used to report errors more precisly (instead of reporting the end
13115         of a definition, we try to track something which is a lot closer
13116         to the source of the problem).
13117
13118         * cs-tokenizer.cs: Track global token use, so we can properly flag
13119         the use of #define/#undef after the first token has been seen.
13120
13121         Also, rename the reportXXXX to Error_DescriptiveName
13122
13123         * decl.cs (DeclSpace.IsTopLevel): Move property here from
13124         TypeContainer, so that Enum and Interface can use this too.
13125
13126         * class.cs (TypeContainer.LookupInterfaceOrClass,
13127         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
13128         `builder' argument.  Typically this was used to pass the parent
13129         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
13130         the definition).  
13131
13132         The problem is that a nested class could trigger the definition of
13133         a toplevel class, and the builder would be obviously wrong in that
13134         case. 
13135
13136         So we drop this argument, and we compute dynamically the
13137         TypeBuilder/ModuleBuilder (the correct information was available
13138         to us anyways from DeclSpace.Parent)
13139
13140         * interface.cs (Interface.DefineInterface): Drop builder
13141         parameter cleanup like class.cs
13142
13143         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
13144         like class.cs
13145
13146         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
13147         values. 
13148
13149         (Try.Emit): Propagate the returns value from the statement.
13150
13151         (Return.Emit): Even if we are leavning 
13152
13153         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
13154
13155         * modifiers.cs: Fix the computation of MethodAttributes flags.
13156
13157 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
13158
13159         * driver.cs: allow compilation of files that start with '/'.
13160         Add a default case when checking the argument of --target.
13161
13162 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
13163
13164         * interface.cs: Implement the same search algorithm for types in
13165         the interface code.
13166
13167         * delegate.cs: Do not allow multiple definition.
13168
13169         * Recovered ChangeLog that got accidentally amputated
13170
13171         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
13172
13173         * rootcontext.cs: Load manually enum to allow core classes to
13174         contain enumerations.
13175
13176         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
13177         Update to new static methods in TypeManager.
13178
13179         * typemanager.cs (GetMethod, GetConstructor): Use our
13180         implementation of FindMembers to find the members, since during
13181         corlib compilation, the types are TypeBuilders and GetMethod and
13182         GetConstructor do not work.
13183
13184         Make all methods in TypeManager static.
13185
13186         (InitCodeHelpers): Split the functionality from
13187         the InitCodeTypes function.
13188
13189         * driver.cs: Call InitCodeHelpers after we have populated the
13190         types. 
13191
13192         * cs-parser.jay (delegate_declaration): we did not used to compute
13193         the delegate name correctly for void delegates.
13194
13195 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
13196
13197         * rootcontext.cs (RootContext): Init the interface_resolve_order
13198         and type_container_resolve_order always.
13199
13200         (ResolveCore, BootstrapCorlib_ResolveClass,
13201         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
13202         compiler when compiling with --nostdlib
13203
13204         * class.cs (TypeContainer.DefineType): Check that our parent is
13205         not null.  This test is most important when we are bootstraping
13206         the core types.
13207
13208         * codegen.cs: Split out the symbol writing code.
13209
13210 2002-03-25  Martin Baulig  <martin@gnome.org>
13211
13212         * driver.cs (-g): Made -g an alias for --debug.
13213
13214 2002-03-24  Martin Baulig  <martin@gnome.org>
13215
13216         * codegen.cs (SymbolWriter): New public variable. Returns the
13217         current symbol writer.
13218         (CodeGen): Added `bool want_debugging_support' argument to the
13219          constructor. If true, tell the ModuleBuild that we want debugging
13220         support and ask it for the ISymbolWriter.
13221         (Save): If we have a symbol writer, call it's Close() method after
13222         saving the assembly.
13223
13224         * driver.c (--debug): New command line argument to create a
13225         debugger information file.
13226
13227         * location.cs (SymbolDocument): New public property. Returns an
13228         ISymbolDocumentWriter object for the current source file or null
13229         if we don't have a symbol writer.
13230
13231 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
13232
13233         * driver.cs (LoadAssembly): Correctly return when all the paths
13234         have been tried and not before.
13235
13236         * statement.cs (Switch.Emit): return the actual coverage for this
13237         statement (returns/not-returns)
13238
13239         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
13240         switch of the statement if we are the last switch section.  That
13241         kills two problems: try/catch problems (we used to emit an empty
13242         nop at the end) and switch statements where all branches would
13243         return. 
13244
13245 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
13246
13247         * driver.cs: Add default assemblies (the equivalent to the
13248         Microsoft CSC.RSP file)
13249
13250         * cs-tokenizer.cs: When updating `cols and setting it to zero,
13251         also update tokens_seen and set it to false.
13252
13253         * driver.cs: Implement --recurse for Mike.
13254
13255         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
13256         correctly splitting out the paths.
13257
13258 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
13259
13260         * interface.cs (Interface.PopulateProperty): Instead of using
13261         `parent' as the declaration space for the set parameters, use
13262         `this' 
13263
13264         * support.cs (InternalParameters): InternalParameters constructor
13265         takes a DeclSpace instead of a TypeContainer.
13266
13267         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
13268         types are being initialized, load the address of it before calling
13269         the function.  
13270
13271         (New): Provide a mechanism to disable the generation of local
13272         value type temporaries when the caller will be providing us with
13273         an address to store it.
13274
13275         (ArrayCreation.EmitDynamicInitializers): Use it.
13276
13277 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
13278
13279         * expression.cs (Invocation.EmitArguments): Only probe for array
13280         property if there is more than one argument.  Sorry about that.
13281
13282         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
13283         empty param arrays.
13284
13285         * class.cs (Method.LabelParameters): Fix incorrect code path that
13286         prevented the `ParamArrayAttribute' from being applied to the
13287         params attribute.
13288
13289 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
13290
13291         * support.cs (ReflectionParameters): Correctly compute whether the
13292         last argument is a params array.  Fixes the problem with
13293         string.Split ('a')
13294
13295         * typemanager.cs: Make the assemblies array always be non-null
13296         (empty, but non-null)
13297
13298         * tree.cs (RecordDecl): New function that abstracts the recording
13299         of names.  This reports error 101, and provides a pointer to the
13300         previous declaration.  Fixes a crash in the compiler.
13301
13302         * cs-parser.jay (constructor_declaration): Update to new grammar,
13303         and provide a constructor_body that can be empty.
13304
13305 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
13306
13307         * driver.cs: Add support for --resources.
13308
13309         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
13310         Make all types for the various array helper methods be integer.
13311
13312         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
13313         CheckState to ConvCast.
13314
13315         (ConvCast): Now it takes a `checked' state argument, to avoid
13316         depending on the emit context for the conversion, and just using
13317         the resolve time setting.
13318
13319         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
13320         instead of Invocation.EmitArguments.  We do not emit the original
13321         arguments, instead we emit those which have been converted to
13322         unsigned int expressions.
13323
13324         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
13325
13326         * codegen.cs: ditto.
13327
13328         * expression.cs (LocalVariableReference): Drop the use of the
13329         Store function that depended on the variable index.
13330
13331         * statement.cs (VariableInfo): Drop the `Idx' property from this
13332         class, as this is not taking into account the indexes for
13333         temporaries tat we generate during the execution, getting the
13334         indexes wrong.
13335
13336         * class.cs: First emit class initializers, then call the parent
13337         constructor. 
13338
13339         * expression.cs (Binary): Fix opcode emision.
13340         (UnaryMutator.EmitCode): Support checked code generation
13341
13342         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
13343         matches for events for both the Static and Instance scans,
13344         pointing to the same element.   Fix that.
13345
13346 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
13347
13348         * rootcontext.cs (ResolveTree): Always set the
13349         interface_resolve_order, because nested interfaces will be calling
13350         into us.
13351
13352         * class.cs (GetInterfaceOrClass): Track the same resolution
13353         process used by TypeManager.LookupType.  This fixes the nested
13354         type lookups in class declarations (separate path from
13355         LookupType). 
13356
13357         (TypeContainer.DefineType): Also define nested interfaces.
13358         (TypeContainer.RegisterOrder): New public function used to
13359         register the order in which child interfaces need to be closed.
13360
13361         Nested interfaces need to be closed after their parents have been
13362         created. 
13363
13364         * interface.cs (InterfaceAttr): Put all the logic for computing
13365         the interface attribute here. 
13366
13367         (DefineInterface): Register our interface order with the
13368         RootContext or with the TypeContainer depending on the case.
13369
13370 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
13371
13372         * cs-parser.jay: rework foreach statement to work with the new
13373         changes to the policy on SimpleNames.
13374
13375         * report.cs: support Stacktrace on warnings as well.
13376
13377         * makefile: drop --unsafe and /unsafe from the compile.
13378
13379 2002-03-13  Ravi Pratap  <ravi@ximian.com>
13380
13381         * ecore.cs (StandardConversionExists): Modify to take an Expression
13382         as the first parameter. Ensure we do null -> reference type conversion
13383         checking.
13384
13385         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
13386         temporary Expression objects.
13387
13388 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
13389
13390         * interface.cs: workaround bug in method overloading resolution
13391         (there is already a bugzilla bug for it).
13392
13393 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
13394
13395         We could also solve this problem by having a separate path for
13396         performing type lookups, instead of DoResolve, we could have a
13397         ResolveType entry point, and only participating pieces of the
13398         production (simplename, deref, array) would implement this. 
13399
13400         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
13401         signal SimpleName to only resolve type names and not attempt to
13402         resolve anything else.
13403
13404         * expression.cs (Cast): Set the flag.
13405
13406         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
13407
13408         * class.cs: Only report 108 if there is no `new' modifier.
13409
13410         * cs-parser.jay: rework foreach statement to work with the new
13411         changes to the policy on SimpleNames.
13412
13413         * report.cs: support Stacktrace on warnings as well.
13414
13415         * makefile: drop --unsafe and /unsafe from the compile.
13416
13417 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
13418
13419         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
13420         lookups here, instead of doing that at parse time.  This means
13421         that our grammar will not introduce `LocalVariableReferences' as
13422         expressions at this point.  That solves the problem of code like
13423         this:
13424
13425         class X {
13426            static void Main ()
13427            { int X = 1;
13428             { X x = null }}}
13429
13430         This is only half the fix.  The full fix requires parameters to
13431         also be handled in this way.
13432
13433         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
13434         makes the use more obvious of the DeclSpace.  The
13435         ec.TypeContainer.TypeBuilder is now only used to pull the
13436         TypeBuilder for it.
13437
13438         My theory is that I can get rid of the TypeBuilder completely from
13439         the EmitContext, and have typecasts where it is used (from
13440         DeclSpace to where it matters).  
13441
13442         The only pending problem is that the code that implements Aliases
13443         is on TypeContainer, and probably should go in DeclSpace.
13444
13445         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
13446         lookups here, instead of doing that at parse time.  This means
13447         that our grammar will not introduce `LocalVariableReferences' as
13448         expressions at this point.  That solves the problem of code like
13449         this:
13450
13451         class X {
13452            static void Main ()
13453            { int X = 1;
13454             { X x = null }}}
13455
13456         This is only half the fix.  The full fix requires parameters to
13457         also be handled in this way.
13458
13459         * class.cs (Property.DefineMethod): When implementing an interface
13460         method, set newslot, when implementing an abstract method, do not
13461         set the flag (before we tried never setting it, or always setting
13462         it, which is the difference).
13463         (Indexer.DefineMethod): same.
13464         (Method.DefineMethod): same.
13465
13466         * ecore.cs: Only set the status used flag if we get back a Field.
13467
13468         * attribute.cs: Temporary hack, so Paolo can keep working.
13469
13470 2002-03-08  Ravi Pratap  <ravi@ximian.com>
13471
13472         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
13473         the unmanaged type in the case we have a MarshalAs attribute.
13474
13475         (Resolve): Handle the case when we are parsing the special MarshalAs
13476         attribute [we need to store the unmanaged type to use later]
13477
13478         * typemanager.cs (marshal_as_attr_type): Built in type for the 
13479         MarshalAs Attribute.
13480
13481         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
13482         on parameters and accordingly set the marshalling info.
13483
13484 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
13485
13486         * class.cs: Optimizing slightly by removing redundant code after
13487         we switched to the `NoTypes' return value.
13488         (Property.DefineMethod): use NoTypes here too.
13489
13490         This fixes the bug I introduced in my last batch of changes.
13491
13492 2002-03-05  Ravi Pratap  <ravi@ximian.com>
13493
13494         * tree.cs (RecordEnum): Add. We now keep track of enums too.
13495
13496         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
13497         Enums since those are types too. 
13498
13499         * cs-parser.jay (enum_declaration): Record enums as we parse them.
13500
13501         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
13502         thanks to a call during the lookup process.
13503
13504 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
13505
13506         * statement.cs (Foreach): Lots of work to accomodate a particular
13507         kind of foreach statement that I had not kept in mind.  It is
13508         possible to have foreachs on classes that provide a GetEnumerator
13509         method that return objects that implement the "pattern" for using
13510         a foreach, there is no need to support GetEnumerator
13511         specifically. 
13512
13513         This is needed to compile nant.
13514
13515         * decl.cs: Only report 114 if the member is not `Finalize' and if
13516         the warning level is at least 2.
13517
13518         * class.cs: Moved the compare function from Method to
13519         MethodSignature. 
13520
13521         (MethodSignature.InheritableMemberSignatureCompare): Add new
13522         filter function that is used to extract inheritable methods from a
13523         class. 
13524
13525         (Method.Define): Use the new `inheritable_method_signature_filter'
13526         delegate
13527
13528         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
13529         command. 
13530
13531 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
13532
13533         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
13534
13535         * cs-parser.jay: Add opt_semicolon to the interface declaration.
13536
13537         * expression.cs: Pass location information to
13538         ConvertImplicitStandard. 
13539
13540         * class.cs: Added debugging code to track return values from
13541         interfaces. 
13542
13543 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
13544
13545         * expression.cs (Is.DoResolve): If either side of the `is' is an
13546         interface, do not flag the warning.
13547
13548         * ecore.cs (ImplicitReferenceConversion): We need a separate test
13549         for interfaces
13550
13551         * report.cs: Allow for --fatal to be used with --probe.
13552
13553         * typemanager.cs (NoTypes): Move the definition for the empty Type
13554         array here. 
13555
13556         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
13557         properties. 
13558         (TypeContainer.DefineProxy): New function used to proxy to parent
13559         implementations when implementing interfaces.
13560         (TypeContainer.ParentImplements): used to lookup if our parent
13561         implements a public function that is required by an interface.
13562         (TypeContainer.VerifyPendingMethods): Hook this up.
13563
13564         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
13565         `modules' and `assemblies' arraylists into arrays.  We only grow
13566         these are the very early start up of the program, so this improves
13567         the speedof LookupType (nicely measured).
13568
13569         * expression.cs (MakeByteBlob): Replaced unsafe code with
13570         BitConverter, as suggested by Paolo.
13571
13572         * cfold.cs (ConstantFold.Binary): Special case: perform constant
13573         folding of string concatenation, but if either side is a string,
13574         and the other is not, then return null, and let the runtime use
13575         the concatenation on the string plus the object (using
13576         `Object.ToString'). 
13577
13578 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
13579
13580         Constant Folding has been implemented now.
13581
13582         * expression.cs (Unary.Reduce): Do not throw an exception, catch
13583         the error instead on types that are not supported in one's
13584         complement. 
13585
13586         * constant.cs (Constant and all children): New set of functions to
13587         perform implict and explicit conversions.
13588
13589         * ecore.cs (EnumConstant): Implement the new functions to perform
13590         conversion by proxying to the child expression.
13591
13592         * codegen.cs: (ConstantCheckState): Constant evaluation has its
13593         own separate setting that can not be turned off from the command
13594         line using --unchecked or --checked and is only controlled using
13595         the checked/unchecked statements and expressions.  This setting is
13596         used by the constant folder to flag errors.
13597
13598         * expression.cs (CheckedExpr, UncheckedExpr): Set the
13599         ConstantCheckState as well.   
13600
13601         During Resolve, they also have to flag the state, because the
13602         constant folder runs completely in the Resolve phase.
13603
13604         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
13605         well.
13606
13607 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
13608
13609         * cfold.cs: New file, this file contains the constant folder.
13610
13611         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
13612         argument to track whether we are using the resulting address to
13613         load or store a value and provide better error messages. 
13614
13615         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
13616         new AddressOf arguments.
13617
13618         * statement.cs (Foreach.EmitCollectionForeach): Update
13619
13620         * expression.cs (Argument.Emit): Call AddressOf with proper
13621         arguments to track usage.
13622
13623         (New.DoEmit): Call AddressOf with new arguments.
13624
13625         (Unary.Emit): Adjust AddressOf call.
13626
13627 2002-03-01  Ravi Pratap  <ravi@ximian.com>
13628
13629         * cs-parser.jay (member_access): Change the case for pre-defined types
13630         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
13631         this suggestion.
13632
13633         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
13634         a method body.
13635
13636         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
13637         essentially like methods and apply attributes like MethodImplOptions to them too.
13638
13639         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
13640         not being null.
13641
13642         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
13643         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
13644         is the DeclSpace.
13645
13646         * Update code everywhere accordingly.
13647
13648         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
13649
13650         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
13651
13652 2002-02-28  Ravi Pratap  <ravi@ximian.com>
13653
13654         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
13655         try performing lookups against those instead of jumping straight into using
13656         the 'using' clauses.
13657
13658         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
13659
13660         (LookupType): Perform lookups in implicit parents too.
13661
13662         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
13663         sequence as RootContext.LookupType. 
13664
13665         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
13666         the various cases of namespace lookups into this method.
13667
13668 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
13669
13670         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
13671         in positional arguments)
13672
13673         * class.cs (Operator): Update the AllowedModifiers to contain
13674         extern. 
13675
13676         * cs-parser.jay: Update operator declaration to allow for the
13677         operator body to be empty.
13678
13679         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
13680         values. 
13681
13682 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
13683
13684         * class.cs (Method.Emit): Label parameters.
13685
13686         * driver.cs: Return 1 or 0 as the program exit code.
13687
13688 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
13689
13690         * expression.cs: Special case the `null' object when trying to
13691         auto-compute the type, as anything can be explicitly converted to
13692         that. 
13693
13694         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
13695         spotting this Paolo.
13696
13697         (Expression.ImplicitNumericConversion): Perform comparissions of
13698         the type using the underlying type in the case of an enumeration
13699         rather than using the enumeration type for the compare.
13700
13701         Cope with the underlying == type case, which is not possible to
13702         catch before. 
13703
13704         (Expression.ConvertNumericExplicit): Perform comparissions of
13705         the type using the underlying type in the case of an enumeration
13706         rather than using the enumeration type for the compare.
13707
13708         * driver.cs: If the user does not supply an extension, assume .exe
13709
13710         * cs-parser.jay (if_statement): Rewrote so that we can track the
13711         location for the if statement.
13712
13713         * expression.cs (Binary.ConstantFold): Only concat strings when
13714         the operation is "+", not everything ;-)
13715
13716         * statement.cs (Statement.EmitBoolExpression): Take a location
13717         argument. 
13718         (If, While, Do): Track location.
13719
13720         * expression.cs (Binary.ResolveOperator): In the object + string
13721         case, I was missing a call to ConvertImplicit
13722
13723 2002-02-25  Ravi Pratap  <ravi@ximian.com>
13724
13725         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
13726         Location arguments. Ensure we use RootContext.LookupType to do our work
13727         and not try to do a direct Type.GetType and ModuleBuilder.GetType
13728
13729         * interface.cs (PopulateMethod): Handle the type of the parameter being
13730         null gracefully.
13731
13732         * expression.cs (Invocation.BetterFunction): Handle the case when we 
13733         have a params method with no fixed arguments and a call is made with no
13734         arguments.
13735
13736 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
13737
13738         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
13739         the verbatim-string-literal
13740
13741         * support.cs (InternalParameters.ParameterModifier): handle null
13742         fixed parameters.
13743         (InternalParameters.ParameterType): ditto.
13744
13745         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
13746         duplicating the name of the variable parameter.
13747         (GetParameterByName): Fix bug where we were not looking up array
13748         paramters if they were the only present (thanks Paolo!).
13749         (GetParameterInfo): We only have an empty set of types if both
13750         fixed and array are set to null.
13751         (GetParameterInfo-idx): Handle FixedParameter == null
13752
13753         * cs-parser.jay: Handle the case where there is no catch
13754         statements (missing null test).
13755
13756 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
13757
13758         * driver.cs (MainDriver): Be conservative on our command line
13759         handling.
13760
13761         Catch DirectoryNotFoundException when calling GetFiles.
13762
13763         (SplitPathAndPattern): Used to split the input specification into
13764         a path and a pattern that we can feed to Directory.GetFiles.
13765
13766 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
13767
13768         * statement.cs (Fixed): Implement the last case of the Fixed
13769         statement (string handling).
13770
13771         * expression.cs (StringPtr): New class used to return a char * to
13772         a string;  Used by the Fixed statement.
13773
13774         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
13775
13776         * expression.cs (Binary.ResolveOperator): Remove redundant
13777         MemberLookup pn parent type.
13778         Optimize union call, we do not need a union if the types are the same.
13779         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
13780         type.
13781
13782         Specialize the use of MemberLookup everywhere, instead of using
13783         the default settings. 
13784
13785         (StackAlloc): Implement stackalloc keyword.
13786
13787         * cs-parser.jay: Add rule to parse stackalloc.
13788
13789         * driver.cs: Handle /h, /help, /?
13790
13791         * expression.cs (MakeByteBlob): Removed the hacks we had in place
13792         before we supported unsafe code.
13793
13794         * makefile: add --unsafe to the self compilation of mcs.
13795
13796 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
13797
13798         * expression.cs (PointerArithmetic): New class that is used to
13799         perform pointer arithmetic.
13800         (Binary.Resolve): Handle pointer arithmetic
13801         Handle pointer comparission.
13802         (ArrayPtr): Utility expression class that is used to take the
13803         address of an array.
13804
13805         (ElementAccess): Implement array access for pointers
13806
13807         * statement.cs (Fixed): Implement fixed statement for arrays, we
13808         are missing one more case before we are done.
13809
13810         * expression.cs (Indirection): Implement EmitAssign and set the
13811         ExprClass to Variable.  This allows pointer dereferences to be
13812         treated as variables, and to have values assigned to them.
13813
13814         * ecore.cs (Expression.StoreFromPtr): New utility function to
13815         store values dereferencing.
13816
13817 2002-02-20  Ravi Pratap  <ravi@ximian.com>
13818
13819         * expression.cs (Binary.ResolveOperator): Ensure that we are
13820         not trying to operate on a void type - this fixes the reported
13821         bug.
13822
13823         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
13824         the parent implementation is sealed.
13825
13826         * ../errors/cs0239.cs : Add.
13827
13828         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
13829
13830         * typemanager.cs (unverifiable_code_type): Corresponds to 
13831         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
13832         which have unsafe code in them.
13833
13834         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
13835         unsafe context.
13836
13837 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
13838
13839         * cs-tokenizer.cs: Add support for @"litreal strings"
13840
13841         Make tokenizer accept pre-processor directives
13842         on any column (remove the old C-like limitation). 
13843
13844         * rootcontext.cs (EmitCode): Emit any global attributes.
13845         (AddGlobalAttributes): Used to keep track of assembly attributes. 
13846
13847         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
13848
13849         * cs-parser.jay: Add support for global attributes.  
13850
13851 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
13852
13853         * expression.cs (Indirection): New helper class.  Unary will
13854         create Indirection classes to be able to implement the
13855         IMemoryLocation interface on it.
13856
13857 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
13858
13859         * cs-parser.jay (fixed_statement): reference the right statement.
13860
13861         * statement.cs (Fixed.Emit): Finish implementing the fixed
13862         statement for the &x case.
13863
13864 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
13865
13866         * class.cs (Property.Define, Method.Define): Remove newslot when
13867         `implementing'.  
13868
13869         * modifiers.cs: My use of NewSlot when `Abstract' was set was
13870         wrong.  NewSlot should only be used if the `new' keyword is present.
13871
13872         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
13873         locating our system dir.  Sorry about this.
13874
13875 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
13876
13877         * driver.cs (GetSystemDir): Compute correctly the location of our
13878         system assemblies.  I was using the compiler directory instead of
13879         the library directory.
13880
13881 2002-02-13  Ravi Pratap  <ravi@ximian.com>
13882
13883         * expression.cs (BetterFunction): Put back in what Miguel commented out
13884         since it is the correct fix. The problem is elsewhere ;-)
13885
13886         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
13887         parameters of the parms method are themselves compatible or not !
13888
13889         (StandardConversionExists): Fix very dangerous bug where we were forgetting
13890         to check that a class implements an interface before saying that an implicit
13891         conversion was allowed. Use ImplementsInterface to do the checking.
13892
13893 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
13894
13895         * class.cs (Method.Define): Track whether we are an explicit
13896         implementation or not.  And only call DefineMethodOverride if we
13897         are an explicit implementation.
13898
13899         (Property.DefineMethod): Ditto.
13900
13901 2002-02-11  Ravi Pratap  <ravi@ximian.com>
13902
13903         * expression.cs (BetterFunction): Catch hideous bug which was
13904          preventing us from detecting ambiguous calls due to implicit casts i.e
13905         cs0121.
13906
13907 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
13908
13909         * support.cs (Pair): Remove un-needed method.  I figured why I was
13910         getting the error in cs-parser.jay, the variable in a foreach loop
13911         is readonly, and the compiler does not really treat this as a variable.
13912
13913         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
13914         instead of EQUALS in grammar.  
13915
13916         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
13917
13918         * expression.cs (Unary.DoResolve): Check whether the argument is
13919         managed or not.
13920
13921 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
13922
13923         * support.cs: Api for Pair to set a value.  Despite the fact that
13924         the variables are public the MS C# compiler refuses to compile
13925         code that accesses the field if the variable is part of a foreach
13926         statement. 
13927
13928         * statement.cs (Fixed): Begin implementation of the fixed
13929         statement.
13930
13931         (Block.AddVariable): Return the VariableInfo on success and null
13932         on failure instead of true/false. 
13933
13934         * cs-parser.jay (foreach): Catch errors on variables already
13935         defined (we were ignoring this value before) and properly unwind
13936         the block hierarchy
13937
13938         (fixed_statement): grammar for the fixed statement.
13939
13940 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
13941
13942         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
13943         pointer types to be incretemented.
13944
13945         (SizeOf): Implement.
13946
13947         * cs-parser.jay (pointer_member_access): Implement
13948         expr->IDENTIFIER production.
13949
13950         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
13951         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
13952         on safe contexts.
13953
13954         (Unary): Implement indirection.
13955
13956         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
13957         use in non-unsafe context).
13958
13959         (SimpleName.DoResolve): Check for pointers in field access on safe
13960         contexts. 
13961
13962         (Expression.LoadFromPtr): Factor the load-indirect code in this
13963         function.  This was duplicated in UnboxCast and ParameterReference
13964
13965 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
13966
13967         * expression.cs (ComposedCast): report an error if a pointer cast
13968         is used in a safe region.
13969
13970         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
13971         pointer type casts in unsafe context.
13972
13973         * codegen.cs (EmitContext): Set up IsUnsafe.
13974
13975         * cs-parser.jay (non_expression_type): Add productions for pointer
13976         casts. 
13977
13978         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
13979         code.  We should not use force into static mode if the method is
13980         not virtual.  Fixes bug in MIS
13981
13982         * statement.cs (Do.Emit, While.Emit, For.Emit,
13983         Statement.EmitBoolExpression): Add support to Do and While to
13984         propagate infinite loop as `I do return' semantics.
13985
13986         Improve the For case to also test for boolean constants.
13987
13988         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
13989         to the list of attributes we can add.
13990
13991         Remove `EmitContext' argument.
13992
13993         * class.cs (Method.Define): Apply parameter attributes.
13994         (Constructor.Define): Apply parameter attributes.
13995         (MethodCore.LabelParameters): Move here the core of labeling
13996         parameters. 
13997
13998         * support.cs (ReflectionParameters.ParameterModifier,
13999         InternalParameters.ParameterModifier): Use IsByRef on the type and
14000         only return the OUT bit for these parameters instead of in/out/ref
14001         flags.
14002
14003         This is because I miss-understood things.  The ParameterInfo.IsIn
14004         and IsOut represent whether the parameter has the [In] and [Out]
14005         attributes set.  
14006
14007 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
14008
14009         * ecore.cs (FieldExpr.Emit): Release temporaries.
14010
14011         * assign.cs (LocalTemporary.Release): new function.
14012
14013         * codegen.cs (EmitContext.GetTemporaryStorage,
14014         EmitContext.FreeTemporaryStorage): Rework the way we deal with
14015         temporary storage.  Now we can "put back" localbuilders when we
14016         are done with them
14017
14018 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
14019
14020         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
14021         need to make a copy of the variable to generate verifiable code.
14022
14023 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
14024
14025         * driver.cs: Compute dynamically the system directory.
14026
14027         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
14028         Slower, but more generally useful.  Used by the abstract
14029         registering implementation. 
14030
14031         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
14032         the rules for the special rule on Type/instances.  First check if
14033         we have the same name, and if so, try that special static path
14034         rather than the instance path.
14035
14036 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
14037
14038         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
14039         for, while and if.
14040
14041         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
14042         Enum, ValueType, Delegate or Array for non-corlib compiles.
14043
14044         * cs-tokenizer.cs: Catch long identifiers (645)
14045
14046         * typemanager.cs (IndexerPropetyName): Ravi never tested this
14047         piece of code.
14048
14049         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
14050         fix, we were returning too early, so we were not registering
14051         pending methods from abstract classes.
14052
14053         Do not register pending methods if the class is abstract.
14054
14055         * expression.cs (Conditional.DoResolve): Report circular implicit
14056         conversions when we neecd to compute it for conditional
14057         expressions. 
14058
14059         (Is.DoResolve): If the expression is always of the provided type,
14060         flag warning 183.  If the expression can not ever be of the
14061         provided type flag warning 184.
14062
14063         * class.cs: Catch 169 as well.
14064
14065         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
14066         read. 
14067
14068 2002-01-18  Nick Drochak  <ndrochak@gol.com>
14069
14070         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
14071
14072 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
14073
14074         * interface.cs: (PopulateMethod): Check for pointers being defined
14075         only if the unsafe context is active.
14076         (PopulateProperty): ditto.
14077         (PopulateIndexer): ditto.
14078
14079         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
14080         specified.  If pointers are present, make sure that they are
14081         present in an unsafe context.
14082         (Constructor, Constructor.Define): ditto.
14083         (Field, Field.Define): ditto.
14084         (Property, Property.Define): ditto.
14085         (Event, Event.Define): ditto.
14086
14087         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
14088         hashtable if there are classes or structs defined.
14089
14090         * expression.cs (LocalVariableReference.DoResolve): Simplify this
14091         code, as the constant resolution moved.
14092
14093         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
14094         the metadata, so we can flag error 133. 
14095
14096         * decl.cs (MemberCore.UnsafeOK): New function to test that a
14097         pointer is being declared in an unsafe context.
14098
14099 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
14100
14101         * modifiers.cs (Modifiers.Check): Require a Location argument.
14102         Report error 227 for Unsafe use.
14103
14104         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
14105
14106         * statement.cs (For.Emit): If the test is null, then report that
14107         we do `return', as we wont reach anything afterwards.
14108
14109         (Switch.SwitchGoverningType): Track the expression that matched
14110         the conversion.
14111
14112         * driver.cs: Allow negative numbers as an error code to flag.
14113
14114         * cs-parser.jay: Handle 1551.
14115
14116         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
14117
14118 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
14119
14120         * cs-parser.jay: Report 1518 (type declaration can only contain
14121         class, struct, interface, enum or delegate)
14122
14123         (switch_label): Report 1523 (keywords `case' or `default' must
14124         preced code)
14125
14126         (opt_switch_sections): Report 1522 (empty switch)
14127
14128         * driver.cs: Report 1515 (response file specified multiple times)
14129         Report 1516 (Source file specified multiple times).
14130
14131         * expression.cs (Argument.Resolve): Signal 1510
14132
14133         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
14134         access not allowed in static code)
14135
14136 2002-01-11  Ravi Pratap  <ravi@ximian.com>
14137
14138         * typemanager.cs (IsPointerType): Utility method which we are going
14139         to need a lot.
14140
14141         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
14142         the object type, so we take care of that.
14143
14144         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
14145
14146         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
14147         added to non-params parameters :-)
14148
14149         * typemanager.cs (CSharpName): Include 'void' type too. 
14150
14151         (void_ptr_type): Include in the set of core types.
14152
14153         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
14154         duplicating code.
14155
14156         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
14157         an unsafe context.
14158
14159         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
14160         completely forgotten about it.
14161
14162 2002-01-10  Ravi Pratap  <ravi@ximian.com>
14163
14164         * cs-parser.jay (pointer_type): Add. This begins our implementation
14165         of parsing rules for unsafe code.
14166
14167         (unsafe_statement): Implement.
14168
14169         (embedded_statement): Modify to include the above.
14170
14171         * statement.cs (Unsafe): Implement new class for unsafe blocks.
14172
14173         * codegen.cs (EmitContext.InUnsafe): Add. This determines
14174         if the current context is an unsafe one.
14175
14176         * cs-parser.jay (local_variable_pointer_type): Since local variable types
14177         are handled differently, we need separate rules for them.
14178
14179         (local_variable_declaration): Update to use local_variable_pointer_type
14180         to allow variable declarations of unmanaged pointer types.
14181
14182         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
14183         in unsafe contexts.
14184
14185         * ../errors/cs0214.cs : Add.
14186
14187 2002-01-16  Nick Drochak  <ndrochak@gol.com>
14188
14189         * makefile: remove 'response' file when cleaning.
14190
14191 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
14192
14193         * cs-parser.jay: Report 1524.
14194
14195 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
14196
14197         * typemanager.cs (RegisterMethod): drop checking if we have
14198         registered this from here
14199
14200 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
14201
14202         * class.cs (Method.EmitDestructor): Implement calling our base
14203         destructor. 
14204
14205         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
14206         value of InFinally.
14207
14208         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
14209         this routine and will wrap the call in a try/catch block.  Deal
14210         with the case.
14211
14212 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
14213
14214         * ecore.cs (Expression.MemberLookup): instead of taking a
14215         parameter `same_type' that was used to tell whether we could
14216         access private members we compute our containing type from the
14217         EmitContext.
14218
14219         (FieldExpr): Added partial support for volatile fields.  This does
14220         not work for volatile fields exposed from assemblies, as I can not
14221         figure out how to extract the modreq from it.
14222
14223         Updated all the source files to use this.
14224
14225         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
14226         because it is referenced by MemberLookup very often. 
14227
14228 2002-01-09  Ravi Pratap  <ravi@ximian.com>
14229
14230         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
14231         TypeBuilder.GetCustomAttributes to retrieve what we need.
14232
14233         Get rid of redundant default_member_attr_type as this is the same as
14234         default_member_type which already exists.
14235
14236         * interface.cs, attribute.cs : Update accordingly.
14237
14238 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
14239
14240         * typemanager.cs: Enable IndexerPropertyName again.  It does not
14241         work for TYpeBuilders though.  Ravi, can you please fix this?
14242
14243         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
14244
14245         * expression.cs (Argument.Emit): Handle the case of ref objects
14246         being passed to ref functions;  
14247
14248         (ParameterReference.EmitLoad): Loads the content of the pointer
14249         without dereferencing.
14250
14251 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
14252
14253         * cs-tokenizer.cs: Implemented the pre-processing expressions.
14254
14255 2002-01-08  Ravi Pratap  <ravi@ximian.com>
14256
14257         * class.cs (Indexer.DefineMethod): Incorporate the interface
14258         type in the name of the method if we are doing explicit interface
14259         implementation.
14260
14261         * expression.cs (ConversionExists): Remove as it is completely obsolete.
14262
14263         (BetterConversion): Fix extremely trivial bug where we were referring to
14264         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
14265         again !
14266
14267         * ../errors/bug16.cs : Add although we have fixed it.
14268
14269 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
14270
14271         * expression.cs (BaseIndexer): Begin implementation.
14272
14273         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
14274
14275         * cs-parser.jay (indexer_declarator): Use qualified_identifier
14276         production directly to remove a shift/reduce, and implement
14277         explicit interface implementation.
14278
14279         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
14280         after a floating point suffix.
14281
14282         * expression.cs (DoNumericPromotions): Improved the conversion for
14283         uint/uint.  If we have a constant, we avoid doing a typecast to a
14284         larger type.
14285
14286         * class.cs (Indexer): Implement explicit interface implementation
14287         for indexers.
14288
14289 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
14290
14291         * class.cs: make the default instance constructor public and hidebysig.
14292
14293 2001-01-03  Ravi Pratap  <ravi@ximian.com>
14294
14295         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
14296         so we can call it from elsewhere.
14297
14298         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
14299         we emit it internally if the class has a defined indexer; otherwise the user
14300         emits it by decorating the class definition with the DefaultMemberAttribute.
14301
14302         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
14303         attribute is not used on a type which defines an indexer.
14304
14305         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
14306         character when we skip whitespace.
14307
14308         * ../errors/cs0646.cs : Add.
14309
14310 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
14311
14312         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
14313         again. 
14314
14315         * makefile: Add practical target `mcs3.exe' which builds the third
14316         generation compiler. 
14317
14318         * expression.cs (New): Fix structures constructor calling.
14319
14320         * class.cs (Property, Method, Indexer): Emit Final flag on the
14321         method if we are an interface implementation and we are not
14322         abstract. 
14323
14324         * ecore.cs (PropertyExpr): New public field `IsBase', tells
14325         whether this property is referencing a `base' method.
14326
14327         * expression.cs (Invocation.EmitCall): take an extra argument:
14328         is_base, this is used to determine whether the `call' or
14329         `callvirt' opcode should be used.
14330
14331
14332         * delegate.cs: update EmitCall.
14333
14334         * class.cs (Method.Define): Set NewSlot for the cases where we are
14335         not implementing an interface method.
14336
14337         (Property.Define): ditto.
14338
14339 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
14340
14341         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
14342         'r'.  Allows mcs to parse itself fully.
14343
14344 2002-01-02  Ravi Pratap  <ravi@ximian.com>
14345
14346         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
14347         of the number of initializers that require the InitializeArray method.
14348
14349         (CheckIndices): Store the Expression in all cases - not the plain value. Also
14350         update the above field where necessary.
14351
14352         (MakeByteBlob): Update accordingly.
14353
14354         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
14355         greater than 2.
14356
14357         (EmitDynamicInitializers): Update in accordance with the new optimization.
14358
14359         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
14360         same OpCode applies.
14361
14362         * cs-parser.jay : Fix some glaring errors I introduced.
14363
14364 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
14365
14366         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
14367         so that we can check for name clashes there too.
14368
14369         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
14370         for interface indexers.
14371
14372         * interfaces.cs (Define): Emit the default member attribute.
14373
14374         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
14375         variable was being referred to while setting the value ;-)
14376
14377 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
14378
14379         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
14380         byte-by-byte information when we know the data is zero.
14381
14382         Make the block always a multiple of 4, because
14383         DefineInitializedData has a bug.
14384
14385         * assign.cs: Fix, we should assign from the temporary, not from
14386         the source. 
14387
14388         * expression.cs (MakeByteBlob): Fix my incorrect code.
14389
14390 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
14391
14392         * typemanager.cs (EnumToUnderlying): This function is used to get
14393         the underlying type from an enumeration, because it does not
14394         always work. 
14395
14396         * constant.cs: Use the I4_S form for values between -128 and 127.
14397
14398         * statement.cs (Block.LookupLabel): Looks up a label.
14399         (Block): Drop support for labeled blocks.
14400
14401         (LabeledStatement): New kind of statement that represents a label
14402         only.
14403
14404         (Goto): Finally implement this bad boy.
14405
14406         * cs-parser.jay: Update to reflect new mechanism to implement
14407         labels.
14408
14409 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
14410
14411         * codegen.cs (EmitContext.This): a codegen property that keeps the
14412         a single instance of this instead of creating many different this
14413         instances. 
14414
14415         * delegate.cs (Delegate.DoResolve): Update to use the property;
14416
14417         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
14418
14419         * expression.cs (BaseAccess.DoResolve): Ditto.
14420
14421 2001-12-29  Ravi Pratap  <ravi@ximian.com>
14422
14423         * typemanager.cs (methodimpl_attr_type): Add to hold the type
14424         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
14425
14426         (InitCoreTypes): Update accordingly.
14427
14428         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
14429         so we can quickly store the state.
14430
14431         (ApplyAttributes): Set the correct implementation flags
14432         for InternalCall methods.
14433
14434 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
14435
14436         * expression.cs (EmitCall): if a method is not virtual, then do
14437         not use callvirt on it.
14438
14439         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
14440         user defined stuff) requires the use of stobj, which takes an
14441         address on the stack instead of an array and an index.  So emit
14442         the Ldelema operation for it.
14443
14444         (EmitStoreOpcode): Use stobj for valuetypes.
14445
14446         (UnaryMutator.EmitCode): Use the right 1 value depending on
14447         whether we are dealing with int64/uint64, float or doubles.
14448
14449         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
14450         constructors that I implemented last night.
14451
14452         (Constructor.IsDefault): Fix to work properly for static
14453         constructors.
14454
14455         * cs-parser.jay (CheckDef): report method signature errors.
14456         Update error number 103 to be 132.
14457
14458         * decl.cs: New AdditionResult enumeration value: MethodExists.
14459         Although we do this check for methods later on in the semantic
14460         analysis, catching repeated default constructors is so easy that
14461         we catch these here. 
14462
14463         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
14464         promotions code.
14465
14466         (ParameterReference.EmitAssign, Emit): handle
14467         bools as bytes.
14468
14469         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
14470         (ArrayAccess.EmitStoreOpcode): ditto.
14471
14472         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
14473
14474         * expression.cs (MakeByteBlob): Complete all the missing types
14475         (uint, short, ushort, byte, sbyte)
14476
14477         * class.cs: Only init instance field initializers on instance
14478         constructors. 
14479
14480         Rename `constructors' to instance_constructors. 
14481
14482         (TypeContainer.AddConstructor): Only add constructors to the list
14483         if it is not static.
14484
14485         Make sure that we handle default_static_constructor independently
14486         everywhere where we handle instance_constructors
14487
14488 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
14489
14490         * class.cs: Do not lookup or create a base initializer for a
14491         static constructor.
14492
14493         (ConstructorInitializer.Resolve): use the proper type to lookup
14494         for constructors.
14495
14496         * cs-parser.jay: Report error 1585 (modifiers between type and name).
14497
14498         * enum.cs, interface.cs: Remove CloseType, this is taken care by
14499         in DeclSpace. 
14500
14501         * decl.cs: CloseType is now an virtual method, the default
14502         implementation just closes this type.
14503
14504 2001-12-28  Ravi Pratap  <ravi@ximian.com>
14505
14506         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
14507         to PreserveSig by default. Also emit HideBySig on such methods.
14508
14509         Basically, set the defaults to standard values.
14510
14511         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
14512         argument, if candidate is better, it can't be worse than the best !
14513
14514         (Invocation): Re-write bits to differentiate between methods being
14515         applicable in their expanded form and their normal form - for params
14516         methods of course.
14517
14518         Get rid of use_standard everywhere as only standard conversions are allowed
14519         in overload resolution. 
14520
14521         More spec conformance.
14522
14523 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
14524
14525         * driver.cs: Add --timestamp, to see where the compiler spends
14526         most of its time.
14527
14528         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
14529         `this' in static code.
14530
14531         (SimpleName.DoResolve): Implement in terms of a helper function
14532         that allows static-references to be passed upstream to
14533         MemberAccess.
14534
14535         (Expression.ResolveWithSimpleName): Resolve specially simple
14536         names when called by MemberAccess to implement the special
14537         semantics. 
14538
14539         (Expression.ImplicitReferenceConversion): Handle conversions from
14540         Null to reference types before others, as Null's type is
14541         System.Object. 
14542
14543         * expression.cs (Invocation.EmitCall): Handle the special case of
14544         calling methods declared on a reference type from a ValueType
14545         (Base classes System.Object and System.Enum)
14546
14547         (MemberAccess.Resolve): Only perform lookups on Enumerations if
14548         the left hand side is a TypeExpr, not on every enumeration. 
14549
14550         (Binary.Resolve): If types are reference types, then do a cast to
14551         object on operators != and == of both arguments.
14552
14553         * typemanager.cs (FindMembers): Extract instance and static
14554         members if requested.
14555
14556         * interface.cs (PopulateProperty): Use void_type instead of null
14557         as the return type for the setter method.
14558
14559         (PopulateIndexer): ditto.
14560
14561 2001-12-27  Ravi Pratap  <ravi@ximian.com>
14562
14563         * support.cs (ReflectionParameters): Fix minor bug where we
14564         were examining the wrong parameter for the ParamArray attribute.
14565
14566         Cope with requests for the type of the parameter at position
14567         greater than the params parameter's. We now return the element
14568         type of the params array as that makes more sense.
14569
14570         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
14571         accordingly as we no longer have to extract the element type
14572         ourselves.
14573
14574         (Invocation.OverloadResolve): Update.
14575
14576 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
14577
14578         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
14579         against IEnumerator, test whether the return value is a descendant
14580         of the IEnumerator interface.
14581
14582         * class.cs (Indexer.Define): Use an auxiliary method to implement
14583         the other bits of the method definition.  Begin support for
14584         explicit interface implementation.
14585
14586         (Property.DefineMethod): Use TypeManager.void_type instead of null
14587         for an empty return value.
14588
14589 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
14590
14591         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
14592         dealing with a FieldExpr which is composed of a FieldBuilder, in
14593         the code path we did extract the constant, but we should have
14594         obtained the underlying value to be able to cast it (otherwise we
14595         end up in an infinite loop, this is what Ravi was running into).
14596
14597         (ArrayCreation.UpdateIndices): Arrays might be empty.
14598
14599         (MemberAccess.ResolveMemberAccess): Add support for section
14600         14.5.4.1 that deals with the special case of E.I when E is a type
14601         and something else, that I can be a reference to a static member.
14602
14603         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
14604         handle a particular array type to create byte blobs, it is just
14605         something we dont generate byteblobs for.
14606
14607         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
14608         arguments. 
14609
14610         * location.cs (Push): remove the key from the hashtable that we
14611         are about to add.   This happens for empty files.
14612
14613         * driver.cs: Dispose files after we have parsed them.
14614
14615         (tokenize): new function that only runs the tokenizer on its
14616         input, for speed testing.
14617
14618 2001-12-26  Ravi Pratap  <ravi@ximian.com>
14619
14620         * class.cs (Event.Define): Define the private field only if there
14621         are no accessors defined.
14622
14623         * expression.cs (ResolveMemberAccess): If there is no associated
14624         field with the event, that means we have an event defined with its
14625         own accessors and we should flag error cs0070 since transforming
14626         ourselves into a field is not valid in that case.
14627
14628         * ecore.cs (SimpleName.DoResolve): Same as above.
14629
14630         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
14631         and charset to sane values.
14632
14633 2001-12-25  Ravi Pratap  <ravi@ximian.com>
14634
14635         * assign.cs (DoResolve): Perform check on events only if they 
14636         are being accessed outside the declaring type.
14637
14638         * cs-parser.jay (event_declarations): Update rules to correctly
14639         set the type of the implicit parameter etc.
14640
14641         (add_accessor, remove_accessor): Set current local parameters.
14642
14643         * expression.cs (Binary): For delegate addition and subtraction,
14644         cast the return value from the method into the appropriate delegate
14645         type.
14646
14647 2001-12-24  Ravi Pratap  <ravi@ximian.com>
14648
14649         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
14650         of these as the workaround is unnecessary.
14651
14652         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
14653         delegate data - none of that is needed at all.
14654
14655         Re-write bits to extract the instance expression and the delegate method
14656         correctly.
14657
14658         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
14659         on delegates too.
14660
14661         * attribute.cs (ApplyAttributes): New method to take care of common tasks
14662         of attaching attributes instead of duplicating code everywhere.
14663
14664         * everywhere : Update code to do attribute emission using the above method.
14665
14666 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
14667
14668         * expression.cs (IsParamsMethodApplicable): if there are not
14669         parameters, return immediately.
14670
14671         * ecore.cs: The 0 literal can be implicity converted to an enum
14672         type. 
14673
14674         (SimpleName.DoResolve): First lookup the type, then lookup the
14675         members. 
14676
14677         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
14678         want to get its address.  If the InstanceExpression is not
14679         addressable, store the result in a temporary variable, then get
14680         the address of it.
14681
14682         * codegen.cs: Only display 219 errors on warning level or above. 
14683
14684         * expression.cs (ArrayAccess): Make it implement the
14685         IMemoryLocation interface.
14686
14687         (Binary.DoResolve): handle the operator == (object a, object b)
14688         and operator != (object a, object b) without incurring into a
14689         BoxedCast (because 5 != o should never be performed).
14690
14691         Handle binary enumerator operators.
14692
14693         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
14694         value type, otherwise use Ldelem_ref.
14695
14696         Use precomputed names;
14697
14698         (AddressOf): Implement address of
14699
14700         * cs-parser.jay (labeled_statement): Fix recursive block
14701         addition by reworking the production.
14702
14703         * expression.cs (New.DoEmit): New has a special case:
14704                 
14705                  If we are dealing with a ValueType, we have a few
14706                  situations to deal with:
14707                 
14708                     * The target of New is a ValueType variable, that is
14709                       easy, we just pass this as the variable reference
14710                 
14711                     * The target of New is being passed as an argument,
14712                       to a boxing operation or a function that takes a
14713                       ValueType.
14714                 
14715                       In this case, we need to create a temporary variable
14716                       that is the argument of New.
14717
14718
14719 2001-12-23  Ravi Pratap  <ravi@ximian.com>
14720
14721         * rootcontext.cs (LookupType): Check that current_type is not null before
14722         going about looking at nested types.
14723
14724         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
14725         not implement the IAssignMethod interface any more.
14726
14727         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
14728         where we tranform them into FieldExprs if they are being resolved from within
14729         the declaring type.
14730
14731         * ecore.cs (SimpleName.DoResolve): Do the same here.
14732
14733         * assign.cs (DoResolve, Emit): Clean up code considerably. 
14734
14735         * ../errors/bug10.cs : Add.
14736
14737         * ../errors/cs0070.cs : Add.
14738
14739         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
14740
14741         * assign.cs : Get rid of EventIsLocal everywhere.
14742
14743 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
14744
14745         * ecore.cs (ConvertIntLiteral): finished the implementation.
14746
14747         * statement.cs (SwitchLabel): Convert the value we are using as a
14748         key before looking up the table.
14749
14750 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
14751
14752         * codegen.cs (EmitTopBlock): Require a Location argument now.
14753
14754         * cs-parser.jay (constructor_declarator): We need to setup
14755         current_local_parameters before we parse the
14756         opt_constructor_initializer, to allow the variables to be bound
14757         to the constructor arguments.
14758
14759         * rootcontext.cs (LookupType): First lookup nested classes in our
14760         class and our parents before we go looking outside our class.
14761
14762         * expression.cs (ConstantFold): Extract/debox the values at the
14763         beginnning. 
14764
14765         * rootcontext.cs (EmitCode): Resolve the constants first before we
14766         resolve the types.  This is not really needed, but it helps debugging.
14767
14768         * statement.cs: report location.
14769
14770         * cs-parser.jay: pass location to throw statement.
14771
14772         * driver.cs: Small bug fix.
14773
14774         * report.cs: Updated format to be 4-zero filled digits.
14775
14776 2001-12-22  Ravi Pratap  <ravi@ximian.com>
14777
14778         * expression.cs (CheckIndices): Fix minor bug where the wrong
14779         variable was being referred to ;-)
14780
14781         (DoEmit): Do not call EmitStaticInitializers when the 
14782         underlying type is System.Object.
14783
14784 2001-12-21  Ravi Pratap  <ravi@ximian.com>
14785
14786         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
14787         and do the usual workaround for SRE.
14788
14789         * class.cs (MyEventBuilder.EventType): New member to get at the type
14790         of the event, quickly.
14791
14792         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
14793
14794         * assign.cs (Assign.DoResolve): Handle the case when the target
14795         is an EventExpr and perform the necessary checks.
14796
14797         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
14798         interface.
14799
14800         (SimpleName.MemberStaticCheck): Include check for EventExpr.
14801
14802         (EventExpr): Set the type in the constructor itself since we 
14803         are meant to be born fully resolved.
14804
14805         (EventExpr.Define): Revert code I wrote earlier.
14806                 
14807         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
14808         instance expression is null. The instance expression is a This in that case
14809         or a null, depending on whether it is a static method or not.
14810
14811         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
14812         refers to more than one method.
14813
14814         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
14815         and accordingly flag errors.
14816
14817 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
14818
14819         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
14820
14821 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
14822
14823         * location.cs (ToString): Provide useful rutine.
14824
14825 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
14826
14827         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
14828         objects, return the actual integral boxed.
14829
14830         * statement.cs (SwitchLabel): define an ILLabel for each
14831         SwitchLabel. 
14832
14833         (Switch.CheckSwitch): If the value is a Literal, extract
14834         the underlying literal.
14835
14836         Also in the unused hashtable we had, add the SwitchLabel so we can
14837         quickly look this value up.
14838
14839         * constant.cs: Implement a bunch of new constants.  Rewrite
14840         Literal based on this.  Made changes everywhere to adapt to this.
14841
14842         * expression.cs (Expression.MakeByteBlob): Optimize routine by
14843         dereferencing array only once, and also copes with enumrations.
14844
14845         bytes are two bytes wide, not one.
14846
14847         (Cast): Perform constant conversions.
14848
14849         * ecore.cs (TryImplicitIntConversion): Return literals instead of
14850         wrappers to the literals here.
14851
14852         * expression.cs (DoNumericPromotions): long literals can converted
14853         to ulong implicity (this is taken care of elsewhere, but I was
14854         missing this spot).
14855
14856         * ecore.cs (Expression.Literalize): Make the return type Literal,
14857         to improve type checking.
14858
14859         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
14860
14861 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
14862
14863         * literal.cs: Revert code from ravi that checked the bounds.  The
14864         bounds are sane by the definition of the type itself. 
14865
14866         * typemanager.cs: Fix implementation of ImplementsInterface.  We
14867         need to actually look up in our parent hierarchy for interfaces
14868         implemented. 
14869
14870         * const.cs: Use the underlying type for enumerations
14871
14872         * delegate.cs: Compute the basename for the delegate creation,
14873         that should fix the delegate test case, and restore the correct
14874         Type Lookup semantics in rootcontext
14875
14876         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
14877         referencing a nested type with the Reflection API is using the "+"
14878         sign. 
14879
14880         * cs-parser.jay: Do not require EOF token at the end.
14881
14882 2001-12-20  Ravi Pratap  <ravi@ximian.com>
14883
14884         * rootcontext.cs (LookupType): Concatenate type names with
14885         a '.' instead of a '+' The test suite passes again.
14886
14887         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
14888         field of the enumeration.
14889
14890         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
14891         the case when the member is an EventExpr.
14892
14893         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
14894         static has an associated instance expression.
14895
14896         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
14897
14898         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
14899
14900         * class.cs (Event.Define): Register event and perform appropriate checks
14901         for error #111.
14902
14903         We define the Add and Remove methods even if the use provides none because
14904         in that case, we provide default implementations ourselves.
14905
14906         Define a private field of the type of the event. This is done by the CSC compiler
14907         and we should be doing it too ;-)
14908
14909         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
14910         More methods we use in code we generate.
14911
14912         (multicast_delegate_type, delegate_type): Two separate types since the distinction
14913         is important.
14914
14915         (InitCoreTypes): Update accordingly for the above.
14916
14917         * class.cs (Event.Emit): Generate code for default accessors that we provide
14918
14919         (EmitDefaultMethod): Do the job in the above.
14920
14921         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
14922         appropriate place.
14923
14924 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
14925
14926         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
14927         builders even if we were missing one.
14928
14929         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
14930         pass the Basename as our class name instead of the Name.  The
14931         basename will be correctly composed for us.
14932
14933         * parameter.cs (Paramters): Now takes a Location argument.
14934
14935         * decl.cs (DeclSpace.LookupType): Removed convenience function and
14936         make all the code call directly LookupType in RootContext and take
14937         this chance to pass the Location information everywhere.
14938
14939         * Everywhere: pass Location information.
14940
14941 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
14942
14943         * class.cs (Constructor.Define): Updated way of detecting the
14944         length of the parameters.
14945
14946         (TypeContainer.DefineType): Use basename as the type name for
14947         nested types.
14948
14949         (TypeContainer.Define): Do not recursively define types here, as
14950         definition is taken care in order by the RootContext.
14951
14952         * tree.cs: Keep track of namespaces in a per-file basis.
14953
14954         * parameter.cs (Parameter.ComputeSignature): Update to use
14955         DeclSpace. 
14956
14957         (Parameters.GetSignature): ditto.
14958
14959         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
14960         instead of a TypeContainer.
14961
14962         (Interface.SemanticAnalysis): Use `this' instead of our parent to
14963         resolve names.  Because we need to be resolve in our context, not
14964         our parents.
14965
14966         * driver.cs: Implement response files.
14967
14968         * class.cs (TypeContainer.DefineType): If we are defined, do not
14969         redefine ourselves.
14970
14971         (Event.Emit): Emit the code for add/remove handlers.
14972         (Event.Define): Save the MethodBuilders for add/remove.
14973
14974         * typemanager.cs: Use pair here too.
14975
14976         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
14977         DictionaryEntry requires the first argument to be non-null.  
14978
14979         (enum_declaration): Compute full name for registering the
14980         enumeration.
14981
14982         (delegate_declaration): Instead of using
14983         formal_parameter_list, use opt_formal_parameter_list as the list
14984         can be empty.
14985
14986         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
14987         (EventParsing): New property that controls whether `add' and
14988         `remove' are returned as tokens or identifiers (for events);
14989
14990 2001-12-19  Ravi Pratap  <ravi@ximian.com>
14991
14992         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
14993         use MyEventBuilder only and let it wrap the real builder for us.
14994
14995         (MyEventBuilder): Revamp constructor etc.
14996
14997         Implement all operations that we perform on EventBuilder in precisely the same
14998         way here too.
14999
15000         (FindMembers): Update to use the EventBuilder member.
15001
15002         (Event.Emit): Update accordingly.
15003
15004 2001-12-18  Ravi Pratap  <ravi@ximian.com>
15005
15006         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
15007         by calling the appropriate methods.
15008
15009         (GetCustomAttributes): Make stubs as they cannot possibly do anything
15010         useful.
15011
15012         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
15013
15014 2001-12-17  Ravi Pratap  <ravi@ximian.com>
15015
15016         * delegate.cs (Delegate.Populate): Check that the return type
15017         and various parameters types are indeed accessible.
15018
15019         * class.cs (Constructor.Define): Same here.
15020
15021         (Field.Define): Ditto.
15022
15023         (Event.Define): Ditto.
15024
15025         (Operator.Define): Check that the underlying Method defined itself
15026         correctly - so it's MethodBuilder should not be null.
15027
15028         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
15029         expression happens to be null.
15030
15031         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
15032         members but as of now we don't seem to be able to do anything really useful with it.
15033
15034         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
15035         not the EventBuilder.
15036
15037 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
15038
15039         * cs-tokenizer.cs: Add support for defines.
15040         Add support for #if, #elif, #else, #endif
15041
15042         (eval_var): evaluates a variable.
15043         (eval): stubbed for evaluating functions.
15044
15045         * cs-parser.jay: Pass the defines information
15046
15047         * driver.cs: Add --define command line option.
15048
15049         * decl.cs: Move MemberCore here.
15050
15051         Make it the base class for DeclSpace.  This allows us to catch and
15052         report 108 and 109 for everything now.
15053
15054         * class.cs (TypeContainer.Define): Extract all the members
15055         before populating and emit the warning 108 (new keyword required
15056         to override) instead of having each member implement this.
15057
15058         (MemberCore.Define): New abstract method, we will be using this in
15059         the warning reporting engine in Populate.
15060
15061         (Operator.Define): Adjust to new MemberCore protocol. 
15062
15063         * const.cs (Const): This does not derive from Expression, it is a
15064         temporary object we use to create fields, it is a MemberCore. 
15065
15066         * class.cs (Method.Define): Allow the entry point to be in a
15067         specific class.
15068
15069         * driver.cs: Rewrite the argument handler to clean it up a bit.
15070
15071         * rootcontext.cs: Made it just an auxiliary namespace feature by
15072         making everything static.
15073
15074         * driver.cs: Adapt code to use RootContext type name instead of
15075         instance variable.
15076
15077         * delegate.cs: Remove RootContext argument.
15078
15079         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
15080         argument. 
15081
15082         * class.cs (Event.Define): The lookup can fail.
15083
15084         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
15085
15086         * expression.cs: Resolve the this instance before invoking the code.
15087
15088 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
15089
15090         * cs-parser.jay: Add a production in element_access that allows
15091         the thing to become a "type" reference.  This way we can parse
15092         things like "(string [])" as a type.
15093
15094         Note that this still does not handle the more complex rules of
15095         casts. 
15096
15097
15098         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
15099
15100         * ecore.cs: (CopyNewMethods): new utility function used to
15101         assemble the list of methods from running FindMembers.
15102
15103         (MemberLookup): Rework FindMembers so that 
15104
15105 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
15106
15107         * class.cs (TypeContainer): Remove Delegates who fail to be
15108         defined.
15109
15110         * delegate.cs (Populate): Verify that we dont get null return
15111         values.   TODO: Check for AsAccessible.
15112
15113         * cs-parser.jay: Use basename to emit error 574 (destructor should
15114         have the same name as container class), not the full name.
15115
15116         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
15117         possible representation.  
15118
15119         Also implements integer type suffixes U and L.
15120
15121 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
15122
15123         * expression.cs (ArrayCreation.DoResolve): We need to do the
15124         argument resolution *always*.
15125
15126         * decl.cs: Make this hold the namespace.  Hold the root context as
15127         well.
15128         (LookupType): Move here.
15129
15130         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
15131
15132         * location.cs (Row, Name): Fixed the code, it was always returning
15133         references to the first file.
15134
15135         * interface.cs: Register properties defined through interfaces.
15136
15137         * driver.cs: Add support for globbing on the command line
15138
15139         * class.cs (Field): Make it derive from MemberCore as well.
15140         (Event): ditto.
15141
15142 2001-12-15  Ravi Pratap  <ravi@ximian.com>
15143
15144         * class.cs (Event::Define): Check that the type of the event is a delegate
15145         type else flag error #66.
15146
15147         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
15148         same.
15149
15150         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
15151         values of EntryPoint, CharSet etc etc.
15152
15153         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
15154
15155         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
15156         be null and we should ignore this. I am not sure if this is really clean. Apparently,
15157         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
15158         which needs this to do its work.
15159
15160         * ../errors/cs0066.cs : Add.
15161
15162 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
15163
15164         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
15165         helper functions.
15166
15167         * class.cs: (MethodSignature.MethodSignature): Removed hack that
15168         clears out the parameters field.
15169         (MemberSignatureCompare): Cleanup
15170
15171         (MemberCore): New base class used to share code between MethodCore
15172         and Property.
15173
15174         (RegisterRequiredImplementations) BindingFlags.Public requires
15175         either BindingFlags.Instace or Static.  Use instance here.
15176
15177         (Property): Refactored code to cope better with the full spec.
15178
15179         * parameter.cs (GetParameterInfo): Return an empty array instead
15180         of null on error.
15181
15182         * class.cs (Property): Abstract or extern properties have no bodies.
15183
15184         * parameter.cs (GetParameterInfo): return a zero-sized array.
15185
15186         * class.cs (TypeContainer.MethodModifiersValid): Move all the
15187         method modifier validation to the typecontainer so we can reuse
15188         this on properties.
15189
15190         (MethodCore.ParameterTypes): return an empty sized array of types.
15191
15192         (Property.Define): Test property modifier validity.
15193
15194         Add tests for sealed/override too.
15195
15196         (Method.Emit): abstract or extern methods have no bodies.
15197
15198 2001-12-14  Ravi Pratap  <ravi@ximian.com>
15199
15200         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
15201         thing.
15202
15203         (Method::Define, ::Emit): Modify accordingly.
15204
15205         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
15206
15207         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
15208
15209         * makefile: Pass in /unsafe.
15210
15211 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
15212
15213         * class.cs (MakeKey): Kill routine.
15214
15215         * class.cs (TypeContainer.Define): Correctly define explicit
15216         method implementations (they require the full interface name plus
15217         the method name).
15218
15219         * typemanager.cs: Deply the PtrHashtable here and stop using the
15220         lame keys.  Things work so much better.
15221
15222         This of course broke everyone who depended on `RegisterMethod' to
15223         do the `test for existance' test.  This has to be done elsewhere.
15224
15225         * support.cs (PtrHashtable): A hashtable that avoid comparing with
15226         the object stupid Equals method (because, that like fails all over
15227         the place).  We still do not use it.
15228
15229         * class.cs (TypeContainer.SetRequiredInterface,
15230         TypeContainer.RequireMethods): Killed these two routines and moved
15231         all the functionality to RegisterRequiredImplementations.
15232
15233         (TypeContainer.RegisterRequiredImplementations): This routine now
15234         registers all the implementations required in an array for the
15235         interfaces and abstract methods.  We use an array of structures
15236         which can be computed ahead of time to reduce memory usage and we
15237         also assume that lookups are cheap as most classes will not
15238         implement too many interfaces.
15239
15240         We also avoid creating too many MethodSignatures.
15241
15242         (TypeContainer.IsInterfaceMethod): Update and optionally does not
15243         clear the "pending" bit if we find that there are problems with
15244         the declaration.
15245
15246         (TypeContainer.VerifyPendingMethods): Update to report errors of
15247         methods that look like implementations but are not.
15248
15249         (TypeContainer.Define): Add support for explicit interface method
15250         implementation. 
15251
15252 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
15253
15254         * typemanager.cs: Keep track of the parameters here instead of
15255         being a feature of the TypeContainer.
15256
15257         * class.cs: Drop the registration of parameters here, as
15258         InterfaceMethods are also interface declarations.
15259
15260         * delegate.cs: Register methods with the TypeManager not only with
15261         the TypeContainer.  This code was buggy.
15262
15263         * interface.cs: Full registation here.
15264
15265 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
15266
15267         * expression.cs: Remove reducer for binary expressions, it can not
15268         be done this way.
15269
15270         * const.cs: Put here the code that used to go into constant.cs
15271
15272         * constant.cs: Put here the code for constants, this is a new base
15273         class for Literals.
15274
15275         * literal.cs: Make Literal derive from Constant.
15276
15277 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
15278
15279         * statement.cs (Return.Emit): Report error 157 if the user
15280         attempts to return from a finally block.
15281
15282         (Return.Emit): Instead of emitting a return, jump to the end of
15283         the function.
15284
15285         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
15286         LocalBuilder to store the result of the function.  ReturnLabel is
15287         the target where we jump.
15288
15289
15290 2001-12-09  Radek Doulik  <rodo@ximian.com>
15291
15292         * cs-parser.jay: remember alias in current namespace
15293
15294         * ecore.cs (SimpleName::DoResolve): use aliases for types or
15295         namespaces
15296
15297         * class.cs (LookupAlias): lookup alias in my_namespace
15298
15299         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
15300         aliases hashtable
15301         (LookupAlias): lookup alias in this and if needed in parent
15302         namespaces
15303
15304 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
15305
15306         * support.cs: 
15307
15308         * rootcontext.cs: (ModuleBuilder) Made static, first step into
15309         making things static.  I need this to avoid passing the
15310         TypeContainer when calling ParameterType.
15311
15312         * support.cs (InternalParameters.ParameterType): Remove ugly hack
15313         that did string manipulation to compute the type and then call
15314         GetType.  Use Parameter.ParameterType instead.
15315
15316         * cs-tokenizer.cs: Consume the suffix for floating values.
15317
15318         * expression.cs (ParameterReference): figure out whether this is a
15319         reference parameter or not.  Kill an extra variable by computing
15320         the arg_idx during emission.
15321
15322         * parameter.cs (Parameters.GetParameterInfo): New overloaded
15323         function that returns whether a parameter is an out/ref value or not.
15324
15325         (Parameter.ParameterType): The type of the parameter (base,
15326         without ref/out applied).
15327
15328         (Parameter.Resolve): Perform resolution here.
15329         (Parameter.ExternalType): The full type (with ref/out applied).
15330
15331         * statement.cs (Using.Emit, Using.EmitExpression): Implement
15332         support for expressions on the using statement.
15333
15334 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
15335
15336         * statement.cs (Using.EmitLocalVariableDecls): Split the
15337         localvariable handling of the using statement.
15338
15339         (Block.EmitMeta): Keep track of variable count across blocks.  We
15340         were reusing slots on separate branches of blocks.
15341
15342         (Try.Emit): Emit the general code block, we were not emitting it. 
15343
15344         Check the type of the declaration to be an IDisposable or
15345         something that can be implicity converted to it. 
15346
15347         Emit conversions if required.
15348
15349         * ecore.cs (EmptyExpression): New utility class.
15350         (Expression.ImplicitConversionExists): New utility function.
15351
15352 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
15353
15354         * statement.cs (Using): Implement.
15355
15356         * expression.cs (LocalVariableReference): Support read only variables.
15357
15358         * statement.cs: Remove the explicit emit for the Leave opcode.
15359         (VariableInfo): Add a readonly field.
15360
15361 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
15362
15363         * ecore.cs (ConvCast): new class used to encapsulate the various
15364         explicit integer conversions that works in both checked and
15365         unchecked contexts.
15366
15367         (Expression.ConvertNumericExplicit): Use new ConvCast class to
15368         properly generate the overflow opcodes.
15369
15370 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
15371
15372         * statement.cs: The correct type for the EmptyExpression is the
15373         element_type, not the variable type.  Ravi pointed this out.
15374
15375 2001-12-04  Ravi Pratap  <ravi@ximian.com>
15376
15377         * class.cs (Method::Define): Handle PInvoke methods specially
15378         by using DefinePInvokeMethod instead of the usual one.
15379
15380         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
15381         above to do the task of extracting information and defining the method.
15382
15383 2001-12-04  Ravi Pratap  <ravi@ximian.com>
15384
15385         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
15386         of the condition for string type.
15387
15388         (Emit): Move that here. 
15389
15390         (ArrayCreation::CheckIndices): Keep string literals in their expression
15391         form.
15392
15393         (EmitDynamicInitializers): Handle strings appropriately.
15394
15395 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
15396
15397         * codegen.cs (EmitContext): Replace multiple variables with a
15398         single pointer to the current Switch statement.
15399
15400         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
15401         EmitContext.
15402
15403 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
15404
15405         * statement.cs 
15406
15407         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
15408         default'.
15409
15410         (Foreach.Emit): Foreach on arrays was not setting
15411         up the loop variables (for break/continue).
15412
15413         (GotoCase): Semi-implented.
15414
15415 2001-12-03  Ravi Pratap  <ravi@ximian.com>
15416
15417         * attribute.cs (CheckAttribute): Handle system attributes by using
15418         Attribute.GetAttributes to examine information we need.
15419
15420         (GetValidPlaces): Same here.
15421
15422         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
15423
15424         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
15425
15426         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
15427
15428         (Method::Define): Set appropriate flags if we have a DllImport attribute.
15429
15430         (Method::Emit): Handle the case when we are a PInvoke method.
15431
15432 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
15433
15434         * expression.cs: Use ResolveWithSimpleName on compound names.
15435
15436 2001-12-02  Ravi Pratap  <ravi@ximian.com>
15437
15438         * constant.cs (EmitConstant): Make sure we resolve the associated expression
15439         before trying to reduce it.
15440
15441         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
15442
15443         * constant.cs (LookupConstantValue): Implement.
15444
15445         (EmitConstant): Use the above in emitting the constant.
15446
15447         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
15448         that are user-defined by doing a LookupConstantValue on them.
15449
15450         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
15451         too, like above.
15452
15453 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
15454
15455         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
15456
15457         (BaseAccess.DoResolve): Implement.
15458
15459         (MemberAccess.DoResolve): Split this routine into a
15460         ResolveMemberAccess routine that can be used independently
15461
15462 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
15463
15464         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
15465         As that share bits of the implementation.  Is returns a boolean,
15466         while As returns the Type that is being probed.
15467
15468 2001-12-01  Ravi Pratap  <ravi@ximian.com>
15469
15470         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
15471         instead of a Literal - much easier.
15472
15473         (EnumInTransit): Remove - utterly useless :-)
15474
15475         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
15476
15477         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
15478
15479         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
15480         chain when we have no associated expression.
15481
15482 2001-11-30  Ravi Pratap  <ravi@ximian.com>
15483
15484         * constant.cs (Define): Use Location while reporting the errror.
15485
15486         Also emit a warning when 'new' is used and there is no inherited
15487         member to hide.
15488
15489         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
15490         populated.
15491
15492         (LookupEnumValue): Implement to lookup an enum member's value and define it
15493         if necessary.
15494
15495         (Populate): Re-write accordingly to use the above routine.
15496
15497 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
15498
15499         * expression.cs (This): Fix prototype for DoResolveLValue to
15500         override the base class DoResolveLValue.
15501
15502         * cs-parser.cs: Report errors cs574 and cs575 (destructor
15503         declarations) 
15504
15505         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
15506         (we need to load the address of the field here).  This fixes
15507         test-22. 
15508
15509         (FieldExpr.DoResolveLValue): Call the DoResolve
15510         function to initialize the Instance expression.
15511
15512         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
15513         correctly the GetEnumerator operation on a value type.
15514
15515         * cs-parser.jay: Add more simple parsing error catches.
15516
15517         * statement.cs (Switch): Add support for string switches.
15518         Handle null specially.
15519
15520         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
15521
15522 2001-11-28  Ravi Pratap  <ravi@ximian.com>
15523
15524         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
15525
15526         (declare_local_constant): New helper function.
15527
15528         * statement.cs (AddConstant): Keep a separate record of constants
15529
15530         (IsConstant): Implement to determine if a variable is a constant.
15531
15532         (GetConstantExpression): Implement.
15533
15534         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
15535
15536         * statement.cs (IsVariableDefined): Re-write.
15537
15538 2001-11-27  Ravi Pratap  <ravi@ximian.com>
15539
15540         * class.cs (TypeContainer::FindMembers): Look for constants
15541         in the case when we are looking for MemberTypes.Field
15542
15543         * expression.cs (MemberAccess::DoResolve): Check that in the
15544         case we are a FieldExpr and a Literal, we are not being accessed
15545         by an instance reference.
15546
15547         * cs-parser.jay (local_constant_declaration): Implement.
15548
15549         (declaration_statement): Implement for constant declarations.
15550
15551 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
15552
15553         * statement.cs (Switch): Catch double defaults.
15554
15555         (Switch): More work on the switch() statement
15556         implementation.  It works for integral values now, need to finish
15557         string support.
15558
15559
15560 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
15561
15562         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
15563         integer literals into other integer literals.  To be used by
15564         switch. 
15565
15566 2001-11-24  Ravi Pratap  <ravi@ximian.com>
15567
15568         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
15569         some memory.
15570
15571         (EmitDynamicInitializers): Cope with the above since we extract data
15572         directly from ArrayData now.
15573
15574         (ExpectInitializers): Keep track of whether initializers are mandatory
15575         or not.
15576
15577         (Bounds): Make it a hashtable to prevent the same dimension being 
15578         recorded for every element in that dimension.
15579
15580         (EmitDynamicInitializers): Fix bug which prevented the Set array method
15581         from being found.
15582
15583         Also fix bug which was causing the indices to be emitted in the reverse
15584         order.
15585
15586 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
15587
15588         * expression.cs (ArrayCreation): Implement the bits that Ravi left
15589         unfinished.  They do not work, because the underlying code is
15590         sloppy.
15591
15592 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15593
15594         * cs-parser.jay: Remove bogus fixme.
15595
15596         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
15597         on Switch statement.
15598
15599 2001-11-23  Ravi Pratap  <ravi@ximian.com>
15600
15601         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
15602         the same. 
15603
15604         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
15605         parameter. Apparently, any expression is allowed. 
15606
15607         (ValidateInitializers): Update accordingly.
15608
15609         (CheckIndices): Fix some tricky bugs thanks to recursion.
15610
15611         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
15612         I was being completely brain-dead.
15613
15614         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
15615         and re-write acordingly.
15616
15617         (DelegateInvocation): Re-write accordingly.
15618
15619         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
15620
15621         (MakeByteBlob): Handle types more correctly.
15622
15623         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
15624         initialization from expressions but it is incomplete because I am a complete
15625         Dodo :-|
15626
15627 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15628
15629         * statement.cs (If.Emit): Fix a bug that generated incorrect code
15630         on If.  Basically, we have to return `true' (ie, we do return to
15631         our caller) only if both branches of the if return.
15632
15633         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
15634         short-circuit operators, handle them as short circuit operators. 
15635
15636         (Cast.DoResolve): Resolve type.
15637         (Cast.Cast): Take an expression as the target type.
15638
15639         * cs-parser.jay (cast_expression): Remove old hack that only
15640         allowed a limited set of types to be handled.  Now we take a
15641         unary_expression and we resolve to a type during semantic
15642         analysis.
15643
15644         Use the grammar productions from Rhys to handle casts (this is
15645         not complete like Rhys syntax yet, we fail to handle that corner
15646         case that C# has regarding (-x), but we will get there.
15647
15648 2001-11-22  Ravi Pratap  <ravi@ximian.com>
15649
15650         * class.cs (EmitFieldInitializer): Take care of the case when we have a
15651         field which is an array type.
15652
15653         * cs-parser.jay (declare_local_variables): Support array initialization too.
15654
15655         * typemanager.cs (MakeKey): Implement.
15656
15657         (everywhere): Use the above appropriately.
15658
15659         * cs-parser.jay (for_statement): Update for array initialization while
15660         declaring variables.
15661
15662         * ecore.cs : The error message was correct, it's the variable's names that
15663         were misleading ;-) Make the code more readable.
15664
15665         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
15666         the correct type etc.
15667
15668         (ConvertExplicit): Handle Enum types by examining the underlying type.
15669
15670 2001-11-21  Ravi Pratap  <ravi@ximian.com>
15671
15672         * parameter.cs (GetCallingConvention): Always return
15673         CallingConventions.Standard for now.
15674
15675 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
15676
15677         * expression.cs (Binary.ResolveOperator): Update the values of `l'
15678         and `r' after calling DoNumericPromotions.
15679
15680         * ecore.cs: Fix error message (the types were in the wrong order).
15681
15682         * statement.cs (Foreach.ProbeCollectionType): Need to pass
15683         BindingFlags.Instance as well 
15684
15685         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
15686         implicit int literal conversion in an empty cast so that we
15687         propagate the right type upstream.
15688
15689         (UnboxCast): new class used to unbox value types.
15690         (Expression.ConvertExplicit): Add explicit type conversions done
15691         by unboxing.
15692
15693         (Expression.ImplicitNumericConversion): Oops, forgot to test for
15694         the target type before applying the implicit LongLiterals to ULong
15695         literal cast.
15696
15697 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
15698
15699         * cs-parser.jay (for_statement): Reworked the way For works: now
15700         we declare manually any variables that are introduced in
15701         for_initializer to solve the problem of having out-of-band code
15702         emition (that is what got for broken).
15703
15704         (declaration_statement): Perform the actual variable declaration
15705         that used to be done in local_variable_declaration here.
15706
15707         (local_variable_declaration): Do not declare anything, just pass
15708         the information on a DictionaryEntry
15709
15710 2001-11-20  Ravi Pratap  <ravi@ximian.com>
15711
15712         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
15713         re-write of the logic to now make it recursive.
15714
15715         (UpdateIndices): Re-write accordingly.
15716
15717         Store element data in a separate ArrayData list in the above methods.
15718
15719         (MakeByteBlob): Implement to dump the array data into a byte array.
15720
15721 2001-11-19  Ravi Pratap  <ravi@ximian.com>
15722
15723         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
15724         into CheckIndices.
15725
15726         * constant.cs (Define): Implement.
15727
15728         (EmitConstant): Re-write fully.
15729
15730         Pass in location info.
15731
15732         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
15733         respectively.
15734
15735         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
15736         DictionaryEntry since we need location info too.
15737
15738         (constant_declaration): Update accordingly.
15739
15740         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
15741         code into another method : UpdateIndices.
15742
15743 2001-11-18  Ravi Pratap  <ravi@ximian.com>
15744
15745         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
15746         some type checking etc.
15747
15748 2001-11-17  Ravi Pratap  <ravi@ximian.com>
15749
15750         * expression.cs (ArrayCreation::ValidateInitializers): Implement
15751         bits to provide dimension info if the user skips doing that.
15752
15753         Update second constructor to store the rank correctly.
15754
15755 2001-11-16  Ravi Pratap  <ravi@ximian.com>
15756
15757         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
15758         and try to implement.
15759
15760         * ../errors/cs0150.cs : Add.
15761
15762         * ../errors/cs0178.cs : Add.
15763
15764 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
15765
15766         * statement.cs: Implement foreach on multi-dimensional arrays. 
15767
15768         * parameter.cs (Parameters.GetParameterByName): Also lookup the
15769         name of the params argument.
15770
15771         * expression.cs: Use EmitStoreOpcode to get the right opcode while
15772         initializing the array.
15773
15774         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
15775         we can use this elsewhere.
15776
15777         * statement.cs: Finish implementation of foreach for single
15778         dimension arrays.
15779
15780         * cs-parser.jay: Use an out-of-band stack to pass information
15781         around, I wonder why I need this.
15782
15783         foreach_block: Make the new foreach_block the current_block.
15784
15785         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
15786         function used to return a static Parameters structure.  Used for
15787         empty parameters, as those are created very frequently.
15788
15789         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
15790
15791 2001-11-15  Ravi Pratap  <ravi@ximian.com>
15792
15793         * interface.cs : Default modifier is private, not public. The
15794         make verify test passes again.
15795
15796 2001-11-15  Ravi Pratap  <ravi@ximian.com>
15797
15798         * support.cs (ReflectionParameters): Fix logic to determine
15799         whether the last parameter is a params one. Test 9 passes again.
15800
15801         * delegate.cs (Populate): Register the builders we define with
15802         RegisterParameterForBuilder. Test 19 passes again.
15803
15804         * cs-parser.jay (property_declaration): Reference $6 instead
15805         of $$ to get at the location.
15806
15807         (indexer_declaration): Similar stuff.
15808
15809         (attribute): Ditto.
15810
15811         * class.cs (Property): Register parameters for the Get and Set methods
15812         if they exist. Test 23 passes again.
15813
15814         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
15815         call to EmitArguments as we are sure there aren't any params arguments. 
15816         Test 32 passes again.
15817
15818         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
15819         IndexOutOfRangeException. 
15820
15821         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
15822         Test 33 now passes again.
15823
15824 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
15825
15826         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
15827         broke a bunch of things.  Will have to come up with a better way
15828         of tracking locations.
15829
15830         * statement.cs: Implemented foreach for single dimension arrays.
15831
15832 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
15833
15834         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
15835         an error.  This removes the lookup from the critical path.
15836
15837         * cs-parser.jay: Removed use of temporary_loc, which is completely
15838         broken. 
15839
15840 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
15841
15842         * support.cs (ReflectionParameters.ParameterModifier): Report
15843         whether the argument is a PARAMS argument or not.
15844
15845         * class.cs: Set the attribute `ParamArrayAttribute' on the
15846         parameter argument.
15847
15848         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
15849         and cons_param_array_attribute (ConstructorInfo for
15850         ParamArrayAttribute)., 
15851
15852         * codegen.cs: Emit the return using the `Return' statement, that
15853         way we can report the error correctly for missing return values. 
15854
15855         * class.cs (Method.Emit): Clean up.
15856
15857         * expression.cs (Argument.Resolve): Take another argument: the
15858         location where this argument is used.  Notice that this is not
15859         part of the "Argument" class as to reduce the size of the
15860         structure (we know the approximate location anyways).
15861
15862         Test if the argument is a variable-reference, if not, then
15863         complain with a 206.
15864
15865         (Argument.Emit): Emit addresses of variables.
15866
15867         (Argument.FullDesc): Simplify.
15868
15869         (Invocation.DoResolve): Update for Argument.Resolve.
15870
15871         (ElementAccess.DoResolve): ditto.
15872
15873         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
15874         method should be virtual, as this method is always virtual.
15875
15876         (NewDelegate.DoResolve): Update for Argument.Resolve.
15877
15878         * class.cs (ConstructorInitializer.DoResolve): ditto.
15879
15880         * attribute.cs (Attribute.Resolve): ditto.
15881
15882 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
15883
15884         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
15885
15886         * expression.cs (ParameterReference): Drop IStackStorage and implement
15887         IAssignMethod instead. 
15888
15889         (LocalVariableReference): ditto.
15890
15891         * ecore.cs (FieldExpr): Drop IStackStorage and implement
15892         IAssignMethod instead. 
15893
15894 2001-11-13  Miguel de Icaza <miguel@ximian.com>
15895
15896         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
15897         enumerations that are used in heavily used structures derive from
15898         byte in a laughable and pathetic attempt to reduce memory usage.
15899         This is the kind of pre-optimzations that you should not do at
15900         home without adult supervision.
15901
15902         * expression.cs (UnaryMutator): New class, used to handle ++ and
15903         -- separatedly from the other unary operators.  Cleans up the
15904         code, and kills the ExpressionStatement dependency in Unary.
15905
15906         (Unary): Removed `method' and `Arguments' from this class, making
15907         it smaller, and moving it all to SimpleCall, so I can reuse this
15908         code in other locations and avoid creating a lot of transient data
15909         strucutres when not required.
15910
15911         * cs-parser.jay: Adjust for new changes.
15912
15913 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
15914
15915         * enum.cs (Enum.Populate): If there is a failure during
15916         definition, return
15917
15918         * cs-parser.jay (opt_enum_base): we used to catch type errors
15919         here, but this is really incorrect.  The type error should be
15920         catched during semantic analysis.
15921
15922 2001-12-11  Ravi Pratap  <ravi@ximian.com>
15923
15924         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
15925         current_local_parameters as expected since I, in my stupidity, had forgotten
15926         to do this :-)
15927
15928         * attribute.cs (GetValidPlaces): Fix stupid bug.
15929
15930         * class.cs (Method::Emit): Perform check on applicability of attributes.
15931
15932         (Constructor::Emit): Ditto.
15933
15934         (Field::Emit): Ditto.
15935
15936         (Field.Location): Store location information.
15937
15938         (Property, Event, Indexer, Operator): Ditto.
15939
15940         * cs-parser.jay (field_declaration): Pass in location for each field.
15941
15942         * ../errors/cs0592.cs : Add.
15943
15944 2001-11-12  Ravi Pratap  <ravi@ximian.com>
15945
15946         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
15947
15948         (InitCoreTypes): Update accordingly.
15949
15950         (RegisterAttrType, LookupAttr): Implement.
15951
15952         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
15953         info about the same.
15954
15955         (Resolve): Update to populate the above as necessary.
15956
15957         (Error592): Helper.
15958
15959         (GetValidPlaces): Helper to the above.
15960
15961         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
15962
15963         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
15964
15965 2001-11-12  Ravi Pratap  <ravi@ximian.com>
15966
15967         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
15968
15969         * ../errors/cs0617.cs : Add.
15970
15971 2001-11-11  Ravi Pratap  <ravi@ximian.com>
15972
15973         * enum.cs (Emit): Rename to Populate to be more consistent with what
15974         we expect it to do and when exactly it is called.
15975
15976         * class.cs, rootcontext.cs : Update accordingly.
15977
15978         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
15979         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
15980
15981         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
15982
15983         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
15984         of a fieldinfo using the above, when dealing with a FieldBuilder.
15985
15986 2001-11-10  Ravi Pratap  <ravi@ximian.com>
15987
15988         * ../errors/cs0031.cs : Add.
15989
15990         * ../errors/cs1008.cs : Add.
15991
15992         * ../errrors/cs0543.cs : Add.
15993
15994         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
15995         enum type.
15996
15997         (FindMembers): Implement.
15998
15999         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
16000         enums and delegates too.
16001
16002         (enum_types): Rename to builder_to_enum.
16003
16004         (delegate_types): Rename to builder_to_delegate.
16005
16006         * delegate.cs (FindMembers): Implement.
16007
16008 2001-11-09  Ravi Pratap  <ravi@ximian.com>
16009
16010         * typemanager.cs (IsEnumType): Implement.
16011
16012         * enum.cs (Emit): Re-write parts to account for the underlying type
16013         better and perform checking etc.
16014
16015         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
16016         of the underlying type.
16017
16018         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
16019         value
16020
16021         * enum.cs (error31): Helper to report error #31.
16022
16023         * cs-parser.jay (enum_declaration): Store location of each member too.
16024
16025         * enum.cs (member_to_location): New hashtable. 
16026
16027         (AddEnumMember): Update location hashtable.
16028
16029         (Emit): Use the location of each member while reporting errors.
16030
16031 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
16032
16033         * cs-parser.jay: A for_initializer if is a
16034         local_variable_declaration really ammount to have an implicit
16035         block with the variable declaration and no initializer for for.
16036
16037         * statement.cs (For.Emit): Cope with null initializers.
16038
16039         This fixes the infinite loop on for initializers.
16040
16041 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
16042
16043         * enum.cs: More cleanup.
16044
16045         * ecore.cs: Remove dead code.
16046
16047         * class.cs (Property.Emit): More simplification.
16048         (Event.Emit): ditto.
16049
16050         Reworked to have less levels of indentation.
16051
16052 2001-11-08  Ravi Pratap  <ravi@ximian.com>
16053
16054         * class.cs (Property): Emit attributes.
16055
16056         (Field): Ditto.
16057
16058         (Event): Ditto.
16059
16060         (Indexer): Ditto.
16061
16062         (Operator): Ditto.
16063
16064         * enum.cs (Emit): Ditto.
16065
16066         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
16067         Enums too.
16068
16069         * class.cs (Field, Event, etc.): Move attribute generation into the
16070         Emit method everywhere.
16071
16072         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
16073         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
16074         as we had no way of defining nested enums !
16075
16076         * rootcontext.cs : Adjust code accordingly.
16077
16078         * typemanager.cs (AddEnumType): To keep track of enum types separately.
16079
16080 2001-11-07  Ravi Pratap  <ravi@ximian.com>
16081
16082         * expression.cs (EvalConstantExpression): Move into ecore.cs
16083
16084         * enum.cs (Enum): Rename some members and make them public and readonly
16085         according to our convention.
16086
16087         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
16088         nothing else.
16089
16090         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
16091
16092         (Enum::Emit): Write a simple version for now which doesn't try to compute
16093         expressions. I shall modify this to be more robust in just a while.
16094
16095         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
16096
16097         (TypeContainer::CloseType): Create the Enum types too.
16098
16099         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
16100
16101         * expression.cs (EvalConstantExpression): Get rid of completely.
16102
16103         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
16104         user-defined values and other cases.
16105
16106         (IsValidEnumLiteral): Helper function.
16107
16108         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
16109         out there in the case we had a literal FieldExpr.
16110
16111         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
16112
16113         (Literalize): Revamp a bit to take two arguments.
16114
16115         (EnumLiteral): New class which derives from Literal to wrap enum literals.
16116
16117 2001-11-06  Ravi Pratap  <ravi@ximian.com>
16118
16119         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
16120
16121         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
16122
16123         (Resolve): Use the above to ensure we have proper initializers.
16124
16125 2001-11-05  Ravi Pratap  <ravi@ximian.com>
16126
16127         * expression.cs (Expression::EvalConstantExpression): New method to 
16128         evaluate constant expressions.
16129
16130         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
16131
16132 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
16133
16134         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
16135         in an array.
16136
16137         (Binary.ResolveOperator): Handle operator != (object a, object b)
16138         and operator == (object a, object b);
16139
16140         (Binary.DoNumericPromotions): Indicate whether the numeric
16141         promotion was possible.
16142
16143         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
16144         Implement.  
16145
16146         Made the ArrayAccess implement interface IAssignMethod instead of
16147         IStackStore as the order in which arguments are passed reflects
16148         this.
16149
16150         * assign.cs: Instead of using expr.ExprClass to select the way of
16151         assinging, probe for the IStackStore/IAssignMethod interfaces.
16152
16153         * typemanager.cs: Load InitializeArray definition.
16154
16155         * rootcontext.cs (RootContext.MakeStaticData): Used to define
16156         static data that can be used to initialize arrays. 
16157
16158 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
16159
16160         * expression.cs: Handle operator== and operator!= for booleans.
16161
16162         (Conditioal.Reduce): Implement reducer for the ?: operator.
16163
16164         (Conditional.Resolve): Implement dead code elimination.
16165
16166         (Binary.Resolve): Catch string literals and return a new
16167         concatenated string.
16168
16169         (Unary.Reduce): Implement reduction of unary expressions.
16170
16171         * ecore.cs: Split out the expression core handling here.
16172
16173         (Expression.Reduce): New method used to perform constant folding
16174         and CSE.  This is needed to support constant-expressions. 
16175
16176         * statement.cs (Statement.EmitBoolExpression): Pass true and false
16177         targets, and optimize for !x.
16178
16179 2001-11-04  Ravi Pratap  <ravi@ximian.com>
16180
16181         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
16182         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
16183         set custom atttributes.
16184
16185         * literal.cs (Literal::GetValue): New abstract method to return the actual
16186         value of the literal, cast as an object.
16187
16188         (*Literal): Implement GetValue method.
16189
16190         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
16191         expressions to the arraylist but objects of type Argument.
16192
16193         * class.cs (TypeContainer::Emit): Emit our attributes too.
16194
16195         (Method::Emit, Constructor::Emit): Ditto.
16196
16197         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
16198         to be ignoring earlier.
16199
16200 2001-11-03  Ravi Pratap  <ravi@ximian.com>
16201
16202         * attribute.cs (AttributeSection::Define): Implement to do the business
16203         of constructing a CustomAttributeBuilder.
16204
16205         (Attribute): New trivial class. Increases readability of code.  
16206
16207         * cs-parser.jay : Update accordingly.
16208
16209         (positional_argument_list, named_argument_list, named_argument): New rules
16210
16211         (attribute_arguments): Use the above so that we are more correct.
16212
16213 2001-11-02  Ravi Pratap  <ravi@ximian.com>
16214
16215         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
16216         to perform all checks for a method with a params parameter.
16217
16218         (Invocation::OverloadResolve): Update to use the above method and therefore
16219         cope correctly with params method invocations.
16220
16221         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
16222         params too.
16223
16224         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
16225         constructors in our parent too because we can't afford to miss out on 
16226         protected ones ;-)
16227
16228         * attribute.cs (AttributeSection): New name for the class Attribute
16229
16230         Other trivial changes to improve readability.
16231
16232         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
16233         use the new class names.
16234
16235 2001-11-01  Ravi Pratap  <ravi@ximian.com>
16236
16237         * class.cs (Method::Define): Complete definition for params types too
16238
16239         (Indexer::Define): Ditto.
16240
16241         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
16242         Cope everywhere with a request for info about the array parameter.
16243
16244 2001-11-01  Ravi Pratap  <ravi@ximian.com>
16245
16246         * tree.cs (RecordNamespace): Fix up to check for the correct key.
16247
16248         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
16249         local_variable_type to extract the string corresponding to the type.
16250
16251         (local_variable_type): Fixup the action to use the new helper method.
16252
16253         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
16254         go.
16255
16256         * expression.cs : Clean out code which uses the above.
16257
16258 2001-10-31  Ravi Pratap  <ravi@ximian.com>
16259
16260         * typemanager.cs (RegisterMethod): Check if we already have an existing key
16261         and bale out if necessary by returning a false.
16262
16263         (RegisterProperty): Ditto.
16264
16265         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
16266         and print out appropriate error messages.
16267
16268         * interface.cs (everywhere): Ditto.
16269
16270         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
16271         location to constructor.
16272
16273         * class.cs (Property, Event, Indexer): Update accordingly.
16274
16275         * ../errors/cs111.cs : Added.
16276
16277         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
16278         of a method, as laid down by the spec.
16279
16280         (Invocation::OverloadResolve): Use the above method.
16281
16282 2001-10-31  Ravi Pratap  <ravi@ximian.com>
16283
16284         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
16285         now take a TypeContainer and a Parameters object.
16286
16287         (ParameterData): Modify return type of ParameterModifier method to be 
16288         Parameter.Modifier and not a string.
16289
16290         (ReflectionParameters, InternalParameters): Update accordingly.
16291
16292         * expression.cs (Argument::GetParameterModifier): Same here.
16293
16294         * support.cs (InternalParameters::ParameterType): Find a better way of determining
16295         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
16296         symbol in it at all so maybe this is only for now.
16297
16298 2001-10-30  Ravi Pratap  <ravi@ximian.com>
16299
16300         * support.cs (InternalParameters): Constructor now takes an extra argument 
16301         which is the actual Parameters class.
16302
16303         (ParameterDesc): Update to provide info on ref/out modifiers.
16304
16305         * class.cs (everywhere): Update call to InternalParameters to pass in
16306         the second argument too.
16307
16308         * support.cs (ParameterData): Add ParameterModifier, which is a method 
16309         to return the modifier info [ref/out etc]
16310
16311         (InternalParameters, ReflectionParameters): Implement the above.
16312
16313         * expression.cs (Argument::ParameterModifier): Similar function to return
16314         info about the argument's modifiers.
16315
16316         (Invocation::OverloadResolve): Update to take into account matching modifiers 
16317         too.
16318
16319         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
16320         a new SetFormalParameters object which we pass to InternalParameters.
16321
16322 2001-10-30  Ravi Pratap  <ravi@ximian.com>
16323
16324         * expression.cs (NewArray): Merge into the ArrayCreation class.
16325
16326 2001-10-29  Ravi Pratap  <ravi@ximian.com>
16327
16328         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
16329         NewUserdefinedArray into one as there wasn't much of a use in having
16330         two separate ones.
16331
16332         * expression.cs (Argument): Change field's name to ArgType from Type.
16333
16334         (Type): New readonly property which returns the proper type, taking into 
16335         account ref/out modifiers.
16336
16337         (everywhere): Adjust code accordingly for the above.
16338
16339         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
16340         whether we are emitting for a ref or out parameter.
16341
16342         * expression.cs (Argument::Emit): Use the above field to set the state.
16343
16344         (LocalVariableReference::Emit): Update to honour the flag and emit the
16345         right stuff.
16346
16347         * parameter.cs (Attributes): Set the correct flags for ref parameters.
16348
16349         * expression.cs (Argument::FullDesc): New function to provide a full desc.
16350
16351         * support.cs (ParameterData): Add method ParameterDesc to the interface.
16352
16353         (ReflectionParameters, InternalParameters): Implement the above method.
16354
16355         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
16356         reporting errors.
16357
16358         (Invocation::FullMethodDesc): Ditto. 
16359
16360 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
16361
16362         * cs-parser.jay: Add extra production for the second form of array
16363         creation. 
16364
16365         * expression.cs (ArrayCreation): Update to reflect the above
16366         change. 
16367
16368         * Small changes to prepare for Array initialization.
16369
16370 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
16371
16372         * typemanager.cs (ImplementsInterface): interface might be null;
16373         Deal with this problem;
16374
16375         Also, we do store negative hits on the cache (null values), so use
16376         this instead of calling t.GetInterfaces on the type everytime.
16377
16378 2001-10-28  Ravi Pratap  <ravi@ximian.com>
16379
16380         * typemanager.cs (IsBuiltinType): New method to help determine the same.
16381
16382         * expression.cs (New::DoResolve): Get rid of array creation code and instead
16383         split functionality out into different classes.
16384
16385         (New::FormArrayType): Move into NewBuiltinArray.
16386
16387         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
16388         quite useless.
16389
16390         (NewBuiltinArray): New class to handle creation of built-in arrays.
16391
16392         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
16393         account creation of one-dimensional arrays.
16394
16395         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
16396
16397         (NewUserdefinedArray::DoResolve): Implement.
16398
16399         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
16400
16401         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
16402         we maintain inside the TypeManager. This is necessary to perform lookups on the
16403         module builder.
16404
16405         (LookupType): Update to perform GetType on the module builders too.     
16406
16407         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
16408
16409         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
16410
16411 2001-10-23  Ravi Pratap  <ravi@ximian.com>
16412
16413         * expression.cs (New::DoResolve): Implement guts of array creation.
16414
16415         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
16416
16417 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
16418
16419         * expression.cs: Fix bug I introduced lsat night that broke
16420         Delegates. 
16421
16422         (Expression.Resolve): Report a 246 error (can not resolve name)
16423         if we find a SimpleName in the stream.
16424
16425         (Expression.ResolveLValue): Ditto.
16426
16427         (Expression.ResolveWithSimpleName): This function is a variant of
16428         ResolveName, this one allows SimpleNames to be returned without a
16429         warning.  The only consumer of SimpleNames is MemberAccess
16430
16431 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
16432
16433         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
16434         might arrive here.  I have my doubts that this is correct.
16435
16436         * statement.cs (Lock): Implement lock statement.
16437
16438         * cs-parser.jay: Small fixes to support `lock' and `using'
16439
16440         * cs-tokenizer.cs: Remove extra space
16441
16442         * driver.cs: New flag --checked, allows to turn on integer math
16443         checking. 
16444
16445         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
16446         Threading.Monitor.Exit 
16447
16448 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
16449
16450         * expression.cs (IndexerAccess::DoResolveLValue): Set the
16451         Expression Class to be IndexerAccess.
16452
16453         Notice that Indexer::DoResolve sets the eclass to Value.
16454
16455 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
16456
16457         * class.cs (TypeContainer::Emit): Emit code for indexers.
16458
16459         * assign.cs (IAssignMethod): New interface implemented by Indexers
16460         and Properties for handling assignment.
16461
16462         (Assign::Emit): Simplify and reuse code. 
16463
16464         * expression.cs (IndexerAccess, PropertyExpr): Implement
16465         IAssignMethod, clean up old code. 
16466
16467 2001-10-22  Ravi Pratap  <ravi@ximian.com>
16468
16469         * typemanager.cs (ImplementsInterface): New method to determine if a type
16470         implements a given interface. Provides a nice cache too.
16471
16472         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
16473         method.
16474
16475         (ConvertReferenceExplicit): Ditto.
16476
16477         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
16478         various methods, with correct names etc.
16479
16480         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
16481         Operator.UnaryNegation.
16482
16483         * cs-parser.jay (operator_declarator): Be a little clever in the case where
16484         we have a unary plus or minus operator.
16485
16486         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
16487         UnaryMinus.
16488
16489         * everywhere : update accordingly.
16490
16491         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
16492         respectively.
16493
16494         * class.cs (Method::Define): For the case where we are implementing a method
16495         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
16496         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
16497
16498 2001-10-21  Ravi Pratap  <ravi@ximian.com>
16499
16500         * interface.cs (FindMembers): Implement to work around S.R.E
16501         lameness.
16502
16503         * typemanager.cs (IsInterfaceType): Implement.
16504
16505         (FindMembers): Update to handle interface types too.
16506
16507         * expression.cs (ImplicitReferenceConversion): Re-write bits which
16508         use IsAssignableFrom as that is not correct - it doesn't work.
16509
16510         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
16511         and accordingly override EmitStatement.
16512
16513         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
16514         using the correct logic :-)
16515
16516 2001-10-19  Ravi Pratap  <ravi@ximian.com>
16517
16518         * ../errors/cs-11.cs : Add to demonstrate error -11 
16519
16520 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
16521
16522         * assign.cs (Assign::Resolve): Resolve right hand side first, and
16523         then pass this as a hint to ResolveLValue.
16524
16525         * expression.cs (FieldExpr): Add Location information
16526
16527         (FieldExpr::LValueResolve): Report assignment to readonly
16528         variable. 
16529
16530         (Expression::ExprClassFromMemberInfo): Pass location information.
16531
16532         (Expression::ResolveLValue): Add new method that resolves an
16533         LValue. 
16534
16535         (Expression::DoResolveLValue): Default invocation calls
16536         DoResolve. 
16537
16538         (Indexers): New class used to keep track of indexers in a given
16539         Type. 
16540
16541         (IStackStore): Renamed from LValue, as it did not really describe
16542         what this did.  Also ResolveLValue is gone from this interface and
16543         now is part of Expression.
16544
16545         (ElementAccess): Depending on the element access type
16546
16547         * typemanager.cs: Add `indexer_name_type' as a Core type
16548         (System.Runtime.CompilerServices.IndexerNameAttribute)
16549
16550         * statement.cs (Goto): Take a location.
16551
16552 2001-10-18  Ravi Pratap  <ravi@ximian.com>
16553
16554         * delegate.cs (Delegate::VerifyDelegate): New method to verify
16555         if two delegates are compatible.
16556
16557         (NewDelegate::DoResolve): Update to take care of the case when
16558         we instantiate a delegate from another delegate.
16559
16560         * typemanager.cs (FindMembers): Don't even try to look up members
16561         of Delegate types for now.
16562
16563 2001-10-18  Ravi Pratap  <ravi@ximian.com>
16564
16565         * delegate.cs (NewDelegate): New class to take care of delegate
16566         instantiation.
16567
16568         * expression.cs (New): Split the delegate related code out into 
16569         the NewDelegate class.
16570
16571         * delegate.cs (DelegateInvocation): New class to handle delegate 
16572         invocation.
16573
16574         * expression.cs (Invocation): Split out delegate related code into
16575         the DelegateInvocation class.
16576
16577 2001-10-17  Ravi Pratap  <ravi@ximian.com>
16578
16579         * expression.cs (New::DoResolve): Implement delegate creation fully
16580         and according to the spec.
16581
16582         (New::DoEmit): Update to handle delegates differently.
16583
16584         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
16585         because of which we were printing out arguments in reverse order !
16586
16587         * delegate.cs (VerifyMethod): Implement to check if the given method
16588         matches the delegate.
16589
16590         (FullDelegateDesc): Implement.
16591
16592         (VerifyApplicability): Implement.
16593
16594         * expression.cs (Invocation::DoResolve): Update to accordingly handle
16595         delegate invocations too.
16596
16597         (Invocation::Emit): Ditto.
16598
16599         * ../errors/cs1593.cs : Added.
16600
16601         * ../errors/cs1594.cs : Added.
16602
16603         * delegate.cs (InstanceExpression, TargetMethod): New properties.
16604
16605 2001-10-16  Ravi Pratap  <ravi@ximian.com>
16606
16607         * typemanager.cs (intptr_type): Core type for System.IntPtr
16608
16609         (InitCoreTypes): Update for the same.
16610
16611         (iasyncresult_type, asynccallback_type): Ditto.
16612
16613         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
16614         correct.
16615
16616         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
16617         too.
16618
16619         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
16620         the builders for the 4 members of a delegate type :-)
16621
16622         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
16623         type.
16624
16625         * expression.cs (New::DoResolve): Implement guts for delegate creation.
16626
16627         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
16628
16629 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
16630
16631         * statement.cs (Break::Emit): Implement.   
16632         (Continue::Emit): Implement.
16633
16634         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16635         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16636         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
16637         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
16638         end loop
16639
16640         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
16641         properties that track the label for the current loop (begin of the
16642         loop and end of the loop).
16643
16644 2001-10-15  Ravi Pratap  <ravi@ximian.com>
16645
16646         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
16647         use of emitting anything at all.
16648
16649         * class.cs, rootcontext.cs : Get rid of calls to the same.
16650
16651         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
16652
16653         (Populate): Define the constructor correctly and set the implementation
16654         attributes.
16655
16656         * typemanager.cs (delegate_types): New hashtable to hold delegates that
16657         have been defined.
16658
16659         (AddDelegateType): Implement.
16660
16661         (IsDelegateType): Implement helper method.
16662
16663         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
16664
16665         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
16666         and accordingly handle it.
16667
16668         * delegate.cs (Populate): Take TypeContainer argument.
16669         Implement bits to define the Invoke method. However, I still haven't figured out
16670         how to take care of the native int bit :-(
16671
16672         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
16673         Qualify the name of the delegate, not its return type !
16674
16675         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
16676         conversion.
16677
16678         (StandardConversionExists): Checking for array types turns out to be recursive.
16679
16680         (ConvertReferenceExplicit): Implement array conversion.
16681
16682         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
16683
16684 2001-10-12  Ravi Pratap  <ravi@ximian.com>
16685
16686         * cs-parser.jay (delegate_declaration): Store the fully qualified
16687         name as it is a type declaration.
16688
16689         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
16690         readonly.
16691
16692         (DefineDelegate): Renamed from Define. Does the same thing essentially,
16693         as TypeContainer::DefineType.
16694
16695         (Populate): Method in which all the definition of the various methods (Invoke)
16696         etc is done.
16697
16698         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
16699         see.
16700
16701         (CloseDelegate): Finally creates the delegate.
16702
16703         * class.cs (TypeContainer::DefineType): Update to define delegates.
16704         (Populate, Emit and CloseType): Do the same thing here too.
16705
16706         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
16707         delegates in all these operations.
16708
16709 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
16710
16711         * expression.cs: LocalTemporary: a new expression used to
16712         reference a temporary that has been created.
16713
16714         * assign.cs: Handle PropertyAccess back here, so that we can
16715         provide the proper semantic access to properties.
16716
16717         * expression.cs (Expression::ConvertReferenceExplicit): Implement
16718         a few more explicit conversions. 
16719
16720         * modifiers.cs: `NEW' modifier maps to HideBySig.
16721
16722         * expression.cs (PropertyExpr): Make this into an
16723         ExpressionStatement, and support the EmitStatement code path. 
16724
16725         Perform get/set error checking, clean up the interface.
16726
16727         * assign.cs: recognize PropertyExprs as targets, and if so, turn
16728         them into toplevel access objects.
16729
16730 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
16731
16732         * expression.cs: PropertyExpr::PropertyExpr: use work around the
16733         SRE.
16734
16735         * typemanager.cs: Keep track here of our PropertyBuilders again to
16736         work around lameness in SRE.
16737
16738 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
16739
16740         * expression.cs (LValue::LValueResolve): New method in the
16741         interface, used to perform a second resolution pass for LValues. 
16742
16743         (This::DoResolve): Catch the use of this in static methods.
16744
16745         (This::LValueResolve): Implement.
16746
16747         (This::Store): Remove warning, assigning to `this' in structures
16748         is 
16749
16750         (Invocation::Emit): Deal with invocation of
16751         methods on value types.  We need to pass the address to structure
16752         methods rather than the object itself.  (The equivalent code to
16753         emit "this" for structures leaves the entire structure on the
16754         stack instead of a pointer to it). 
16755
16756         (ParameterReference::DoResolve): Compute the real index for the
16757         argument based on whether the method takes or not a `this' pointer
16758         (ie, the method is static).
16759
16760         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
16761         value types returned from functions when we need to invoke a
16762         method on the sturcture.
16763
16764
16765 2001-10-11  Ravi Pratap  <ravi@ximian.com>
16766
16767         * class.cs (TypeContainer::DefineType): Method to actually do the business of
16768         defining the type in the Modulebuilder or Typebuilder. This is to take
16769         care of nested types which need to be defined on the TypeBuilder using
16770         DefineNestedMethod.
16771
16772         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
16773         methods in RootContext, only ported to be part of TypeContainer.
16774
16775         (TypeContainer::GetInterfaceOrClass): Ditto.
16776
16777         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
16778
16779         * interface.cs (Interface::DefineInterface): New method. Does exactly
16780         what RootContext.CreateInterface did earlier, only it takes care of nested types 
16781         too.
16782
16783         (Interface::GetInterfaces): Move from RootContext here and port.
16784
16785         (Interface::GetInterfaceByName): Same here.
16786
16787         * rootcontext.cs (ResolveTree): Re-write.
16788
16789         (PopulateTypes): Re-write.
16790
16791         * class.cs (TypeContainer::Populate): Populate nested types too.
16792         (TypeContainer::Emit): Emit nested members too.
16793
16794         * typemanager.cs (AddUserType): Do not make use of the FullName property,
16795         instead just use the name argument passed in as it is already fully
16796         qualified.
16797
16798         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
16799         to TypeContainer mapping to see if a type is user-defined.
16800
16801         * class.cs (TypeContainer::CloseType): Implement. 
16802
16803         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
16804         the default constructor.
16805
16806         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
16807         twice.
16808
16809         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
16810
16811         * interface.cs (CloseType): Create the type here.
16812
16813         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
16814         the hierarchy.
16815
16816         Remove all the methods which are now in TypeContainer.
16817
16818 2001-10-10  Ravi Pratap  <ravi@ximian.com>
16819
16820         * delegate.cs (Define): Re-write bits to define the delegate
16821         correctly.
16822
16823 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
16824
16825         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
16826
16827         * expression.cs (ImplicitReferenceConversion): handle null as well
16828         as a source to convert to any reference type.
16829
16830         * statement.cs (Return): Perform any implicit conversions to
16831         expected return type.  
16832
16833         Validate use of return statement.  
16834
16835         * codegen.cs (EmitContext): Pass the expected return type here.
16836
16837         * class.cs (Method, Constructor, Property): Pass expected return
16838         type to EmitContext.
16839
16840 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
16841
16842         * expression.cs: Make DoResolve take an EmitContext instead of a
16843         TypeContainer.
16844
16845         Replaced `l' and `location' for `loc', for consistency.
16846
16847         (Error, Warning): Remove unneeded Tc argument.
16848
16849         * assign.cs, literal.cs, constant.cs: Update to new calling
16850         convention. 
16851
16852         * codegen.cs: EmitContext now contains a flag indicating whether
16853         code is being generated in a static method or not.
16854
16855         * cs-parser.jay: DecomposeQI, new function that replaces the old
16856         QualifiedIdentifier.  Now we always decompose the assembled
16857         strings from qualified_identifier productions into a group of
16858         memberaccesses.
16859
16860 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
16861
16862         * rootcontext.cs: Deal with field-less struct types correctly now
16863         by passing the size option to Define Type.
16864
16865         * class.cs: Removed hack that created one static field. 
16866
16867 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
16868
16869         * statement.cs: Moved most of the code generation here. 
16870
16871 2001-10-09  Ravi Pratap  <ravi@ximian.com>
16872
16873         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
16874         seem very right.
16875
16876         (ElementAccess): Remove useless bits for now - keep checks as the spec
16877         says.
16878
16879 2001-10-08  Ravi Pratap  <ravi@ximian.com>
16880
16881         * expression.cs (ElementAccess::DoResolve): Remove my crap code
16882         and start performing checks according to the spec.
16883
16884 2001-10-07  Ravi Pratap  <ravi@ximian.com>
16885
16886         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
16887         rank_specifiers instead.
16888
16889         (rank_specifiers): Change the order in which the rank specifiers are stored
16890
16891         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
16892
16893         * expression.cs (ElementAccess): Implement the LValue interface too.
16894
16895 2001-10-06  Ravi Pratap  <ravi@ximian.com>
16896
16897         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
16898         except that user defined conversions are not included.
16899
16900         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
16901         perform the conversion of the return type, if necessary.
16902
16903         (New::DoResolve): Check whether we are creating an array or an object
16904         and accordingly do the needful.
16905
16906         (New::Emit): Same here.
16907
16908         (New::DoResolve): Implement guts of array creation.
16909
16910         (New::FormLookupType): Helper function.
16911
16912 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
16913
16914         * codegen.cs: Removed most of the code generation here, and move the
16915         corresponding code generation bits to the statement classes. 
16916
16917         Added support for try/catch/finalize and throw.
16918
16919         * cs-parser.jay: Added support for try/catch/finalize.
16920
16921         * class.cs: Catch static methods having the flags override,
16922         virtual or abstract.
16923
16924         * expression.cs (UserCast): This user cast was not really doing
16925         what it was supposed to do.  Which is to be born in fully resolved
16926         state.  Parts of the resolution were being performed at Emit time! 
16927
16928         Fixed this code.
16929
16930 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
16931
16932         * expression.cs: Implicity convert the result from UserCast.
16933
16934 2001-10-05  Ravi Pratap  <ravi@ximian.com>
16935
16936         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
16937         prevented it from working correctly. 
16938
16939         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
16940         merely ConvertImplicit.
16941
16942 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
16943
16944         * typemanager.cs: Make the LookupTypeContainer function static,
16945         and not per-instance.  
16946
16947         * class.cs: Make static FindMembers (the one that takes a Type
16948         argument). 
16949
16950         * codegen.cs: Add EmitForeach here.
16951
16952         * cs-parser.jay: Make foreach a toplevel object instead of the
16953         inline expansion, as we need to perform semantic analysis on it. 
16954
16955 2001-10-05  Ravi Pratap  <ravi@ximian.com>
16956
16957         * expression.cs (Expression::ImplicitUserConversion): Rename to
16958         UserDefinedConversion.
16959
16960         (Expression::UserDefinedConversion): Take an extra argument specifying 
16961         whether we look for explicit user conversions too.
16962
16963         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
16964
16965         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
16966
16967         (ExplicitUserConversion): Make it a call to UserDefinedConversion
16968         with the appropriate arguments.
16969
16970         * cs-parser.jay (cast_expression): Record location too.
16971
16972         * expression.cs (Cast): Record location info.
16973
16974         (Expression::ConvertExplicit): Take location argument.
16975
16976         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
16977         to determine if we are doing explicit conversions.
16978
16979         (UserCast::Emit): Update accordingly.
16980
16981         (Expression::ConvertExplicit): Report an error if everything fails.
16982
16983         * ../errors/cs0030.cs : Add.
16984
16985 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
16986
16987         * modifiers.cs: If the ABSTRACT keyword is present, also set the
16988         virtual and newslot bits. 
16989
16990         * class.cs (TypeContainer::RegisterRequiredImplementations):
16991         Record methods we need.
16992
16993         (TypeContainer::MakeKey): Helper function to make keys for
16994         MethodBases, since the Methodbase key is useless.
16995
16996         (TypeContainer::Populate): Call RegisterRequiredImplementations
16997         before defining the methods.   
16998
16999         Create a mapping for method_builders_to_methods ahead of time
17000         instead of inside a tight loop.
17001
17002         (::RequireMethods):  Accept an object as the data to set into the
17003         hashtable so we can report interface vs abstract method mismatch.
17004
17005 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
17006
17007         * report.cs: Make all of it static.
17008
17009         * rootcontext.cs: Drop object_type and value_type computations, as
17010         we have those in the TypeManager anyways.
17011
17012         Drop report instance variable too, now it is a global.
17013
17014         * driver.cs: Use try/catch on command line handling.
17015
17016         Add --probe option to debug the error reporting system with a test
17017         suite. 
17018
17019         * report.cs: Add support for exiting program when a probe
17020         condition is reached.
17021
17022 2001-10-03  Ravi Pratap  <ravi@ximian.com>
17023
17024         * expression.cs (Binary::DoNumericPromotions): Fix the case when
17025         we do a forcible conversion regardless of type, to check if 
17026         ForceConversion returns a null.
17027
17028         (Binary::error19): Use location to report error.
17029
17030         (Unary::error23): Use location here too.
17031
17032         * ../errors/cs0019.cs : Check in.
17033
17034         * ../errors/cs0023.cs : Check in.
17035
17036         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
17037         case of a non-null MethodInfo object with a length of 0 !
17038
17039         (Binary::ResolveOperator): Flag error if overload resolution fails to find
17040         an applicable member - according to the spec :-)
17041         Also fix logic to find members in base types.
17042
17043         (Unary::ResolveOperator): Same here.
17044
17045         (Unary::report23): Change name to error23 and make first argument a TypeContainer
17046         as I was getting thoroughly confused between this and error19 :-)
17047
17048         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
17049         (::FindMostEncompassedType): Implement.
17050         (::FindMostEncompassingType): Implement.
17051         (::StandardConversionExists): Implement.
17052
17053         (UserImplicitCast): Re-vamp. We now need info about most specific
17054         source and target types so that we can do the necessary conversions.
17055
17056         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
17057         mathematical union with no duplicates.
17058
17059 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
17060
17061         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
17062         in order from base classes to child classes, so that we can in
17063         child classes look up in our parent for method names and
17064         attributes (required for handling abstract, virtual, new, override
17065         constructs: we need to instrospect our base class, and if we dont
17066         populate the classes in order, the introspection might be
17067         incorrect.  For example, a method could query its parent before
17068         the parent has any methods and would determine that the parent has
17069         no abstract methods (while it could have had them)).
17070
17071         (RootContext::CreateType): Record the order in which we define the
17072         classes.
17073
17074 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
17075
17076         * class.cs (TypeContainer::Populate): Also method definitions can
17077         fail now, keep track of this.
17078
17079         (TypeContainer::FindMembers): Implement support for
17080         DeclaredOnly/noDeclaredOnly flag.
17081
17082         (Constructor::Emit) Return the ConstructorBuilder.
17083
17084         (Method::Emit) Return the MethodBuilder. 
17085         Check for abstract or virtual methods to be public.
17086
17087         * rootcontext.cs (RootContext::CreateType): Register all the
17088         abstract methods required for the class to be complete and the
17089         interface methods that must be implemented. 
17090
17091         * cs-parser.jay: Report error 501 (method requires body if it is
17092         not marked abstract or extern).
17093
17094         * expression.cs (TypeOf::Emit): Implement.
17095
17096         * typemanager.cs: runtime_handle_type, new global type.
17097
17098         * class.cs (Property::Emit): Generate code for properties.
17099
17100 2001-10-02  Ravi Pratap  <ravi@ximian.com>
17101
17102         * expression.cs (Unary::ResolveOperator): Find operators on base type
17103         too - we now conform exactly to the spec.
17104
17105         (Binary::ResolveOperator): Same here.
17106
17107         * class.cs (Operator::Define): Fix minor quirk in the tests.
17108
17109         * ../errors/cs0215.cs : Added.
17110
17111         * ../errors/cs0556.cs : Added.
17112
17113         * ../errors/cs0555.cs : Added.
17114
17115 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
17116
17117         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
17118         single integer which is really efficient
17119
17120 2001-10-01  Ravi Pratap  <ravi@ximian.com>
17121
17122         *  expression.cs (Expression::ImplicitUserConversion): Use location
17123         even in the case when we are examining True operators.
17124  
17125         * class.cs (Operator::Define): Perform extensive checks to conform
17126         with the rules for operator overloading in the spec.
17127
17128         * expression.cs (Expression::ImplicitReferenceConversion): Implement
17129         some of the other conversions mentioned in the spec.
17130
17131         * typemanager.cs (array_type): New static member for the System.Array built-in
17132         type.
17133
17134         (cloneable_interface): For System.ICloneable interface.
17135
17136         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
17137         we start resolving the tree and populating types.
17138
17139         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
17140  
17141 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
17142
17143         * expression.cs (Expression::ExprClassFromMemberInfo,
17144         Expression::Literalize): Create literal expressions from
17145         FieldInfos which are literals.
17146
17147         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
17148         type casts, because they were wrong.  The test suite in tests
17149         caught these ones.
17150
17151         (ImplicitNumericConversion): ushort to ulong requires a widening
17152         cast. 
17153
17154         Int32 constant to long requires widening cast as well.
17155
17156         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
17157         for integers because the type on the stack is not i4.
17158
17159 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
17160
17161         * expression.cs (report118): require location argument. 
17162
17163         * parameter.cs: Do not dereference potential null value.
17164
17165         * class.cs: Catch methods that lack the `new' keyword when
17166         overriding a name.  Report warnings when `new' is used without
17167         anything being there to override.
17168
17169         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
17170
17171         * class.cs: Only add constructor to hashtable if it is non-null
17172         (as now constructors can fail on define).
17173
17174         (TypeManager, Class, Struct): Take location arguments.
17175
17176         Catch field instance initialization in structs as errors.
17177
17178         accepting_filter: a new filter for FindMembers that is static so
17179         that we dont create an instance per invocation.
17180
17181         (Constructor::Define): Catch errors where a struct constructor is
17182         parameterless 
17183
17184         * cs-parser.jay: Pass location information for various new
17185         constructs. 
17186
17187         * delegate.cs (Delegate): take a location argument.
17188
17189         * driver.cs: Do not call EmitCode if there were problesm in the
17190         Definition of the types, as many Builders wont be there. 
17191
17192         * decl.cs (Decl::Decl): Require a location argument.
17193
17194         * cs-tokenizer.cs: Handle properly hex constants that can not fit
17195         into integers, and find the most appropiate integer for it.
17196
17197         * literal.cs: Implement ULongLiteral.
17198
17199         * rootcontext.cs: Provide better information about the location of
17200         failure when CreateType fails.
17201
17202 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
17203
17204         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
17205         as well.
17206
17207         * expression.cs (Binary::CheckShiftArguments): Add missing type
17208         computation.
17209         (Binary::ResolveOperator): Add type to the logical and and logical
17210         or, Bitwise And/Or and Exclusive Or code paths, it was missing
17211         before.
17212
17213         (Binary::DoNumericPromotions): In the case where either argument
17214         is ulong (and most signed types combined with ulong cause an
17215         error) perform implicit integer constant conversions as well.
17216
17217 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
17218
17219         * expression.cs (UserImplicitCast): Method should always be
17220         non-null. 
17221         (Invocation::BetterConversion): Simplified test for IntLiteral.
17222
17223         (Expression::ImplicitNumericConversion): Split this routine out.
17224         Put the code that performs implicit constant integer conversions
17225         here. 
17226
17227         (Expression::Resolve): Become a wrapper around DoResolve so we can
17228         check eclass and type being set after resolve.
17229
17230         (Invocation::Badness): Remove this dead function
17231
17232         (Binary::ResolveOperator): Do not compute the expensive argumnets
17233         unless we have a union for it.
17234
17235         (Probe::Emit): Is needs to do an isinst and then
17236         compare against null.
17237
17238         (::CanConvert): Added Location argument.  If the Location argument
17239         is null (Location.Null), then we do not report errors.  This is
17240         used by the `probe' mechanism of the Explicit conversion.  We do
17241         not want to generate an error for something that the user
17242         explicitly requested to be casted.  But the pipeline for an
17243         explicit cast first tests for potential implicit casts.
17244
17245         So for now, if the Location is null, it means `Probe only' to
17246         avoid adding another argument.   Might have to revise this
17247         strategy later.
17248
17249         (ClassCast): New class used to type cast objects into arbitrary
17250         classes (used in Explicit Reference Conversions).
17251
17252         Implement `as' as well.
17253
17254         Reverted all the patches from Ravi below: they were broken:
17255
17256                 * The use of `level' as a mechanism to stop recursive
17257                   invocations is wrong.  That was there just to catch the
17258                   bug with a strack trace but not as a way of addressing
17259                   the problem.
17260
17261                   To fix the problem we have to *understand* what is going
17262                   on and the interactions and come up with a plan, not
17263                   just get things going.
17264
17265                 * The use of the type conversion cache that I proposed
17266                   last night had an open topic: How does this work across
17267                   protection domains.  A user defined conversion might not
17268                   be public in the location where we are applying the
17269                   conversion, a different conversion might be selected
17270                   (ie, private A->B (better) but public B->A (worse),
17271                   inside A, A->B applies, but outside it, B->A will
17272                   apply).
17273
17274                 * On top of that (ie, even if the above is solved),
17275                   conversions in a cache need to be abstract.  Ie, `To
17276                   convert from an Int to a Short use an OpcodeCast', not
17277                   `To convert from an Int to a Short use the OpcodeCast on
17278                   the variable 5' (which is what this patch was doing).
17279
17280 2001-09-28  Ravi Pratap  <ravi@ximian.com>
17281
17282         * expression.cs (Invocation::ConversionExists): Re-write to use
17283         the conversion cache
17284
17285         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
17286         cache all conversions done, not just user-defined ones.
17287
17288         (Invocation::BetterConversion): The real culprit. Use ConversionExists
17289         to determine if a conversion exists instead of acutually trying to 
17290         perform the conversion. It's faster too.
17291
17292         (Expression::ConvertExplicit): Modify to use ConversionExists to check
17293         and only then attempt the implicit conversion.
17294
17295 2001-09-28  Ravi Pratap  <ravi@ximian.com>
17296
17297         * expression.cs (ConvertImplicit): Use a cache for conversions
17298         already found. Check level of recursion and bail out if necessary.
17299
17300 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
17301
17302         * typemanager.cs (string_concat_string_string, string_concat_object_object):
17303         Export standard methods that we expect for string operations.
17304
17305         * statement.cs (Block::UsageWarning): Track usage of variables and
17306         report the errors for not used variables.
17307
17308         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
17309         operator. 
17310
17311 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
17312
17313         * codegen.cs: remove unnneded code 
17314
17315         * expression.cs: Removed BuiltinTypeAccess class
17316
17317         Fix the order in which implicit conversions are
17318         done.  
17319
17320         The previous fixed dropped support for boxed conversions (adding a
17321         test to the test suite now)
17322
17323         (UserImplicitCast::CanConvert): Remove test for source being null,
17324         that code is broken.  We should not feed a null to begin with, if
17325         we do, then we should track the bug where the problem originates
17326         and not try to cover it up here.
17327
17328         Return a resolved expression of type UserImplicitCast on success
17329         rather than true/false.  Ravi: this is what I was talking about,
17330         the pattern is to use a static method as a "constructor" for
17331         objects. 
17332
17333         Also, do not create arguments until the very last minute,
17334         otherwise we always create the arguments even for lookups that
17335         will never be performed. 
17336
17337         (UserImplicitCast::Resolve): Eliminate, objects of type
17338         UserImplicitCast are born in a fully resolved state. 
17339
17340         * typemanager.cs (InitCoreTypes): Init also value_type
17341         (System.ValueType). 
17342
17343         * expression.cs (Cast::Resolve): First resolve the child expression.
17344
17345         (LValue): Add new method AddressOf to be used by
17346         the `&' operator.  
17347
17348         Change the argument of Store to take an EmitContext instead of an
17349         ILGenerator, because things like FieldExpr need to be able to call
17350         their children expression to generate the instance code. 
17351
17352         (Expression::Error, Expression::Warning): Sugar functions for
17353         reporting errors.
17354
17355         (Expression::MemberLookup): Accept a TypeContainer instead of a
17356         Report as the first argument.
17357
17358         (Expression::ResolvePrimary): Killed.  I still want to improve
17359         this as currently the code is just not right.
17360
17361         (Expression::ResolveMemberAccess): Simplify, but it is still
17362         wrong. 
17363
17364         (Unary::Resolve): Catch errors in AddressOf operators.
17365
17366         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
17367         index to a byte for the short-version, or the compiler will choose
17368         the wrong Emit call, which generates the wrong data.
17369
17370         (ParameterReference::Emit, ::Store): same.
17371
17372         (FieldExpr::AddressOf): Implement.
17373
17374         * typemanager.cs: TypeManager: made public variable instead of
17375         property.
17376
17377         * driver.cs: document --fatal.
17378
17379         * report.cs (ErrorMessage, WarningMessage): new names for the old
17380         Error and Warning classes.
17381
17382         * cs-parser.jay (member_access): Turn built-in access to types
17383         into a normal simplename
17384
17385 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17386
17387         * expression.cs (Invocation::BetterConversion): Fix to cope
17388         with q being null, since this was introducing a bug.
17389
17390         * expression.cs (ConvertImplicit): Do built-in conversions first.
17391
17392 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17393
17394         * expression.cs (UserImplicitCast::Resolve): Fix bug.
17395
17396 2001-09-27  Ravi Pratap  <ravi@ximian.com>
17397
17398         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
17399         I had introduced long ago (what's new ?).
17400
17401         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
17402         the work of all the checking. 
17403         (ConvertImplicit): Call CanConvert and only then create object if necessary.
17404         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
17405
17406         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
17407         that is the right way. 
17408
17409         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
17410         overloading resolution. Use everywhere instead of cutting and pasting code.
17411
17412         (Binary::ResolveOperator): Use MakeUnionSet.
17413
17414         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
17415         we have to convert to bool types. Not complete yet.
17416
17417 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
17418
17419         * typemanager.cs (TypeManager::CSharpName): support ushort.
17420
17421         * expression.cs (Expression::TryImplicitIntConversion): Attempts
17422         to provide an expression that performsn an implicit constant int
17423         conversion (section 6.1.6).
17424         (Expression::ConvertImplicitRequired): Reworked to include
17425         implicit constant expression conversions.
17426
17427         (Expression::ConvertNumericExplicit): Finished.
17428
17429         (Invocation::Emit): If InstanceExpression is null, then it means
17430         that we perform a call on this.
17431
17432 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
17433
17434         * expression.cs (Unary::Emit): Remove some dead code.
17435         (Probe): Implement Resolve and Emit for `is'.
17436         (Expression::ConvertImplicitRequired): Attempt to do constant
17437         expression conversions here.  Maybe should be moved to
17438         ConvertImplicit, but I am not sure.
17439         (Expression::ImplicitLongConstantConversionPossible,
17440         Expression::ImplicitIntConstantConversionPossible): New functions
17441         that tell whether is it possible to apply an implicit constant
17442         expression conversion.
17443
17444         (ConvertNumericExplicit): Started work on explicit numeric
17445         conversions.
17446
17447         * cs-parser.jay: Update operator constants.
17448
17449         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
17450         (Parameters::GetSignature): Hook up VerifyArgs here.
17451         (Parameters::VerifyArgs): Verifies that no two arguments have the
17452         same name. 
17453
17454         * class.cs (Operator): Update the operator names to reflect the
17455         ones that the spec expects (as we are just stringizing the
17456         operator names).
17457
17458         * expression.cs (Unary::ResolveOperator): Fix bug: Use
17459         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
17460         previous usage did only work for our methods.
17461         (Expression::ConvertImplicit): Handle decimal implicit numeric
17462         conversions as well.
17463         (Expression::InternalTypeConstructor): Used to invoke constructors
17464         on internal types for default promotions.
17465
17466         (Unary::Emit): Implement special handling for the pre/post
17467         increment/decrement for overloaded operators, as they need to have
17468         the same semantics as the other operators.
17469
17470         (Binary::ResolveOperator): ditto.
17471         (Invocation::ConversionExists): ditto.
17472         (UserImplicitCast::Resolve): ditto.
17473
17474 2001-09-26  Ravi Pratap  <ravi@ximian.com>
17475
17476         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
17477         operator, return after emitting body. Regression tests pass again !
17478
17479         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
17480         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
17481         (Invocation::OverloadResolve): Ditto.
17482         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
17483
17484         * everywhere : update calls to the above methods accordingly.
17485
17486 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
17487
17488         * assign.cs (Assign): Make it inherit from ExpressionStatement.
17489
17490         * expression.cs (ExpressionStatement): New base class used for
17491         expressions that can appear in statements, so that we can provide
17492         an alternate path to generate expression that do not leave a value
17493         on the stack.
17494
17495         (Expression::Emit, and all the derivatives): We no longer return
17496         whether a value is left on the stack or not.  Every expression
17497         after being emitted leaves a single value on the stack.
17498
17499         * codegen.cs (EmitContext::EmitStatementExpression): Use the
17500         facilties of ExpressionStatement if possible.
17501
17502         * cs-parser.jay: Update statement_expression.
17503
17504 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
17505
17506         * driver.cs: Change the wording of message
17507
17508 2001-09-25  Ravi Pratap  <ravi@ximian.com>
17509
17510         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
17511         the type of the expression to the return type of the method if
17512         we have an overloaded operator match ! The regression tests pass again !
17513         (Unary::ResolveOperator): Ditto.
17514
17515         * expression.cs (Invocation::ConversionExists): Correct the member lookup
17516         to find "op_Implicit", not "implicit" ;-)
17517         (UserImplicitCast): New class to take care of user-defined implicit conversions.
17518         (ConvertImplicit, ForceConversion): Take TypeContainer argument
17519
17520         * everywhere : Correct calls to the above accordingly.
17521
17522         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
17523         (ConvertImplicit): Do user-defined conversion if it exists.
17524
17525 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
17526
17527         * assign.cs: track location.
17528         (Resolve): Use implicit conversions on assignment.
17529
17530         * literal.cs: Oops.  Not good, Emit of short access values should
17531         pass (Bytes) or the wrong argument will be selected.
17532
17533         * expression.cs (Unary::Emit): Emit code for -expr.
17534
17535         (Unary::ResolveOperator): Handle `Substract' for non-constants
17536         (substract from zero from the non-constants).
17537         Deal with Doubles as well. 
17538
17539         (Expression::ConvertImplicitRequired): New routine that reports an
17540         error if no implicit conversion exists. 
17541
17542         (Invocation::OverloadResolve): Store the converted implicit
17543         expressions if we make them
17544
17545 2001-09-24  Ravi Pratap  <ravi@ximian.com>
17546
17547         * class.cs (ConstructorInitializer): Take a Location argument.
17548         (ConstructorBaseInitializer): Same here.
17549         (ConstructorThisInitializer): Same here.
17550
17551         * cs-parser.jay : Update all calls accordingly.
17552
17553         * expression.cs (Unary, Binary, New): Take location argument.
17554         Update accordingly everywhere.
17555
17556         * cs-parser.jay : Update all calls to the above to take a location
17557         argument.
17558
17559         * class.cs : Ditto.
17560
17561 2001-09-24  Ravi Pratap  <ravi@ximian.com>
17562
17563         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
17564         (Invocation::BetterConversion): Same here
17565         (Invocation::ConversionExists): Ditto.
17566
17567         (Invocation::ConversionExists): Implement.
17568
17569 2001-09-22  Ravi Pratap  <ravi@ximian.com>
17570
17571         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
17572         Also take an additional TypeContainer argument.
17573
17574         * All over : Pass in TypeContainer as argument to OverloadResolve.
17575
17576         * typemanager.cs (CSharpName): Update to check for the string type and return
17577         that too.
17578
17579         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
17580         a given method.
17581
17582 2001-09-21  Ravi Pratap  <ravi@ximian.com>
17583
17584         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
17585         (Invocation::BetterFunction): Implement.
17586         (Invocation::BetterConversion): Implement.
17587         (Invocation::ConversionExists): Skeleton, no implementation yet.
17588
17589         Okay, things work fine !
17590
17591 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
17592
17593         * typemanager.cs: declare and load enum_type, delegate_type and
17594         void_type. 
17595
17596         * expression.cs (Expression::Emit): Now emit returns a value that
17597         tells whether a value is left on the stack or not.  This strategy
17598         might be reveted tomorrow with a mechanism that would address
17599         multiple assignments.
17600         (Expression::report118): Utility routine to report mismatches on
17601         the ExprClass.
17602
17603         (Unary::Report23): Report impossible type/operator combination
17604         utility function.
17605
17606         (Unary::IsIncrementableNumber): Whether the type can be
17607         incremented or decremented with add.
17608         (Unary::ResolveOperator): Also allow enumerations to be bitwise
17609         complemented. 
17610         (Unary::ResolveOperator): Implement ++, !, ~,
17611
17612         (Invocation::Emit): Deal with new Emit convetion.
17613
17614         * All Expression derivatives: Updated their Emit method to return
17615         whether they leave values on the stack or not.
17616
17617         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
17618         stack for expressions that are statements. 
17619
17620 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
17621
17622         * expression.cs (LValue): New interface.  Must be implemented by
17623         LValue objects.
17624         (LocalVariableReference, ParameterReference, FieldExpr): Implement
17625         LValue interface.
17626
17627         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
17628         interface for generating code, simplifies the code.
17629
17630 2001-09-20  Ravi Pratap  <ravi@ximian.com>
17631
17632         * expression.cs (everywhere): Comment out return statements in ::Resolve
17633         methods to avoid the warnings.
17634
17635 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
17636
17637         * driver.cs (parse): Report error 2001 if we can not open the
17638         source file.
17639
17640         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
17641         not resolve it.
17642
17643         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
17644         object. 
17645
17646         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
17647         otherwise nested blocks end up with the same index.
17648
17649         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
17650
17651         * expression.cs:  Instead of having FIXMEs in the Resolve
17652         functions, throw exceptions so it is obvious that we are facing a
17653         bug. 
17654
17655         * cs-parser.jay (invocation_expression): Pass Location information.
17656
17657         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
17658         Use a basename for those routines because .NET does not like paths
17659         on them. 
17660
17661         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
17662         already defined.
17663
17664 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
17665
17666         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
17667         are loading the correct data types (throws an exception if not).
17668         (TypeManager::InitCoreTypes): Use CoreLookupType
17669
17670         * expression.cs (Unary::ResolveOperator): return the child
17671         expression for expressions which are just +expr.
17672         (Unary::ResolveOperator): Return negative literals for -LITERAL
17673         expressions (otherwise they are Unary {Literal}).
17674         (Invocation::Badness): Take into account `Implicit constant
17675         expression conversions'.
17676
17677         * literal.cs (LongLiteral): Implement long literal class.
17678         (IntLiteral): export the `Value' of the intliteral. 
17679
17680 2001-09-19  Ravi Pratap  <ravi@ximian.com>
17681
17682         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
17683
17684         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
17685         instead of 'Operator'
17686
17687         * expression.cs (Binary::ResolveOperator): Update accordingly.
17688         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
17689         and 'Minus'
17690
17691         * cs-parser.jay (unary_expression): Update to use the new names.
17692
17693         * gen-treedump.cs (GetUnary): Same here.
17694
17695         * expression.cs (Unary::Resolve): Implement.
17696         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
17697         operators are found instead of making noise ;-)
17698         (Unary::ResolveOperator): New method to do precisely the same thing which
17699         Binary::ResolveOperator does for Binary expressions.
17700         (Unary.method, .Arguments): Add.
17701         (Unary::OperName): Implement.   
17702         (Unary::ForceConversion): Copy and Paste !
17703
17704         * class.cs (Operator::Define): Fix a small bug for the case when we have 
17705         a unary operator.
17706
17707         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
17708         for the inbuilt operators. Only overloading works for now ;-)
17709
17710 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
17711
17712         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
17713         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
17714
17715         * expression.cs (This::Emit): Implement. 
17716         (This::Resolve): Implement.
17717         (TypeOf:Resolve): Implement.
17718         (Expression::ResolveSimpleName): Add an implicit this to instance
17719         field references. 
17720         (MemberAccess::Resolve): Deal with Parameters and Fields. 
17721         Bind instance variable to Field expressions.
17722         (FieldExpr::Instance): New field used to track the expression that
17723         represents the object instance.
17724         (FieldExpr::Resolve): Track potential errors from MemberLookup not
17725         binding 
17726         (FieldExpr::Emit): Implement.
17727
17728         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
17729         the last instruction contains a return opcode to avoid generating
17730         the last `ret' instruction (this generates correct code, and it is
17731         nice to pass the peverify output).
17732
17733         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
17734         initializer for static and instance variables.
17735         (Constructor::Emit): Allow initializer to be null in the case of
17736         static constructors.  Only emit initializer for instance
17737         constructors. 
17738
17739         (TypeContainer::FindMembers): Return a null array if there are no
17740         matches.
17741
17742         Also fix the code for the MemberTypes.Method branch, as it was not
17743         scanning that for operators (or tried to access null variables before).
17744
17745         * assign.cs (Assign::Emit): Handle instance and static fields. 
17746
17747         * TODO: Updated.
17748
17749         * driver.cs: Stop compilation if there are parse errors.
17750
17751         * cs-parser.jay (constructor_declaration): Provide default base
17752         initializer for non-static constructors.
17753         (constructor_declarator): Do not provide a default base
17754         initializers if none was specified.
17755         Catch the fact that constructors should not have parameters.
17756
17757         * class.cs: Do not emit parent class initializers for static
17758         constructors, that should be flagged as an error.
17759
17760 2001-09-18  Ravi Pratap  <ravi@ximian.com>
17761
17762         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
17763         Move back code into TypeContainer::Populate.
17764
17765 2001-09-18  Ravi Pratap  <ravi@ximian.com>
17766
17767         * class.cs (TypeContainer::AddConstructor): Fix the check to
17768         compare against Name, not Basename. 
17769         (Operator::OpType): Change Plus and Minus to Add and Subtract.
17770
17771         * cs-parser.jay : Update accordingly.
17772
17773         * class.cs (TypeContainer::FindMembers): For the case where we are searching
17774         for methods, don't forget to look into the operators too.
17775         (RegisterMethodBuilder): Helper method to take care of this for
17776         methods, constructors and operators.
17777         (Operator::Define): Completely revamp.
17778         (Operator.OperatorMethod, MethodName): New fields.
17779         (TypeContainer::Populate): Move the registering of builders into
17780         RegisterMethodBuilder.
17781         (Operator::Emit): Re-write.
17782
17783         * expression.cs (Binary::Emit): Comment out code path to emit method
17784         invocation stuff for the case when we have a user defined operator. I am
17785         just not able to get it right !
17786
17787 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
17788
17789         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
17790         argument. 
17791
17792         (Expression::MemberLookup): Provide a version that allows to
17793         specify the MemberTypes and BindingFlags. 
17794
17795         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
17796         so it was not fetching variable information from outer blocks.
17797
17798         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
17799         Beforefieldinit as it was buggy.
17800
17801         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
17802         that Ravi put here.  
17803
17804         * class.cs (Constructor::Emit): Only emit if block is not null.
17805         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
17806         deal with this by semantically definining it as if the user had
17807         done it.
17808
17809         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
17810         constructors as we now "emit" them at a higher level.
17811
17812         (TypeContainer::DefineDefaultConstructor): Used to define the
17813         default constructors if none was provided.
17814
17815         (ConstructorInitializer): Add methods Resolve and Emit. 
17816
17817         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
17818
17819 2001-09-17  Ravi Pratap  <ravi@ximian.com>
17820
17821         * class.cs (TypeContainer::EmitDefaultConstructor): Register
17822         the default constructor builder with our hashtable for methodbuilders
17823         to methodcores.
17824
17825         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
17826         and argument_count is 0 in which case we have a match.
17827         (Binary::ResolveOperator): More null checking and miscellaneous coding
17828         style cleanup.
17829
17830 2001-09-17  Ravi Pratap  <ravi@ximian.com>
17831
17832         * rootcontext.cs (IsNameSpace): Compare against null.
17833
17834         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
17835
17836         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
17837         and Unary::Operator.
17838
17839         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
17840         accordingly.
17841
17842         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
17843         we have overloaded operators.
17844         (Binary::ResolveOperator): Implement the part which does the operator overload
17845         resolution.
17846
17847         * class.cs (Operator::Emit): Implement.
17848         (TypeContainer::Emit): Emit the operators we have too.
17849
17850         * expression.cs (Binary::Emit): Update to emit the appropriate code for
17851         the case when we have a user-defined operator.
17852
17853 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
17854
17855         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
17856
17857 2001-09-16  Ravi Pratap  <ravi@ximian.com>
17858
17859         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
17860         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
17861         (Constructor::Emit): Implement.
17862         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
17863         if we have no work to do. 
17864         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
17865         Emit method.
17866
17867         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
17868         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
17869
17870         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
17871         of parent.parent.
17872
17873 2001-09-15  Ravi Pratap  <ravi@ximian.com>
17874
17875         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
17876         in the source.
17877         (Tree::RecordNamespace): Method to do what the name says ;-)
17878         (Tree::Namespaces): Property to get at the namespaces hashtable.
17879
17880         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
17881         keep track.
17882
17883         * rootcontext.cs (IsNamespace): Fixed it :-)
17884
17885 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
17886
17887         * class.cs (TypeContainer::FindMembers): Add support for
17888         constructors. 
17889         (MethodCore): New class that encapsulates both the shared aspects
17890         of a Constructor and a Method.  
17891         (Method, Constructor): Factored pieces into MethodCore.
17892
17893         * driver.cs: Added --fatal which makes errors throw exceptions.
17894         Load System assembly as well as part of the standard library.
17895
17896         * report.cs: Allow throwing exceptions on errors for debugging.
17897
17898         * modifiers.cs: Do not use `parent', instead use the real type
17899         container to evaluate permission settings.
17900
17901         * class.cs: Put Ravi's patch back in.  He is right, and we will
17902         have to cope with the
17903
17904 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17905
17906         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
17907         FamORAssem, not FamANDAssem.
17908
17909 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
17910
17911         * driver.cs: Added --parse option that only parses its input files
17912         and terminates.
17913
17914         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
17915         incorrect.  IsTopLevel is not used to tell whether an object is
17916         root_types or not (that can be achieved by testing this ==
17917         root_types).  But to see if this is a top-level *class* (not
17918         necessarly our "toplevel" container). 
17919
17920 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17921
17922         * enum.cs (Enum::Define): Modify to call the Lookup method on the
17923         parent instead of a direct call to GetType.
17924
17925 2001-09-14  Ravi Pratap  <ravi@ximian.com>
17926
17927         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
17928         Modifiers.TypeAttr. This should just be a call to that method.
17929
17930         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
17931         object so that we can determine if we are top-level or not.
17932
17933         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
17934         TypeContainer too.
17935
17936         * enum.cs (Enum::Define): Ditto.
17937
17938         * modifiers.cs (FieldAttr): Re-write.
17939
17940         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
17941         (TypeContainer::HaveStaticConstructor): New property to provide access
17942         to precisely that info.
17943
17944         * modifiers.cs (MethodAttr): Re-write.
17945         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
17946
17947         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
17948         of top-level types as claimed.
17949
17950 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
17951
17952         * expression.cs (MemberLookup): Fruitless attempt to lookup
17953         constructors.  Maybe I need to emit default constructors?  That
17954         might be it (currently .NET emits this for me automatically).
17955         (Invocation::OverloadResolve): Cope with Arguments == null.
17956         (Invocation::EmitArguments): new function, shared by the new
17957         constructor and us.
17958         (Invocation::Emit): Handle static and instance methods.  Emit
17959         proper call instruction for virtual or non-virtual invocations.
17960         (New::Emit): Implement.
17961         (New::Resolve): Implement.
17962         (MemberAccess:Resolve): Implement.
17963         (MethodGroupExpr::InstanceExpression): used conforming to the spec
17964         to track instances.
17965         (FieldExpr::Resolve): Set type.
17966
17967         * support.cs: Handle empty arguments.
17968                 
17969         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
17970         SimpleLookup): Auxiliary routines to help parse a qualifier
17971         identifier.  
17972
17973         Update qualifier_identifier rule.
17974
17975         * codegen.cs: Removed debugging messages.
17976
17977         * class.cs: Make this a global thing, this acts just as a "key" to
17978         objects that we might have around.
17979
17980         (Populate): Only initialize method_builders_to_methods once.
17981
17982         * expression.cs (PropertyExpr): Initialize type from the
17983         PropertyType. 
17984
17985         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
17986         Resolve pattern.  Attempt to implicitly convert value to boolean.
17987         Emit code.
17988
17989         * expression.cs: Set the type for the int32/int32 argument case.
17990         (Binary::ResolveOperator): Set the return type to boolean for
17991         comparission operators
17992
17993         * typemanager.cs: Remove debugging print code.
17994
17995         (Invocation::Resolve): resolve type.
17996
17997         * class.cs: Allocate a MemberInfo of the correct size, as the code
17998         elsewhere depends on the test to reflect the correct contents.
17999
18000         (Method::) Keep track of parameters, due to System.Reflection holes
18001
18002         (TypeContainer::Populate): Keep track of MethodBuilders to Method
18003         mapping here.
18004
18005         (TypeContainer::FindMembers): Use ArrayList and then copy an array
18006         of the exact size and return that.
18007
18008         (Class::LookupMethodByBuilder): New function that maps
18009         MethodBuilders to its methods.  Required to locate the information
18010         on methods because System.Reflection bit us again.
18011
18012         * support.cs: New file, contains an interface ParameterData and
18013         two implementations: ReflectionParameters and InternalParameters
18014         used to access Parameter information.  We will need to grow this
18015         as required.
18016
18017         * expression.cs (Invocation::GetParameterData): implement a cache
18018         and a wrapper around the ParameterData creation for methods. 
18019         (Invocation::OverloadResolve): Use new code.
18020
18021 2001-09-13  Ravi Pratap  <ravi@ximian.com>
18022
18023         * class.cs (TypeContainer::EmitField): Remove and move into 
18024         (Field::Define): here and modify accordingly.
18025         (Field.FieldBuilder): New member.
18026         (TypeContainer::Populate): Update accordingly.
18027         (TypeContainer::FindMembers): Implement.
18028
18029 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
18030
18031         * statement.cs: (VariableInfo::VariableType): New field to be
18032         initialized with the full type once it is resolved. 
18033
18034 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
18035
18036         * parameter.cs (GetParameterInfo): Use a type cache to compute
18037         things only once, and to reuse this information
18038
18039         * expression.cs (LocalVariableReference::Emit): Implement.
18040         (OpcodeCast::Emit): fix.
18041
18042         (ParameterReference::Resolve): Implement.
18043         (ParameterReference::Emit): Implement.
18044
18045         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
18046         that are expressions need to stay as Expressions.
18047
18048         * typemanager.cs (CSharpName): Returns the C# name of a type if
18049         possible. 
18050
18051         * expression.cs (Expression::ConvertImplicit): New function that
18052         implements implicit type conversions.
18053
18054         (Expression::ImplicitReferenceConversion): Implements implicit
18055         reference conversions.
18056
18057         (EmptyCast): New type for transparent casts.
18058
18059         (OpcodeCast): New type for casts of types that are performed with
18060         a sequence of bytecodes.
18061
18062         (BoxedCast): New type used for casting value types into reference
18063         types.  Emits a box opcode.
18064
18065         (Binary::DoNumericPromotions): Implements numeric promotions of
18066         and computation of the Binary::Type.
18067
18068         (Binary::EmitBranchable): Optimization.
18069
18070         (Binary::Emit): Implement code emission for expressions.
18071
18072         * typemanager.cs (TypeManager): Added two new core types: sbyte
18073         and byte.
18074
18075 2001-09-12  Ravi Pratap  <ravi@ximian.com>
18076
18077         * class.cs (TypeContainer::FindMembers): Method which does exactly
18078         what Type.FindMembers does, only we don't have to use reflection. No
18079         implementation yet.
18080
18081         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
18082         typecontainer objects as we need to get at them.
18083         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
18084
18085         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
18086         typecontainer object.
18087
18088         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
18089         of just a Report object.
18090
18091 2001-09-11  Ravi Pratap  <ravi@ximian.com>
18092
18093         * class.cs (Event::Define): Go back to using the prefixes "add_" and
18094         "remove_"
18095         (TypeContainer::Populate): Now define the delegates of the type too.
18096         (TypeContainer.Delegates): Property to access the list of delegates defined
18097         in the type.
18098
18099         * delegates.cs (Delegate::Define): Implement partially.
18100
18101         * modifiers.cs (TypeAttr): Handle more flags.
18102
18103 2001-09-11  Ravi Pratap  <ravi@ximian.com>
18104
18105         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
18106         and not <=
18107         (Operator::Define): Re-write logic to get types by using the LookupType method
18108         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
18109         (Indexer::Define): Ditto.
18110         (Event::Define): Ditto.
18111         (Property::Define): Ditto.
18112
18113 2001-09-10  Ravi Pratap  <ravi@ximian.com>
18114
18115         * class.cs (TypeContainer::Populate): Now define operators too. 
18116         (TypeContainer.Operators): New property to access the list of operators
18117         in a type.
18118         (Operator.OperatorMethodBuilder): New member to hold the method builder
18119         for the operator we are defining.
18120         (Operator::Define): Implement.
18121
18122 2001-09-10  Ravi Pratap  <ravi@ximian.com>
18123
18124         * class.cs (Event::Define): Make the prefixes of the accessor methods
18125         addOn_ and removeOn_ 
18126
18127         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
18128         of the location being passed in too. Ideally, this should go later since all
18129         error reporting should be done through the Report object.
18130
18131         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
18132         (Populate): Iterate thru the indexers we have and define them too.
18133         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
18134         for the get and set accessors.
18135         (Indexer::Define): Implement.
18136
18137 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
18138
18139         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
18140         my previous implementation, did not work.
18141
18142         * typemanager.cs: Add a couple of missing types (the longs).
18143
18144         * literal.cs: Use TypeManager.bool_type instead of getting it.
18145
18146         * expression.cs (EventExpr): New kind of expressions.
18147         (Expressio::ExprClassFromMemberInfo): finish
18148
18149 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
18150
18151         * assign.cs: Emit stores to static fields differently.
18152
18153 2001-09-08  Ravi Pratap  <ravi@ximian.com>
18154
18155         * Merge in changes and adjust code to tackle conflicts. Backed out my
18156         code in Assign::Resolve ;-) 
18157
18158 2001-09-08  Ravi Pratap  <ravi@ximian.com>
18159
18160         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
18161         instead Report.Error and also pass in the location.
18162         (CSharpParser::Lexer): New readonly property to return the reference
18163         to the Tokenizer object.
18164         (declare_local_variables): Use Report.Error with location instead of plain 
18165         old error.
18166         (CheckDef): Ditto.
18167
18168         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
18169         (Operator.CheckBinaryOperator): Ditto.
18170
18171         * cs-parser.jay (operator_declarator): Update accordingly.
18172
18173         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
18174         (CheckBinaryOperator): Same here.
18175
18176         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
18177         on the name without any prefixes of namespace names etc. This is because we
18178         already might have something already fully qualified like 
18179         'System.Console.WriteLine'
18180
18181         * assign.cs (Resolve): Begin implementation. Stuck ;-)
18182
18183 2001-09-07  Ravi Pratap  <ravi@ximian.com>
18184
18185         * cs-tokenizer.cs (location): Return a string which also contains
18186         the file name.
18187
18188         * expression.cs (ElementAccess): New class for expressions of the
18189         type 'element access.'
18190         (BaseAccess): New class for expressions of the type 'base access.'
18191         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
18192         respectively.
18193
18194         * cs-parser.jay (element_access): Implement action.
18195         (base_access): Implement actions.
18196         (checked_expression, unchecked_expression): Implement.
18197
18198         * cs-parser.jay (local_variable_type): Correct and implement.
18199         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
18200
18201         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
18202
18203         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
18204         name and the specifiers.
18205
18206         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
18207
18208         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
18209         making them all public ;-)
18210
18211         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
18212         class anyways.
18213
18214 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
18215
18216         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
18217         PropertyExprs.
18218         (FieldExpr, PropertyExprs): New resolved expressions.
18219         (SimpleName::MemberStaticCheck): Perform static checks for access
18220         to non-static fields on static methods. Maybe this should be
18221         generalized for MemberAccesses. 
18222         (SimpleName::ResolveSimpleName): More work on simple name
18223         resolution. 
18224
18225         * cs-parser.jay (primary_expression/qualified_identifier): track
18226         the parameter index.
18227
18228         * codegen.cs (CodeGen::Save): Catch save exception, report error.
18229         (EmitContext::EmitBoolExpression): Chain to expression generation
18230         instead of temporary hack.
18231         (::EmitStatementExpression): Put generic expression code generation.
18232
18233         * assign.cs (Assign::Emit): Implement variable assignments to
18234         local variables, parameters and fields.
18235
18236 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
18237
18238         * statement.cs (Block::GetVariableInfo): New method, returns the
18239         VariableInfo for a variable name in a block.
18240         (Block::GetVariableType): Implement in terms of GetVariableInfo
18241
18242         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
18243         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
18244
18245 2001-09-06  Ravi Pratap  <ravi@ximian.com>
18246
18247         * cs-parser.jay (operator_declaration): Continue on my quest : update
18248         to take attributes argument.
18249         (event_declaration): Ditto.
18250         (enum_declaration): Ditto.
18251         (indexer_declaration): Ditto.
18252
18253         * class.cs (Operator::Operator): Update constructor accordingly.
18254         (Event::Event): Ditto.
18255
18256         * delegate.cs (Delegate::Delegate): Same here.
18257
18258         * enum.cs (Enum::Enum): Same here.
18259
18260 2001-09-05  Ravi Pratap  <ravi@ximian.com>
18261
18262         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
18263
18264         * ../tests/cs0658.cs : New file to demonstrate error 0658.
18265
18266         * attribute.cs (Attributes): New class to encapsulate all attributes which were
18267         being passed around as an arraylist.
18268         (Attributes::AddAttribute): Method to add attribute sections.
18269
18270         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
18271         (struct_declaration): Update accordingly.
18272         (constant_declaration): Update.
18273         (field_declaration): Update.
18274         (method_header): Update.
18275         (fixed_parameter): Update.
18276         (parameter_array): Ditto.
18277         (property_declaration): Ditto.
18278         (destructor_declaration): Ditto.
18279
18280         * class.cs (Struct::Struct): Update constructors accordingly.
18281         (Class::Class): Ditto.
18282         (Field::Field): Ditto.
18283         (Method::Method): Ditto.
18284         (Property::Property): Ditto.
18285         (TypeContainer::OptAttribute): update property's return type.
18286
18287         * interface.cs (Interface.opt_attributes): New member.
18288         (Interface::Interface): Update to take the extra Attributes argument.
18289
18290         * parameter.cs (Parameter::Parameter): Ditto.
18291
18292         * constant.cs (Constant::Constant): Ditto.
18293
18294         * interface.cs (InterfaceMemberBase): New OptAttributes field.
18295         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
18296         the attributes as a parameter.
18297         (InterfaceProperty): Update constructor call.
18298         (InterfaceEvent): Ditto.
18299         (InterfaceMethod): Ditto.
18300         (InterfaceIndexer): Ditto.
18301
18302         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
18303         pass the attributes too.
18304         (interface_event_declaration): Ditto.
18305         (interface_property_declaration): Ditto.
18306         (interface_method_declaration): Ditto.
18307         (interface_declaration): Ditto.
18308
18309 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
18310
18311         * class.cs (Method::Define): Track the "static Main" definition to
18312         create an entry point. 
18313
18314         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
18315         EntryPoint if we find it. 
18316
18317         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
18318         (EmitContext::ig): Make this variable public.
18319
18320         * driver.cs: Make the default output file be the first file name
18321         with the .exe extension.  
18322
18323         Detect empty compilations
18324
18325         Handle various kinds of output targets.  Handle --target and
18326         rename -t to --dumper.
18327
18328         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
18329         methods inherited from Expression return now an Expression.  This
18330         will is used during the tree rewriting as we resolve them during
18331         semantic analysis.
18332
18333         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
18334         the spec.  Missing entirely is the information about
18335         accessability of elements of it.
18336
18337         (Expression::ExprClassFromMemberInfo): New constructor for
18338         Expressions that creates a fully initialized Expression based on
18339         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
18340         a Type.
18341
18342         (Invocation::Resolve): Begin implementing resolution of invocations.
18343
18344         * literal.cs (StringLiteral):  Implement Emit.
18345
18346 2001-09-05  Ravi Pratap  <ravi@ximian.com>
18347
18348         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
18349         member.
18350
18351 2001-09-04  Ravi Pratap  <ravi@ximian.com>
18352
18353         * cs-parser.jay (attribute_arguments): Implement actions.
18354         (attribute): Fix bug in production. Implement action.
18355         (attribute_list): Implement.
18356         (attribute_target): Implement.
18357         (attribute_target_specifier, opt_target_specifier): Implement
18358         (CheckAttributeTarget): New method to check if the attribute target
18359         is valid.
18360         (attribute_section): Implement.
18361         (opt_attributes): Implement.
18362
18363         * attribute.cs : New file to handle attributes.
18364         (Attribute): Class to hold attribute info.
18365
18366         * cs-parser.jay (opt_attribute_target_specifier): Remove production
18367         (attribute_section): Modify production to use 2 different rules to 
18368         achieve the same thing. 1 s/r conflict down !
18369         Clean out commented, useless, non-reducing dimension_separator rules.
18370
18371         * class.cs (TypeContainer.attributes): New member to hold list
18372         of attributes for a type.
18373         (Struct::Struct): Modify to take one more argument, the attribute list.
18374         (Class::Class): Ditto.
18375         (Field::Field): Ditto.
18376         (Method::Method): Ditto.
18377         (Property::Property): Ditto.
18378
18379         * cs-parser.jay (struct_declaration): Update constructor call to
18380         pass in the attributes too.
18381         (class_declaration): Ditto.
18382         (constant_declaration): Ditto.
18383         (field_declaration): Ditto.
18384         (method_header): Ditto.
18385         (fixed_parameter): Ditto.
18386         (parameter_array): Ditto.
18387         (property_declaration): Ditto.
18388
18389         * constant.cs (Constant::Constant): Update constructor similarly.
18390         Use System.Collections.
18391
18392         * parameter.cs (Parameter::Parameter): Update as above.
18393
18394 2001-09-02  Ravi Pratap  <ravi@ximian.com>
18395
18396         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
18397         (TypeContainer.delegates): New member to hold list of delegates.
18398
18399         * cs-parser.jay (delegate_declaration): Implement the action correctly 
18400         this time as I seem to be on crack ;-)
18401
18402 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
18403
18404         * rootcontext.cs (RootContext::IsNamespace): new function, used to
18405         tell whether an identifier represents a namespace.
18406
18407         * expression.cs (NamespaceExpr): A namespace expression, used only
18408         temporarly during expression resolution.
18409         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
18410         utility functions to resolve names on expressions.
18411
18412 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
18413
18414         * codegen.cs: Add hook for StatementExpressions. 
18415
18416         * class.cs: Fix inverted test for static flag in methods.
18417
18418 2001-09-02  Ravi Pratap  <ravi@ximian.com>
18419
18420         * class.cs (Operator::CheckUnaryOperator): Correct error number used
18421         to make it coincide with MS' number.
18422         (Operator::CheckBinaryOperator): Ditto.
18423
18424         * ../errors/errors.txt : Remove error numbers added earlier.
18425
18426         * ../errors/cs1019.cs : Test case for error # 1019
18427
18428         * ../errros/cs1020.cs : Test case for error # 1020
18429
18430         * cs-parser.jay : Clean out commented cruft.
18431         (dimension_separators, dimension_separator): Comment out. Ostensibly not
18432         used anywhere - non-reducing rule.
18433         (namespace_declarations): Non-reducing rule - comment out.
18434
18435         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
18436         with TypeContainer::AddEnum.
18437
18438         * delegate.cs : New file for delegate handling classes.
18439         (Delegate): Class for declaring delegates.
18440
18441         * makefile : Update.
18442
18443         * cs-parser.jay (delegate_declaration): Implement.
18444
18445 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
18446
18447         * class.cs (Event::Define): Implement.
18448         (Event.EventBuilder): New member.
18449
18450         * class.cs (TypeContainer::Populate): Update to define all enums and events
18451         we have.
18452         (Events): New property for the events arraylist we hold. Shouldn't we move to using
18453         readonly fields for all these cases ?
18454
18455 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
18456
18457         * class.cs (Property): Revamp to use the convention of making fields readonly.
18458         Accordingly modify code elsewhere.
18459
18460         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
18461         the Define method of the Property class.
18462
18463         * class.cs : Clean up applied patch and update references to variables etc. Fix 
18464         trivial bug.
18465         (TypeContainer::Populate): Update to define all the properties we have. Also
18466         define all enumerations.
18467
18468         * enum.cs (Define): Implement.
18469
18470 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
18471
18472         * cs-parser.jay (overloadable_operator): The semantic value is an
18473         enum of the Operator class.
18474         (operator_declarator): Implement actions.
18475         (operator_declaration): Implement.
18476
18477         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
18478         validity of definitions.
18479         (Operator::CheckBinaryOperator): Static method to check for binary operators
18480         (TypeContainer::AddOperator): New method to add an operator to a type.
18481
18482         * cs-parser.jay (indexer_declaration): Added line to actually call the
18483         AddIndexer method so it gets added ;-)
18484
18485         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
18486         already taken care of by the MS compiler ?  
18487
18488 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
18489
18490         * class.cs (Operator): New class for operator declarations.
18491         (Operator::OpType): Enum for the various operators.
18492
18493 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
18494
18495         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
18496         ostensibly handle this in semantic analysis.
18497
18498         * cs-parser.jay (general_catch_clause): Comment out
18499         (specific_catch_clauses, specific_catch_clause): Ditto.
18500         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
18501         (catch_args, opt_catch_args): New productions.
18502         (catch_clause): Rewrite to use the new productions above
18503         (catch_clauses): Modify accordingly.
18504         (opt_catch_clauses): New production to use in try_statement
18505         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
18506         and re-write the code in the actions to extract the specific and
18507         general catch clauses by being a little smart ;-)
18508
18509         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
18510         Hooray, try and catch statements parse fine !
18511
18512 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
18513
18514         * statement.cs (Block::GetVariableType): Fix logic to extract the type
18515         string from the hashtable of variables.
18516
18517         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
18518         I end up making that mistake ;-)
18519         (catch_clauses): Fixed gross error which made Key and Value of the 
18520         DictionaryEntry the same : $1 !!
18521
18522 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
18523
18524         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
18525
18526         * cs-parser.jay (event_declaration): Correct to remove the semicolon
18527         when the add and remove accessors are specified. 
18528
18529 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
18530
18531         * cs-parser.jay (IndexerDeclaration): New helper class to hold
18532         information about indexer_declarator.
18533         (indexer_declarator): Implement actions.
18534         (parsing_indexer): New local boolean used to keep track of whether
18535         we are parsing indexers or properties. This is necessary because 
18536         implicit_parameters come into picture even for the get accessor in the 
18537         case of an indexer.
18538         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
18539
18540         * class.cs (Indexer): New class for indexer declarations.
18541         (TypeContainer::AddIndexer): New method to add an indexer to a type.
18542         (TypeContainer::indexers): New member to hold list of indexers for the
18543         type.
18544
18545 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
18546
18547         * cs-parser.jay (add_accessor_declaration): Implement action.
18548         (remove_accessor_declaration): Implement action.
18549         (event_accessors_declaration): Implement
18550         (variable_declarators): swap statements for first rule - trivial.
18551
18552         * class.cs (Event): New class to hold information about event
18553         declarations.
18554         (TypeContainer::AddEvent): New method to add an event to a type
18555         (TypeContainer::events): New member to hold list of events.
18556
18557         * cs-parser.jay (event_declaration): Implement actions.
18558
18559 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
18560
18561         * cs-parser.jay (dim_separators): Implement. Make it a string
18562         concatenating all the commas together, just as they appear.
18563         (opt_dim_separators): Modify accordingly
18564         (rank_specifiers): Update accordingly. Basically do the same
18565         thing - instead, collect the brackets here.
18566         (opt_rank_sepcifiers): Modify accordingly.
18567         (array_type): Modify to actually return the complete type string
18568         instead of ignoring the rank_specifiers.
18569         (expression_list): Implement to collect the expressions
18570         (variable_initializer): Implement. We make it a list of expressions
18571         essentially so that we can handle the array_initializer case neatly too.
18572         (variable_initializer_list): Implement.
18573         (array_initializer): Make it a list of variable_initializers
18574         (opt_array_initializer): Modify accordingly.
18575
18576         * expression.cs (New::NType): Add enumeration to help us
18577         keep track of whether we have an object/delegate creation
18578         or an array creation.
18579         (New:NewType, New::Rank, New::Indices, New::Initializers): New
18580         members to hold data about array creation.
18581         (New:New): Modify to update NewType
18582         (New:New): New Overloaded contructor for the array creation
18583         case.
18584
18585         * cs-parser.jay (array_creation_expression): Implement to call
18586         the overloaded New constructor.
18587
18588 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
18589
18590         * class.cs (TypeContainer::Constructors): Return member
18591         constructors instead of returning null.
18592
18593 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
18594
18595         * typemanager.cs (InitCoreTypes): Initialize the various core
18596         types after we have populated the type manager with the user
18597         defined types (this distinction will be important later while
18598         compiling corlib.dll)
18599
18600         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
18601         on Expression Classification.  Now all expressions have a method
18602         `Resolve' and a method `Emit'.
18603
18604         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
18605         generation from working.     Also add some temporary debugging
18606         code. 
18607
18608 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
18609
18610         * codegen.cs: Lots of code generation pieces.  This is only the
18611         beginning, will continue tomorrow with more touches of polish.  We
18612         handle the fundamentals of if, while, do, for, return.  Others are
18613         trickier and I need to start working on invocations soon.
18614
18615         * gen-treedump.cs: Bug fix, use s.Increment here instead of
18616         s.InitStatement. 
18617
18618         * codegen.cs (EmitContext): New struct, used during code
18619         emission to keep a context.   Most of the code generation will be
18620         here. 
18621
18622         * cs-parser.jay: Add embedded blocks to the list of statements of
18623         this block.  So code generation proceeds in a top down fashion.
18624
18625 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
18626
18627         * statement.cs: Add support for multiple child blocks.
18628
18629 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
18630
18631         * codegen.cs (EmitCode): New function, will emit the code for a
18632         Block of code given a TypeContainer and its ILGenerator. 
18633
18634         * statement.cs (Block): Standard public readonly optimization.
18635         (Block::Block constructors): Link children. 
18636         (Block::Child): Child Linker.
18637         (Block::EmitVariables): Emits IL variable declarations.
18638
18639         * class.cs: Drop support for MethodGroups here, delay until
18640         Semantic Analysis.
18641         (Method::): Applied the same simplification that I did before, and
18642         move from Properties to public readonly fields.
18643         (Method::ParameterTypes): Returns the parameter types for the
18644         function, and implements a cache that will be useful later when I
18645         do error checking and the semantic analysis on the methods is
18646         performed.
18647         (Constructor::GetCallingConvention): Renamed from CallingConvetion
18648         and made a method, optional argument tells whether this is a class
18649         or a structure to apply the `has-this' bit.
18650         (Method::GetCallingConvention): Implement, returns the calling
18651         convention. 
18652         (Method::Define): Defines the type, a second pass is performed
18653         later to populate the methods.
18654
18655         (Constructor::ParameterTypes): implement a cache similar to the
18656         one on Method::ParameterTypes, useful later when we do semantic
18657         analysis. 
18658
18659         (TypeContainer::EmitMethod):  New method.  Emits methods.
18660
18661         * expression.cs: Removed MethodGroup class from here.
18662
18663         * parameter.cs (Parameters::GetCallingConvention): new method.
18664
18665 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
18666
18667         * class.cs (TypeContainer::Populate): Drop RootContext from the
18668         argument. 
18669
18670         (Constructor::CallingConvention): Returns the calling convention.
18671         (Constructor::ParameterTypes): Returns the constructor parameter
18672         types. 
18673
18674         (TypeContainer::AddConstructor): Keep track of default constructor
18675         and the default static constructor.
18676
18677         (Constructor::) Another class that starts using `public readonly'
18678         instead of properties. 
18679
18680         (Constructor::IsDefault): Whether this is a default constructor. 
18681
18682         (Field::) use readonly public fields instead of properties also.
18683
18684         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
18685         track of static constructors;  If none is used, turn on
18686         BeforeFieldInit in the TypeAttributes. 
18687
18688         * cs-parser.jay (opt_argument_list): now the return can be null
18689         for the cases where there are no arguments. 
18690
18691         (constructor_declarator): If there is no implicit `base' or
18692         `this', then invoke the default parent constructor. 
18693
18694         * modifiers.cs (MethodAttr): New static function maps a set of
18695         modifiers flags into a MethodAttributes enum
18696         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
18697         MethodAttr, TypeAttr to represent the various mappings where the
18698         modifiers are used.
18699         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
18700
18701 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
18702
18703         * parameter.cs (GetParameterInfo): Fix bug where there would be no
18704         method arguments.
18705
18706         * interface.cs (PopulateIndexer): Implemented the code generator
18707         for interface indexers.
18708
18709 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
18710
18711         * interface.cs (InterfaceMemberBase): Now we track the new status
18712         here.  
18713
18714         (PopulateProperty): Implement property population.  Woohoo!  Got
18715         Methods and Properties going today. 
18716
18717         Removed all the properties for interfaces, and replaced them with
18718         `public readonly' fields. 
18719
18720 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
18721
18722         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
18723         initialize their hashtables/arraylists only when they are needed
18724         instead of doing this always.
18725
18726         * parameter.cs: Handle refs and out parameters.
18727
18728         * cs-parser.jay: Use an ArrayList to construct the arguments
18729         instead of the ParameterCollection, and then cast that to a
18730         Parameter[] array.
18731
18732         * parameter.cs: Drop the use of ParameterCollection and use
18733         instead arrays of Parameters.
18734
18735         (GetParameterInfo): Use the Type, not the Name when resolving
18736         types. 
18737
18738 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
18739
18740         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
18741         and instead use public readonly fields.
18742
18743         * class.cs: Put back walking code for type containers.
18744
18745 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
18746
18747         * class.cs (MakeConstant): Code to define constants.
18748
18749         * rootcontext.cs (LookupType): New function.  Used to locate types 
18750
18751
18752 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
18753
18754         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
18755         this System.Reflection code is.  Kudos to Microsoft
18756
18757         * typemanager.cs: Implement a type cache and avoid loading all
18758         types at boot time.  Wrap in LookupType the internals.  This made
18759         the compiler so much faster.  Wow.  I rule!
18760
18761         * driver.cs: Make sure we always load mscorlib first (for
18762         debugging purposes, nothing really important).
18763
18764         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
18765         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
18766
18767         * rootcontext.cs: Lookup types on their namespace;  Lookup types
18768         on namespaces that have been imported using the `using' keyword.
18769
18770         * class.cs (TypeContainer::TypeAttr): Virtualize.
18771         (Class::TypeAttr): Return attributes suitable for this bad boy.
18772         (Struct::TypeAttr): ditto.
18773         Handle nested classes.
18774         (TypeContainer::) Remove all the type visiting code, it is now
18775         replaced with the rootcontext.cs code
18776
18777         * rootcontext.cs (GetClassBases): Added support for structs. 
18778
18779 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
18780
18781         * interface.cs, statement.cs, class.cs, parameter.cs,
18782         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
18783         Drop use of TypeRefs, and use strings instead.
18784
18785 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
18786
18787         * rootcontext.cs: 
18788
18789         * class.cs (Struct::Struct): set the SEALED flags after
18790         checking the modifiers.
18791         (TypeContainer::TypeAttr): new property, returns the
18792         TypeAttributes for a class.  
18793
18794         * cs-parser.jay (type_list): Oops, list production was creating a
18795         new list of base types.
18796
18797         * rootcontext.cs (StdLib): New property.
18798         (GetInterfaceTypeByName): returns an interface by type name, and
18799         encapsulates error handling here.
18800         (GetInterfaces): simplified.
18801         (ResolveTree): Encapsulated all the tree resolution here.
18802         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
18803         types. 
18804
18805         * driver.cs: Add support for --nostdlib, to avoid loading the
18806         default assemblies.
18807         (Main): Do not put tree resolution here. 
18808
18809         * rootcontext.cs: Beginning of the class resolution.
18810
18811 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
18812
18813         * rootcontext.cs: Provide better error reporting. 
18814
18815         * cs-parser.jay (interface_base): set our $$ to be interfaces.
18816
18817         * rootcontext.cs (CreateInterface): Handle the case where there
18818         are no parent interfaces.
18819
18820         (CloseTypes): Routine to flush types at the end.
18821         (CreateInterface): Track types.
18822         (GetInterfaces): Returns an array of Types from the list of
18823         defined interfaces.
18824
18825         * typemanager.c (AddUserType): Mechanism to track user types (puts
18826         the type on the global type hash, and allows us to close it at the
18827         end). 
18828
18829 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
18830
18831         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
18832         RecordInterface instead.
18833
18834         * cs-parser.jay: Updated to reflect changes above.
18835
18836         * decl.cs (Definition): Keep track of the TypeBuilder type that
18837         represents this type here.  Not sure we will use it in the long
18838         run, but wont hurt for now.
18839
18840         * driver.cs: Smaller changes to accomodate the new code.
18841
18842         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
18843         when done. 
18844
18845         * rootcontext.cs (CreateInterface):  New method, used to create
18846         the System.TypeBuilder type for interfaces.
18847         (ResolveInterfaces): new entry point to resolve the interface
18848         hierarchy. 
18849         (CodeGen): Property, used to keep track of the code generator.
18850
18851 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
18852
18853         * cs-parser.jay: Add a second production for delegate_declaration
18854         with `VOID'.
18855
18856         (enum_body): Put an opt_comma here instead of putting it on
18857         enum_body or enum_member_declarations so we can handle trailing
18858         commas on enumeration members.  Gets rid of a shift/reduce.
18859
18860         (type_list): Need a COMMA in the middle.
18861
18862         (indexer_declaration): Tell tokenizer to recognize get/set
18863
18864         * Remove old targets.
18865
18866         * Re-add the parser target.
18867
18868 2001-07-13  Simon Cozens <simon@simon-cozens.org>
18869
18870         * cs-parser.jay: Add precendence rules for a number of operators
18871         ot reduce the number of shift/reduce conflicts in the grammar.
18872
18873 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
18874
18875         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
18876         and put it here.
18877
18878         Get rid of old crufty code.
18879
18880         * rootcontext.cs: Use this to keep track of the parsed
18881         representation and the defined types available to the program. 
18882
18883         * gen-treedump.cs: adjust for new convention.
18884
18885         * type.cs: Split out the type manager, and the assembly builder
18886         from here. 
18887
18888         * typemanager.cs: the type manager will live here now.
18889
18890         * cil-codegen.cs: And the code generator here. 
18891
18892 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
18893
18894         * makefile: Fixed up for easy making.
18895
18896 2001-07-13  Simon Cozens <simon@simon-cozens.org>
18897
18898         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
18899         the 
18900
18901         (unary_expression): Expand pre_increment_expression and
18902         post_decrement_expression to reduce a shift/reduce.
18903
18904 2001-07-11  Simon Cozens
18905
18906         * cs-tokenizer.cs: Hex numbers should begin with a 0.
18907
18908         Improve allow_keyword_as_indent name.
18909
18910 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
18911
18912         * Adjustments for Beta2. 
18913
18914 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
18915
18916         * decl.cs: Added `Define' abstract method.
18917         (InTransit): new property, used to catch recursive definitions. 
18918
18919         * interface.cs: Implement `Define'. 
18920
18921         * modifiers.cs: Map Modifiers.constants to
18922         System.Reflection.TypeAttribute flags.
18923
18924         * class.cs: Keep track of types and user-defined types.
18925         (BuilderInit): New method for creating an assembly
18926         (ResolveType): New function to launch the resolution process, only
18927         used by interfaces for now.
18928
18929         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
18930         that are inserted into the name space. 
18931
18932 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
18933
18934         * ARGH.  I have screwed up my tree so many times due to the use of
18935         rsync rather than using CVS.  Going to fix this at once. 
18936
18937         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
18938         load types.
18939
18940 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
18941
18942         * Experiment successful: Use System.Type rather that our own
18943         version of Type.  
18944
18945 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
18946
18947         * cs-parser.jay: Removed nsAliases from here.
18948
18949         Use new namespaces, handle `using XXX;' 
18950
18951         * namespace.cs: Reimplemented namespace handling, use a recursive
18952         definition of the class.  Now we can keep track of using clauses
18953         and catch invalid using clauses.
18954
18955 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
18956
18957         * gen-treedump.cs: Adapted for all the renaming.
18958
18959         * expression.cs (Expression): this class now has a Type property
18960         which returns an expression Type.
18961
18962         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
18963         `Type', as this has a different meaning now in the base
18964
18965 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
18966
18967         * interface.cs, class.cs: Removed from all the sources the
18968         references to signature computation, as we can not do method
18969         signature computation during the parsing time, as we are not
18970         trying to solve at that point distinguishing:
18971
18972         class X {
18973                 void a (Blah x) {}
18974                 void a (NS.Blah x) {}
18975         }
18976
18977         Which depending on the context might be valid or not, as we do not
18978         know if Blah is the same thing as NS.Blah at that point.
18979
18980         * Redid everything so the code uses TypeRefs now instead of
18981         Types.  TypeRefs are just temporary type placeholders, that need
18982         to be resolved.  They initially have a pointer to a string and the
18983         current scope in which they are used.  This is used later by the
18984         compiler to resolve the reference to an actual Type. 
18985
18986         * DeclSpace is no longer a CIR.Type, and neither are
18987         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
18988         are all DeclSpaces, but no Types. 
18989
18990         * type.cs (TypeRefManager): This implements the TypeRef manager,
18991         which keeps track of all the types that need to be resolved after
18992         the parsing has finished. 
18993
18994 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
18995
18996         * ARGH.  We are going to have to store `foreach' as a class rather
18997         than resolving it, as we need to verify error 1579 after name
18998         resolution.   *OR* we could keep a flag that says `This request to
18999         IEnumerator comes from a foreach statement' which we can then use
19000         to generate the error.
19001
19002 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
19003
19004         * class.cs (TypeContainer.AddMethod): we now add methods to the
19005         MethodGroup instead of the method hashtable.  
19006
19007         * expression.cs: Add MethodGroup abstraction, which gets us one
19008         step closer to the specification in the way we handle method
19009         declarations.  
19010
19011         * cs-parser.jay (primary_expression): qualified_identifier now
19012         tried to match up an identifier to a local variable reference or
19013         to a parameter reference.
19014
19015         current_local_parameters is now a parser global variable that
19016         points to the current parameters for the block, used during name
19017         lookup.
19018
19019         (property_declaration): Now creates an implicit `value' argument to
19020         the set accessor.
19021
19022 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
19023
19024         * parameter.cs: Do not use `param' arguments as part of the
19025         signature, per the spec.
19026
19027 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
19028
19029         * decl.cs: Base class for classes, structs and interfaces.  This
19030         is the "Declaration Space" 
19031
19032         * cs-parser.jay: Use CheckDef for checking declaration errors
19033         instead of having one on each function.
19034
19035         * class.cs: Factor out some code for handling error handling in
19036         accordance to the "Declarations" section in the "Basic Concepts"
19037         chapter in the ECMA C# spec.
19038
19039         * interface.cs: Make all interface member classes derive from
19040         InterfaceMemberBase.
19041
19042 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
19043
19044         * Many things: all interfaces are parsed and generated in
19045         gen-treedump.  Support for member variables, constructors,
19046         destructors, properties, constants is there.
19047
19048         Beginning of the IL backend, but very little done, just there for
19049         testing purposes. 
19050
19051 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
19052
19053         * cs-parser.jay: Fix labeled statement.
19054
19055         * cs-tokenizer.cs (escape): Escape " and ' always.
19056         ref_line, ref_name: keep track of the line/filename as instructed
19057         by #line by the compiler.
19058         Parse #line.
19059
19060 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
19061
19062         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
19063         to match the values in System.CodeDOM.
19064
19065         Divid renamed to Divide.
19066
19067         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
19068         statements. 
19069         (Statements.set): remove.
19070
19071         * System.CodeDOM/CodeCatchClause.cs: always have a valid
19072         statements. 
19073
19074         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
19075         falseStatements always have valid values. 
19076
19077         * cs-parser.jay: Use System.CodeDOM now.
19078